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