]> WPIA git - gigi.git/blob - tests/org/cacert/gigi/template/TestTemplate.java
fix: ResultSet.getDate is often wrong as it fetches day-precision times
[gigi.git] / tests / org / cacert / gigi / template / TestTemplate.java
1 package org.cacert.gigi.template;
2
3 import static org.junit.Assert.*;
4
5 import java.io.CharArrayWriter;
6 import java.io.PrintWriter;
7 import java.io.StringReader;
8 import java.util.HashMap;
9 import java.util.Locale;
10 import java.util.Map;
11
12 import org.cacert.gigi.dbObjects.Digest;
13 import org.cacert.gigi.localisation.Language;
14 import org.cacert.gigi.output.HashAlgorithms;
15 import org.cacert.gigi.output.template.IterableDataset;
16 import org.cacert.gigi.output.template.Outputable;
17 import org.cacert.gigi.output.template.OutputableArrayIterable;
18 import org.cacert.gigi.output.template.Template;
19 import org.junit.Test;
20
21 public class TestTemplate {
22
23     private String testExecute(Language l, HashMap<String, Object> vars, String input) {
24         Template t = new Template(new StringReader(input));
25         CharArrayWriter caw = new CharArrayWriter();
26         PrintWriter pw = new PrintWriter(caw);
27         t.output(pw, l, vars);
28         pw.flush();
29         return new String(caw.toCharArray());
30     }
31
32     HashMap<String, Object> vars = new HashMap<>();
33
34     @Test
35     public void testVarEscape() {
36         vars.put("var", "val");
37         assertEquals("vall", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=$var?>l"));
38         vars.put("var", "val<");
39         assertEquals("val&lt;l", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=$var?>l"));
40         assertEquals("val<l", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=$!var?>l"));
41         vars.put("var", "val\">");
42         assertEquals("val&quot;&gt;l", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=$var?>l"));
43         assertEquals("val\">l", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=$!var?>l"));
44
45     }
46
47     @Test
48     public void testVarSprintf() {
49         vars.put("var", "val\">");
50         vars.put("var2", "val3<\"");
51         vars.put("var3", "val4>");
52         assertEquals("This val&quot;&gt; textl", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=_This ${var} text?>l"));
53         assertEquals("This val\"> textl", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=_This $!{var} text?>l"));
54
55         assertEquals("This val&quot;&gt; val3&lt;&quot; the val4&gt; textl", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=_This ${var} ${var2} the ${var3} text?>l"));
56         assertEquals("This val\"> val3<\" the val4> textl", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=_This $!{var} $!{var2} the $!{var3} text?>l"));
57
58         assertEquals("This blargh&lt;&gt;!, <>! textl", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=_This !'blargh&lt;&gt;!', !'<>! 'text?>l"));
59         assertEquals("This blargh&lt;&gt;!, <>!l", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=_This !'blargh&lt;&gt;!', !'<>!'?>l"));
60     }
61
62     @Test
63     public void testIf() {
64         vars.put("existent", "val");
65         assertEquals(">existent<", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<? if($existent) { ?>>existent<? } ?><<? if($nonexistent) { ?>nonexistent<? } ?>"));
66     }
67
68     @Test
69     public void testForeach() {
70         vars.put("it", new IterableDataset() {
71
72             int i = 0;
73
74             @Override
75             public boolean next(Language l, Map<String, Object> vars) {
76                 vars.put("e", Integer.toString(i++));
77                 return i < 10;
78             }
79         });
80         assertEquals("012345678<", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<? foreach($it) { ?><?=$e?><? } ?><<? foreach($nonexistent) { ?>nonexistent<? } ?>"));
81     }
82
83     @Test
84     public void testNullContent() {
85         assertEquals("<null>", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<<?=$undef?>>"));
86
87     }
88
89     @Test
90     public void testTranslate() {
91         assertEquals("&lt;null&gt;", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<?=_<null>?>"));
92
93     }
94
95     @Test
96     public void testOutputable() {
97         Outputable o = new Outputable() {
98
99             @Override
100             public void output(PrintWriter out, Language l, Map<String, Object> vars) {
101                 out.print("bl");
102             }
103         };
104         vars.put("v", new OutputableArrayIterable(new Object[] {
105                 o, o, o, o, o
106         }, "e"));
107         assertEquals("[0]bl[1]bl[2]bl[3]bl[4]bl", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<? foreach($v) { ?>[<?=$i?>]<?=$e?><? } ?>"));
108
109     }
110
111     @Test
112     public void testHashalgs() {
113         vars.put("v", new HashAlgorithms(Digest.SHA256));
114         assertEquals("SHA256[ checked='checked']SHA384[]SHA512[]", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<? foreach($v) { ?><?=$algorithm?>[<?=$!checked?>]<? } ?>"));
115
116     }
117
118     @Test
119     public void testInvalidBracketContent() {
120         try {
121             assertEquals("", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<? } ?>"));
122             fail("should throw an error");
123         } catch (Error e) {
124
125         }
126     }
127
128     @Test
129     public void testIfElse() {
130         vars.put("b", Boolean.TRUE);
131         assertEquals("true", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<? if($b){ ?>true<? } else{?>false<?}?>"));
132         vars.put("b", Boolean.FALSE);
133         assertEquals("false", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<? if($b){ ?>true<? } else{?>false<?}?>"));
134
135         vars.put("b", new Object());
136         assertEquals("true", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<? if($b){ ?>true<? } else{?>false<?}?>"));
137         vars.put("b", null);
138         assertEquals("false", testExecute(Language.getInstance(Locale.ENGLISH), vars, "<? if($b){ ?>true<? } else{?>false<?}?>"));
139     }
140
141     @Test
142     public void testIgnoredNewline() {
143         assertEquals("\\ab\\\\n\n\\c", testExecute(Language.getInstance(Locale.ENGLISH), vars, "\\a\\\nb\\\\n\n\\\\\nc"));
144         assertEquals("a\\b\\c", testExecute(Language.getInstance(Locale.ENGLISH), vars, "a\\b\\\n\\c"));
145         // \r's are now valid.
146         assertEquals("ab", testExecute(Language.getInstance(Locale.ENGLISH), vars, "a\\\r\nb"));
147     }
148
149 }