1 package org.melati.template.test;
2
3 import org.melati.MelatiConfig;
4 import org.melati.PoemContext;
5 import org.melati.poem.AccessPoemException;
6 import org.melati.poem.Capability;
7 import org.melati.poem.Field;
8 import org.melati.poem.PoemThread;
9 import org.melati.template.webmacro.WebmacroTemplateEngine;
10 import org.melati.util.MelatiException;
11 import org.melati.util.test.Node;
12
13 import java.util.ArrayList;
14 import java.util.Properties;
15 import java.util.Vector;
16
17
18
19
20
21
22
23 public class JSONMarkupLanguageWebmacroTest extends JSONMarkupLanguageSpec {
24
25 protected void melatiConfig() throws MelatiException {
26 mc = new MelatiConfig();
27 mc.setTemplateEngine(new WebmacroTemplateEngine());
28 }
29
30 public void testRenderedAccessPoemException() throws Exception {
31 assertEquals(
32 "\n{\n \"class\":\"java.lang.Exception\",\n \"asString\":\"java.lang.Exception\"\n}\n",
33 ml.rendered(new Exception()).replace("\r", ""));
34
35 AccessPoemException ape = new AccessPoemException(getDb().getUserTable()
36 .guestUser(), new Capability("Cool"));
37 assertTrue(ml.rendered(ape),
38 ml.rendered(ape).indexOf("You need the capability Cool but ") != -1);
39 ape = new AccessPoemException();
40 System.err.println(m.getWriter().toString());
41 assertEquals("", m.getWriter().toString());
42 ape = new AccessPoemException(getDb().getUserTable().guestUser(),
43 new Capability("Cool"));
44 }
45
46 public void testGetAttr() {
47
48 }
49
50 public void testEntitySubstitution() throws Exception {
51 char pound[] = { 163 };
52 assertEquals(new String(pound), ml.rendered(new String(pound)));
53 }
54
55 public void testEscapedPersistent() {
56
57 try {
58 ml.escaped(getDb().getUserTable().getUserObject(0));
59 } catch (RuntimeException e) {
60 e = null;
61 }
62 }
63
64 public void testEncoded() {
65 try {
66 ml.encoded(" ");
67 } catch (RuntimeException e) {
68 e = null;
69 }
70 }
71
72 public void testRenderedObject() throws Exception {
73 assertEquals("Fredd$", ml.rendered("Fredd$"));
74
75
76
77
78 try {
79 ml.getAttr().rendered(new Bomber());
80 fail("Should have bombed");
81 } catch (RuntimeException e) {
82 assertEquals("Not expected to be called in JSON", e.getMessage());
83 e = null;
84 }
85
86 try {
87 ml.rendered(new Bomber());
88 fail("Should have bombed");
89 } catch (RuntimeException e) {
90 assertTrue(e.getMessage().indexOf("Bomber bombed") > -1);
91 e = null;
92 }
93
94 Node persistent = (Node) getDb().getTable("node").newPersistent();
95 persistent.setName("Mum");
96 persistent.makePersistent();
97 m.setPoemContext(new PoemContext());
98
99 String renderedPersistent = ml.rendered(persistent);
100 assertEquals(
101 "{\n \"class\":\"org.melati.util.test.Node\",\n \"value\":\"Mum\"\n}",
102 renderedPersistent.replace("\r", ""));
103 }
104
105
106
107
108 public void testRenderedMarkupString() throws Exception {
109 try {
110 ml.renderedMarkup("</a>");
111 fail("Should have bombed");
112 } catch (RuntimeException e) {
113 assertEquals("Not expected to be called in JSON", e.getMessage());
114 e = null;
115 }
116 assertEquals("<\\/a>", ml.rendered("</a>"));
117 }
118
119
120
121
122
123
124 public void testUntemplatedObjectUsesToString() throws Exception {
125 assertEquals("{\n \"class\":\"java.util.Properties\",\n \"asString\":\"{}\"\n}\n",
126 ml.rendered(new Properties()).replace("\r", ""));
127 }
128
129 public void testSpecialTemplateFound() throws Exception {
130
131 }
132 public void testInputField() throws Exception {
133
134 }
135 public void testInputFieldSelection() throws Exception {
136
137 }
138 public void testSelectionWindowField() throws Exception {
139
140 }
141 public void testInputFieldForRestrictedField() throws Exception {
142 PoemThread.setAccessToken(getDb().getUserTable().guestUser());
143 Field<?> password = getDb().getUserTable().getPasswordColumn().asEmptyField();
144 System.err.println(ml.rendered(getDb().getUserTable().administratorUser()));
145 System.err.println(ml.input(password));
146 assertEquals("{\n \"class\":\"org.melati.poem.Field\",\n" +
147 " \"asString\":\"password: \"\n}\n",
148 ml.input(password).replace("\r", ""));
149 assertEquals("", ml.rendered(password));
150 try {
151 assertEquals("", ml.rendered(ml.rendered(getDb().getUserTable().administratorUser().getField("password"))));
152 fail("Should have bombed");
153 } catch (AccessPoemException e) {
154 e = null;
155 }
156 }
157
158 public void testInputAs() throws Exception {
159 }
160
161 public void testSearchInput() throws Exception {
162 }
163
164 public void testRenderedTreeable() throws Exception {
165 }
166
167
168
169
170 public void testNull() throws Exception {
171 assertEquals("null",ml.rendered(null));
172 }
173 public void testRenderedList() {
174 ArrayList<Object>l = new ArrayList<Object>();
175 assertEquals("[]\n", ml.rendered(l));
176 l.add(null);
177 assertEquals("[null]\n", ml.rendered(l));
178 l.add(null);
179 assertEquals("[null,null]\n", ml.rendered(l));
180 l.add(Boolean.TRUE);
181 assertEquals("[null,null,true]\n", ml.rendered(l));
182 l.add(Boolean.FALSE);
183 assertEquals("[null,null,true,false]\n", ml.rendered(l));
184 l.add(null);
185 assertEquals("[null,null,true,false,null]\n", ml.rendered(l));
186 l.add("test");
187 assertEquals("[null,null,true,false,null,\"test\"]\n", ml.rendered(l));
188
189 Vector<Object> v = new Vector<Object>();
190 assertEquals("[]\n", ml.rendered(v));
191 v.add("one");
192 assertEquals("[\"one\"]\n", ml.rendered(v));
193 v.add("one");
194 assertEquals("[\"one\",\"one\"]\n", ml.rendered(v));
195 assertEquals("[\"one\",\"one\"]\n", ml.rendered(v.elements()));
196 }
197
198 public void testRenderedSelection() {
199 assertEquals("[{\n \"class\":\"org.melati.poem.User\",\n \"value\":\"Melati guest user\"\n}"+
200 ",{\n \"class\":\"org.melati.poem.User\",\n \"value\":\"Melati database administrator\"\n}]\n",
201 ml.rendered(getDb().getUserTable().selection()).replace("\r", ""));
202 }
203 }