1 package org.melati.template.test;
2
3 import java.util.Properties;
4
5 import org.melati.Melati;
6 import org.melati.MelatiConfig;
7 import org.melati.PoemContext;
8 import org.melati.poem.AccessPoemException;
9 import org.melati.poem.BaseFieldAttributes;
10 import org.melati.poem.Capability;
11 import org.melati.poem.Column;
12 import org.melati.poem.Field;
13 import org.melati.poem.PoemLocale;
14 import org.melati.poem.PoemThread;
15 import org.melati.util.test.Node;
16 import org.melati.util.test.TreeDatabase;
17 import org.melati.template.AttributeMarkupLanguage;
18 import org.melati.template.HTMLMarkupLanguage;
19 import org.melati.template.MarkupLanguage;
20 import org.melati.template.TemplateContext;
21 import org.melati.template.TemplateEngine;
22 import org.melati.template.TemplateEngineException;
23 import org.melati.util.JSStaticTree;
24 import org.melati.util.MelatiException;
25 import org.melati.util.MelatiStringWriter;
26 import org.melati.util.Tree;
27
28 import junit.framework.TestCase;
29
30
31
32
33
34
35
36
37 abstract public class MarkupLanguageSpec extends TreeTestCase {
38
39 protected static MelatiConfig mc = null;
40 protected static TemplateEngine templateEngine = null;
41 protected static MarkupLanguage ml = null;
42 protected static AttributeMarkupLanguage aml = null;
43 protected static Melati m = null;
44
45
46
47
48
49 public MarkupLanguageSpec(String arg0) {
50 super(arg0);
51 }
52
53
54
55 public MarkupLanguageSpec() {
56 super();
57 }
58
59
60
61
62
63
64 protected void setUp() throws Exception
65 {
66 super.setUp();
67 melatiConfig();
68 templateEngine = mc.getTemplateEngine();
69
70 templateEngine.init(mc);
71 m = new Melati(mc, new MelatiStringWriter());
72 m.setTemplateEngine(templateEngine);
73 m.setPoemContext(new PoemContext());
74 assertNotNull(m.getTemplateEngine());
75 TemplateContext templateContext =
76 templateEngine.getTemplateContext(m);
77 m.setTemplateContext(templateContext);
78 }
79
80 abstract protected void melatiConfig() throws MelatiException ;
81
82
83
84
85
86
87
88
89
90
91 public void testRenderedAccessPoemException() throws Exception {
92
93 assertEquals("java.lang.Exception",aml.rendered(new Exception()));
94
95 AccessPoemException ape = new AccessPoemException(
96 getDb().getUserTable().guestUser(), new Capability("Cool"));
97 assertTrue(ml.rendered(ape),ml.rendered(ape).indexOf("[Access denied to Melati guest user]") != -1);
98 ape = new AccessPoemException();
99 assertEquals("", aml.rendered(ape));
100
101 assertTrue(m.getWriter().toString().indexOf("[Access denied to [UNRENDERABLE EXCEPTION!]") != -1);
102 ape = new AccessPoemException(
103 getDb().getUserTable().guestUser(), new Capability("Cool"));
104 assertEquals("", aml.rendered(ape));
105
106
107
108 assertTrue(m.getWriter().toString().indexOf("[Access denied to _guest_]") != -1);
109
110 }
111
112
113
114
115
116
117
118 public void testHTMLMarkupLanguageMelatiTempletLoaderPoemLocale() {
119
120 }
121
122
123
124
125
126
127 public void testHTMLMarkupLanguageStringHTMLMarkupLanguage() {
128
129 }
130
131
132
133
134
135
136 public void testGetAttr() {
137 assertEquals(aml.getClass(), ml.getAttr().getClass());
138 }
139
140
141
142
143
144
145 public void testEscapedString() throws Exception {
146
147 }
148
149
150
151
152 public void testEntitySubstitution() throws Exception {
153 char pound[] = {163};
154 assertEquals("£", ml.rendered(new String(pound)));
155 assertEquals("£", aml.rendered(new String(pound)));
156 }
157
158
159
160
161
162
163 public void testEscapedPersistent() {
164 assertEquals("Melati guest user",ml.escaped(getDb().getUserTable().getUserObject(0)));
165 }
166
167
168
169
170
171
172 public void testEncoded() {
173 assertEquals("+", ml.encoded(" "));
174 assertEquals("+", aml.encoded(" "));
175 assertEquals("%26", ml.encoded("&"));
176 assertEquals("%26", aml.encoded("&"));
177 }
178
179
180
181
182
183
184 public void testRenderedObject() throws Exception {
185 assertEquals("Fredd$", ml.rendered("Fredd$"));
186
187 assertEquals("[1]", ml.rendered(new Integer("1")).trim());
188
189 assertEquals("1", ml.getAttr().rendered(new Integer("1")));
190 try {
191 ml.getAttr().rendered(new Bomber());
192 fail("Should have bombed");
193 } catch (Exception e) {
194 e = null;
195 }
196
197 try {
198 ml.rendered(new Bomber());
199 fail("Should have bombed");
200 } catch (Exception e) {
201 e = null;
202 }
203
204 Node persistent = (Node)getDb().getTable("node").newPersistent();
205 persistent.setName("Mum");
206 persistent.makePersistent();
207 m.setPoemContext(new PoemContext());
208
209 String renderedPersistent = ml.rendered(persistent);
210
211 assertEquals("Mum", renderedPersistent);
212
213 }
214
215
216
217 public void testRenderedMarkupString() throws Exception {
218 assertEquals("</a>",ml.renderedMarkup("</a>"));
219 assertEquals("</a>",ml.rendered("</a>"));
220 }
221
222
223
224
225 public void testSyntaxErrorInTemplet() throws Exception {
226 Object templated = new TemplatedWithSyntaxError();
227 try {
228 ml.rendered(templated);
229 fail("Should have bombed");
230 } catch (TemplateEngineException e) {
231 e = null;
232 }
233 }
234
235
236
237 public void testEvaluationErrorInTemplet() throws Exception {
238 Object templated = new TemplatedWithBombingToString();
239 try {
240 ml.rendered(templated);
241 fail("Should have bombed");
242 } catch (TemplateEngineException e) {
243 e = null;
244 }
245 }
246
247
248
249
250 public void testSyntaxErrorInWMTemplet() throws Exception {
251 Object templated = new TemplatedWithWMSyntaxError();
252 try {
253 ml.rendered(templated);
254 fail("Should have bombed");
255 } catch (TemplateEngineException e) {
256 e = null;
257 }
258 }
259
260
261
262
263 public void testTemplateFoundOnClasspath() throws Exception {
264 Templated templated = new Templated();
265 String rendered = ml.rendered(templated);
266 assertEquals("Hi, this is from a template.", rendered);
267 }
268
269
270
271
272 public void testUntemplatedObjectUsesToString() throws Exception {
273
274 String rendered = ml.rendered(new Properties());
275
276 assertEquals("[{}]", rendered.trim());
277 }
278
279
280
281 public void testSpecialTemplateFound() throws Exception {
282 Column<Integer> column = getDb().getGroupMembershipTable().getUserColumn();
283 BaseFieldAttributes<Integer> fa = new BaseFieldAttributes<Integer>(column, column.getType());
284 Field<Integer> field = new Field<Integer>(getDb().getUserTable().administratorUser().troid(), fa);
285 Object adminUtil = m.getContextUtil("org.melati.admin.AdminUtils");
286 assertTrue(adminUtil instanceof org.melati.admin.AdminUtils);
287 assertTrue(ml.input(field).indexOf("add_rule(\"field_user\",") != -1);
288 }
289
290
291
292
293 class Bomber {
294
295
296
297 public Bomber() {}
298
299
300
301 public String toString() {
302 throw new RuntimeException("Bomber bombed.");
303 }
304 }
305
306
307
308
309
310 public void testRenderedString() throws Exception {
311 assertEquals("Fredd$", ml.rendered("Fredd$"));
312 }
313
314
315
316
317 public void testNull() throws Exception {
318 try {
319 ml.rendered(null);
320 fail("should have bombed");
321 } catch (NullPointerException e) {
322 e = null;
323 }
324
325 }
326
327
328
329
330
331 public void testRenderedStringInt() throws Exception {
332 assertEquals("Fre...", ml.rendered("Fredd$", 3));
333 }
334
335
336
337
338
339
340 public void testRenderedField() throws Exception {
341 Field<?> userName = getDb().getUserTable().getUserObject(0).getField("login");
342 assertEquals("_guest_", ml.rendered(userName));
343 }
344
345
346
347
348
349 public void testRenderedFieldInt() throws Exception {
350 Field<?> userName = getDb().getUserTable().getUserObject(0).getField("login");
351 assertEquals("_guest_", ml.rendered(userName,3));
352 }
353
354
355
356
357
358
359 public void testRenderedFieldIntInt() throws Exception {
360 Field<?> userName = getDb().getUserTable().getUserObject(0).getField("login");
361 assertEquals("_gu...", ml.rendered(userName,3,3));
362 }
363
364
365
366
367
368
369
370 public void testRenderedStart() throws Exception {
371 Field<?> userName = getDb().getUserTable().getUserObject(0).getField("login");
372 assertEquals("_guest_", ml.renderedStart(userName));
373 }
374
375
376
377
378
379
380 public void testInputField() throws Exception {
381 Field<?> userName = getDb().getUserTable().getUserObject(0).getField("login");
382 assertTrue(ml.input(userName).toLowerCase().indexOf("<input name=\"field_login\"") != -1);
383 }
384
385
386
387
388
389 public void testInputFieldSelection() throws Exception {
390
391 Field<?> group = getDb().getGroupMembershipTable().getGroupMembershipObject(0).getField("group");
392 System.err.println(ml.input(group));
393 assertTrue(ml.input(group).indexOf("name=\"field_group\"") != -1);
394 assertTrue(ml.input(group).indexOf("id=\"field_group\"") != -1);
395 assertTrue(ml.input(group).indexOf("<select") != -1);
396 }
397
398
399
400
401
402 public void testSelectionWindowField() throws Exception {
403 Field<?> owningTable = getDb().getColumnInfoTable().getColumnInfoObject(0).getField("tableinfo");
404 assertTrue(ml.input(owningTable).indexOf("<input type=\"text\" name=\"field_tableinfo_dummy\"") != -1);
405 Field<?> user = getDb().getGroupMembershipTable().getGroupMembershipObject(0).getField("user");
406 assertTrue(ml.input(user).indexOf("<input type=\"text\" name=\"field_user_dummy\"") != -1);
407 }
408
409
410
411
412 public void testInputFieldForRestrictedField() throws Exception {
413 PoemThread.setAccessToken(getDb().getUserTable().guestUser());
414 Field<?> password = getDb().getUserTable().getPasswordColumn().asEmptyField();
415 assertTrue(ml.input(password).toLowerCase().indexOf("name=\"field_password\"") != -1);
416
417 }
418
419
420
421
422
423
424 public void testInputAs() throws Exception {
425 Field<?> userName = getDb().getUserTable().getUserObject(0).getField("login");
426 try {
427 assertTrue(ml.inputAs(userName, "nonExistantTemplateName").toLowerCase().indexOf("<input name=\"field_login\"") != -1);
428 fail("Should have bombed");
429 } catch (Exception e) {
430 e = null;
431 }
432 assertTrue(ml.inputAs(userName, "org.melati.poem.StringPoemType").toLowerCase().indexOf("<input name=\"field_login\"") != -1);
433 }
434
435
436
437
438
439
440 public void testSearchInput() throws Exception {
441 Field<?> userName = getDb().getUserTable().getUserObject(0).getField("login");
442 assertTrue(ml.searchInput(userName, "None").toLowerCase().indexOf("<input name=\"field_login\"") != -1);
443 }
444
445
446
447
448
449
450
451 public void testRenderedTreeable() throws Exception {
452 Node parent = (Node)((TreeDatabase)getDb()).getNodeTable().newPersistent();
453 parent.setName("Mum");
454 parent.makePersistent();
455 Node kid1 = (Node)((TreeDatabase)getDb()).getNodeTable().newPersistent();
456 kid1.setName("K1");
457 kid1.setParent(parent);
458 kid1.makePersistent();
459 Node kid2 = (Node)((TreeDatabase)getDb()).getNodeTable().newPersistent();
460 kid2.setName("K2");
461 kid2.setParent(parent);
462 kid2.makePersistent();
463 Tree testTree = new Tree(parent);
464 JSStaticTree tree = new JSStaticTree(testTree, "/melati-static/admin/static");
465 m.setPoemContext(new PoemContext());
466
467 String renderedTree = ml.rendered(tree);
468
469 assertTrue(renderedTree.indexOf("init") != -1);
470
471 }
472
473
474 }