View Javadoc
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   * Test the JSONMarkupLanguage and its AttributeMarkupLanguage.
19   * 
20   * @author timp
21   * @since 18-May-2006
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      // we don't have one
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      // not implemented yet
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      // Note velocity seems to leave the line end on
75      // assertEquals("[1]", ml.rendered(new Integer("1")).trim());
76  
77      // assertEquals("1", ml.getAttr().rendered(new Integer("1")));
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    * @see org.melati.template.MarkupLanguage#renderedMarkup
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    * Test that toString is used if no template found.
121    * FIXME a template has to be found as there is always an Object template
122    * What is this test meant to be about?
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     // not applicable
131   }
132   public void testInputField() throws Exception {
133     // not applicable
134   }
135   public void testInputFieldSelection() throws Exception {
136     // not applicable
137   }
138   public void testSelectionWindowField() throws Exception {
139     // not applicable
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    * Test NPE not thrown.
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 }