1   /**
2    * 
3    */
4   package org.melati.template.test;
5   
6   import org.melati.Melati;
7   import org.melati.MelatiConfig;
8   import org.melati.PoemContext;
9   import org.melati.poem.AccessPoemException;
10  import org.melati.poem.Capability;
11  import org.melati.poem.Field;
12  import org.melati.poem.test.PoemTestCase;
13  import org.melati.template.ClassNameTempletLoader;
14  import org.melati.template.MarkupLanguage;
15  import org.melati.template.NotFoundException;
16  import org.melati.template.Template;
17  import org.melati.template.TemplateContext;
18  import org.melati.template.TemplateEngine;
19  import org.melati.template.TemplateEngineException;
20  import org.melati.util.MelatiStringWriter;
21  
22  
23  /**
24   * @author timp
25   * @since 22 Jun 2007
26   *
27   */
28  public class ClassNameTempletLoaderTest extends PoemTestCase {
29  
30    /**
31     * @param name
32     */
33    public ClassNameTempletLoaderTest(String name) {
34      super(name);
35    }
36  
37    /** 
38     * {@inheritDoc}
39     * @see junit.framework.TestCase#setUp()
40     */
41    protected void setUp() throws Exception {
42      super.setUp();
43    }
44  
45    /** 
46     * {@inheritDoc}
47     * @see junit.framework.TestCase#tearDown()
48     */
49    protected void tearDown() throws Exception {
50      super.tearDown();
51    }
52  
53    /**
54     * Test method for {@link org.melati.template.ClassNameTempletLoader#getInstance()}.
55     */
56    public void testGetInstance() {
57      
58    }
59  
60    /**
61     * Test method for {@link org.melati.template.ClassNameTempletLoader#templet(org.melati.template.TemplateEngine, org.melati.template.MarkupLanguage, java.lang.String, java.lang.String)}.
62     */
63    public void testTempletTemplateEngineMarkupLanguageStringString() throws Exception {
64      MelatiConfig mc = new MelatiConfig();
65      TemplateEngine templateEngine = mc.getTemplateEngine();
66      Templated templated = new Templated();
67      templateEngine.init(mc);
68      Melati m = new Melati(mc, new MelatiStringWriter());
69      m.setTemplateEngine(templateEngine);
70      m.setPoemContext(new PoemContext());
71      assertNotNull(m.getTemplateEngine());
72      MarkupLanguage ml = m.getMarkupLanguage();
73      Template t = ClassNameTempletLoader.getInstance().templet(
74              templateEngine, ml, templated.getClass());
75      TemplateContext tc =
76        templateEngine.getTemplateContext(m);
77      m.setTemplateContext(tc);
78      tc.put("melati", m);
79      tc.put("ml", ml);
80      tc.put("object", new Integer("1"));
81      m.setTemplateContext(tc);
82      t.write(m.getWriter(), m.getTemplateContext(), templateEngine);
83      try {
84        t = ClassNameTempletLoader.getInstance().templet(
85                templateEngine, ml, "error", new Exception().getClass());
86        tc = m.getTemplateContext();
87        tc.put("melati", m);
88        tc.put("ml", ml);
89        tc.put("object", new Integer("1"));
90        t.write(m.getWriter(),tc, m.getTemplateEngine());
91        System.err.println(m.getWriter().toString());
92        fail("Should have bombed");
93      } catch (TemplateEngineException e) {
94        e = null;
95        // Pass - we should have passed in an exception as the object
96      } 
97  
98      t = ClassNameTempletLoader.getInstance().templet(
99              templateEngine, ml, "error",new Exception().getClass());
100     tc = m.getTemplateContext();
101     tc.put("melati", m);
102     tc.put("ml", ml);
103     tc.put("object",new Exception("A message"));
104     m.setTemplateContext(tc);
105     t.write(m.getWriter(),tc, m.getTemplateEngine());
106     assertTrue(m.getWriter().toString().indexOf("A message") != -1);
107 
108     t = ClassNameTempletLoader.getInstance().templet(
109             templateEngine, ml, "error", new AccessPoemException().getClass());
110     tc = m.getTemplateContext();
111     tc.put("melati", m);
112     tc.put("ml", m.getMarkupLanguage());
113     tc.put("object", new AccessPoemException(getDb().getUserTable().guestUser(),new Capability("Cool")));
114     m.setTemplateContext(tc);
115     t.write(m.getWriter(),tc, m.getTemplateEngine());
116     //System.err.println(m.getWriter().toString());
117     assertTrue(m.getWriter().toString().indexOf("[Access denied to Melati guest user]") != -1);
118     
119   }
120 
121   /**
122    * Test method for {@link org.melati.template.ClassNameTempletLoader#templet(
123    * org.melati.template.TemplateEngine, org.melati.template.MarkupLanguage, java.lang.String)}.
124    */
125   public void testTempletTemplateEngineMarkupLanguageString() throws Exception {
126     MelatiConfig mc = new MelatiConfig();
127     TemplateEngine templateEngine = mc.getTemplateEngine();
128     templateEngine.init(mc);
129     Melati m = new Melati(mc, new MelatiStringWriter());
130     m.setTemplateEngine(templateEngine);
131     m.setPoemContext(new PoemContext());
132     assertNotNull(m.getTemplateEngine());
133     MarkupLanguage ml = m.getMarkupLanguage();
134     try {
135       ClassNameTempletLoader.getInstance().templet(
136               templateEngine, ml,new Integer("1").getClass().getName());
137       fail("Should have bombed");
138     } catch (NotFoundException e) {
139       e = null;
140     }
141     Template t = ClassNameTempletLoader.getInstance().templet(
142             templateEngine, ml, new Object().getClass().getName());
143     TemplateContext tc =
144       templateEngine.getTemplateContext(m);
145     m.setTemplateContext(tc);
146     tc.put("melati", m);
147     tc.put("ml", ml);
148     tc.put("object", new Object());
149     t.write(m.getWriter(),tc, m.getTemplateEngine());
150     assertTrue(m.getWriter().toString().startsWith("[java.lang.Object@"));
151 
152     t = ClassNameTempletLoader.getInstance().templet(
153             templateEngine, ml,"org.melati.poem.ReferencePoemType-SelectionWindow");
154     tc = m.getTemplateContext();
155     tc.put("melati", m);
156     tc.put("ml", ml);
157     Field tableField = getDb().getColumnInfoTable().
158                            getColumnInfoObject(0).getField("tableinfo");
159     tc.put("object", tableField);
160     t.write(m.getWriter(),tc, m.getTemplateEngine());
161     System.err.println(m.getWriter().toString());
162     assertTrue(m.getWriter().toString().indexOf("tableinfo_button") != -1);
163 
164 
165   }
166 
167   /**
168    * Test method for {@link org.melati.template.ClassNameTempletLoader#templet(
169    *                        org.melati.template.TemplateEngine, 
170    *                        org.melati.template.MarkupLanguage, 
171    *                        java.lang.String, 
172    *                        java.lang.Class)}.
173    */
174   public void testTempletTemplateEngineMarkupLanguageStringClass() throws Exception {
175     MelatiConfig mc = new MelatiConfig();
176     TemplateEngine templateEngine = mc.getTemplateEngine();
177     Templated templated = new Templated();
178     templateEngine.init(mc);
179     Melati m = new Melati(mc, new MelatiStringWriter());
180     m.setTemplateEngine(templateEngine);
181     m.setPoemContext(new PoemContext());
182     assertNotNull(m.getTemplateEngine());
183     MarkupLanguage ml = m.getMarkupLanguage();
184     Template t = ClassNameTempletLoader.getInstance().templet(
185             templateEngine, ml, templated.getClass());
186     TemplateContext tc =
187       templateEngine.getTemplateContext(m);
188     m.setTemplateContext(tc);
189     tc.put("melati", m);
190     tc.put("ml", ml);
191     tc.put("object", new Integer("1"));
192     m.setTemplateContext(tc);
193     t.write(m.getWriter(), m.getTemplateContext(), templateEngine);
194     assertEquals("Hi, this is from a template.", m.getWriter().toString());
195   }
196 
197   /**
198    * Test method for {@link org.melati.template.ClassNameTempletLoader#templet(
199    * org.melati.template.TemplateEngine, 
200    * org.melati.template.MarkupLanguage, 
201    * java.lang.Class)}.
202    */
203   public void testTempletTemplateEngineMarkupLanguageClass() throws Exception {
204     MelatiConfig mc = new MelatiConfig();
205     TemplateEngine templateEngine = mc.getTemplateEngine();
206     templateEngine.init(mc);
207     Melati m = new Melati(mc, new MelatiStringWriter());
208     m.setTemplateEngine(templateEngine);
209     m.setPoemContext(new PoemContext());
210     assertNotNull(m.getTemplateEngine());
211     TemplateContext templateContext =
212       templateEngine.getTemplateContext(m);
213     m.setTemplateContext(templateContext);
214     MarkupLanguage ml = m.getMarkupLanguage();
215     Template t = ClassNameTempletLoader.getInstance().templet(
216             templateEngine, ml,
217             new Integer("1").getClass());
218     TemplateContext tc = m.getTemplateContext();
219     tc.put("melati", m);
220     tc.put("ml", ml);
221     tc.put("object", new Integer("1"));
222     t.write(m.getWriter(), tc, m.getTemplateEngine());
223     // FIXME too much whitespace remaining
224     assertEquals("[1]", m.getWriter().toString().trim());
225     
226   }
227 
228   /**
229    * Test method for {@link org.melati.template.ClassNameTempletLoader#templet(org.melati.template.TemplateEngine, org.melati.template.MarkupLanguage, org.melati.poem.FieldAttributes)}.
230    */
231   public void testTempletTemplateEngineMarkupLanguageFieldAttributes() {
232     
233   }
234 
235 }