source: josm/trunk/test/unit/org/openstreetmap/josm/tools/template_engine/TemplateEngineTest.java@ 8510

Last change on this file since 8510 was 8510, checked in by Don-vip, 9 years ago

checkstyle: enable relevant whitespace checks and fix them

  • Property svn:eol-style set to native
File size: 11.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.tools.template_engine;
3
4import java.util.Arrays;
5import java.util.List;
6
7import org.junit.Assert;
8import org.junit.BeforeClass;
9import org.junit.Test;
10import org.openstreetmap.josm.JOSMFixture;
11import org.openstreetmap.josm.actions.search.SearchCompiler;
12import org.openstreetmap.josm.actions.search.SearchCompiler.Match;
13import org.openstreetmap.josm.data.osm.DatasetFactory;
14import org.openstreetmap.josm.data.osm.Node;
15import org.openstreetmap.josm.data.osm.Relation;
16import org.openstreetmap.josm.data.osm.RelationMember;
17import org.unitils.reflectionassert.ReflectionAssert;
18
19public class TemplateEngineTest {
20
21 /**
22 * Setup test.
23 */
24 @BeforeClass
25 public static void setUp() {
26 JOSMFixture.createUnitTestFixture().init();
27 }
28
29 @Test
30 public void testEmpty() throws ParseError {
31 TemplateParser parser = new TemplateParser("");
32 ReflectionAssert.assertReflectionEquals(new StaticText(""), parser.parse());
33 }
34
35 @Test
36 public void testVariable() throws ParseError {
37 TemplateParser parser = new TemplateParser("abc{var}\\{ef\\$\\{g");
38 ReflectionAssert.assertReflectionEquals(CompoundTemplateEntry.fromArray(new StaticText("abc"),
39 new Variable("var"), new StaticText("{ef${g")), parser.parse());
40 }
41
42 @Test
43 public void testConditionWhitespace() throws ParseError {
44 TemplateParser parser = new TemplateParser("?{ '{name} {desc}' | '{name}' | '{desc}' }");
45 Condition condition = new Condition();
46 condition.getEntries().add(CompoundTemplateEntry.fromArray(new Variable("name"), new StaticText(" "), new Variable("desc")));
47 condition.getEntries().add(new Variable("name"));
48 condition.getEntries().add(new Variable("desc"));
49 ReflectionAssert.assertReflectionEquals(condition, parser.parse());
50 }
51
52 @Test
53 public void testConditionNoWhitespace() throws ParseError {
54 TemplateParser parser = new TemplateParser("?{'{name} {desc}'|'{name}'|'{desc}'}");
55 Condition condition = new Condition();
56 condition.getEntries().add(CompoundTemplateEntry.fromArray(new Variable("name"), new StaticText(" "), new Variable("desc")));
57 condition.getEntries().add(new Variable("name"));
58 condition.getEntries().add(new Variable("desc"));
59 ReflectionAssert.assertReflectionEquals(condition, parser.parse());
60 }
61
62 private static Match compile(String expression) throws org.openstreetmap.josm.actions.search.SearchCompiler.ParseError {
63 return SearchCompiler.compile(expression, false, false);
64 }
65
66 @Test
67 public void testConditionSearchExpression() throws Exception {
68 TemplateParser parser = new TemplateParser("?{ admin_level = 2 'NUTS 1' | admin_level = 4 'NUTS 2' | '{admin_level}'}");
69 Condition condition = new Condition();
70 condition.getEntries().add(new SearchExpressionCondition(compile("admin_level = 2"), new StaticText("NUTS 1")));
71 condition.getEntries().add(new SearchExpressionCondition(compile("admin_level = 4"), new StaticText("NUTS 2")));
72 condition.getEntries().add(new Variable("admin_level"));
73 ReflectionAssert.assertReflectionEquals(condition, parser.parse());
74 }
75
76 TemplateEngineDataProvider dataProvider = new TemplateEngineDataProvider() {
77 @Override
78 public Object getTemplateValue(String name, boolean special) {
79 if (special) {
80 if ("localName".equals(name))
81 return "localName";
82 else
83 return null;
84 } else {
85 if ("name".equals(name))
86 return "waypointName";
87 else if ("number".equals(name))
88 return 10;
89 else if ("special:key".equals(name))
90 return "specialKey";
91 else
92 return null;
93 }
94 }
95
96 @Override
97 public boolean evaluateCondition(Match condition) {
98 return true;
99 }
100
101 @Override
102 public List<String> getTemplateKeys() {
103 return Arrays.asList("name", "number");
104 }
105 };
106
107 @Test
108 public void testFilling() throws Exception {
109 TemplateParser parser = new TemplateParser("{name} u{unknown}u i{number}i");
110 TemplateEntry entry = parser.parse();
111 StringBuilder sb = new StringBuilder();
112 entry.appendText(sb, dataProvider);
113 Assert.assertEquals("waypointName uu i10i", sb.toString());
114 }
115
116 @Test
117 public void testFillingSearchExpression() throws Exception {
118 TemplateParser parser = new TemplateParser("?{ admin_level = 2 'NUTS 1' | admin_level = 4 'NUTS 2' | '{admin_level}'}");
119 TemplateEntry templateEntry = parser.parse();
120
121 StringBuilder sb = new StringBuilder();
122 Relation r = new Relation();
123 r.put("admin_level", "2");
124 templateEntry.appendText(sb, r);
125 Assert.assertEquals("NUTS 1", sb.toString());
126
127 sb.setLength(0);
128 r.put("admin_level", "5");
129 templateEntry.appendText(sb, r);
130 Assert.assertEquals("5", sb.toString());
131 }
132
133 @Test
134 public void testPrintAll() throws Exception {
135 TemplateParser parser = new TemplateParser("{special:everything}");
136 TemplateEntry entry = parser.parse();
137 StringBuilder sb = new StringBuilder();
138 entry.appendText(sb, dataProvider);
139 Assert.assertEquals("name=waypointName, number=10", sb.toString());
140 }
141
142 @Test
143 public void testPrintMultiline() throws Exception {
144 TemplateParser parser = new TemplateParser("{name}\\n{number}");
145 TemplateEntry entry = parser.parse();
146 StringBuilder sb = new StringBuilder();
147 entry.appendText(sb, dataProvider);
148 Assert.assertEquals("waypointName\n10", sb.toString());
149 }
150
151 @Test
152 public void testSpecialVariable() throws Exception {
153 TemplateParser parser = new TemplateParser("{name}u{special:localName}u{special:special:key}");
154 TemplateEntry templateEntry = parser.parse();
155
156 StringBuilder sb = new StringBuilder();
157 templateEntry.appendText(sb, dataProvider);
158 Assert.assertEquals("waypointNameulocalNameuspecialKey", sb.toString());
159 }
160
161 @Test
162 public void testSearchExpression() throws Exception {
163 compile("(parent type=type1 type=parent1) | (parent type=type2 type=parent2)");
164 //"parent(type=type1,type=parent1) | (parent(type=type2,type=parent2)"
165 //TODO
166 }
167
168 @Test
169 public void testSwitchContext() throws Exception {
170 TemplateParser parser = new TemplateParser("!{parent() type=parent2 '{name}'}");
171 DatasetFactory ds = new DatasetFactory();
172 Relation parent1 = ds.addRelation(1);
173 parent1.put("type", "parent1");
174 parent1.put("name", "name_parent1");
175 Relation parent2 = ds.addRelation(2);
176 parent2.put("type", "parent2");
177 parent2.put("name", "name_parent2");
178 Node child = ds.addNode(1);
179 parent1.addMember(new RelationMember("", child));
180 parent2.addMember(new RelationMember("", child));
181
182 StringBuilder sb = new StringBuilder();
183 TemplateEntry entry = parser.parse();
184 entry.appendText(sb, child);
185
186 Assert.assertEquals("name_parent2", sb.toString());
187 }
188
189 @Test
190 public void testSetOr() throws ParseError {
191 TemplateParser parser = new TemplateParser("!{(parent(type=type1) type=parent1) | (parent type=type2 type=parent2) '{name}'}");
192 DatasetFactory ds = new DatasetFactory();
193 Relation parent1 = ds.addRelation(1);
194 parent1.put("type", "parent1");
195 parent1.put("name", "name_parent1");
196 Relation parent2 = ds.addRelation(2);
197 parent2.put("type", "parent2");
198 parent2.put("name", "name_parent2");
199 Node child1 = ds.addNode(1);
200 child1.put("type", "type1");
201 parent1.addMember(new RelationMember("", child1));
202 parent2.addMember(new RelationMember("", child1));
203 Node child2 = ds.addNode(2);
204 child2.put("type", "type2");
205 parent1.addMember(new RelationMember("", child2));
206 parent2.addMember(new RelationMember("", child2));
207
208
209 StringBuilder sb = new StringBuilder();
210 TemplateEntry entry = parser.parse();
211 entry.appendText(sb, child1);
212 entry.appendText(sb, child2);
213
214 Assert.assertEquals("name_parent1name_parent2", sb.toString());
215 }
216
217 @Test
218 public void testMultilevel() throws ParseError {
219 TemplateParser parser = new TemplateParser("!{(parent(parent(type=type1)) type=grandparent) | (parent type=type2 type=parent2) '{name}'}");
220 DatasetFactory ds = new DatasetFactory();
221 Relation parent1 = ds.addRelation(1);
222 parent1.put("type", "parent1");
223 parent1.put("name", "name_parent1");
224 Relation parent2 = ds.addRelation(2);
225 parent2.put("type", "parent2");
226 parent2.put("name", "name_parent2");
227 Node child1 = ds.addNode(1);
228 child1.put("type", "type1");
229 parent1.addMember(new RelationMember("", child1));
230 parent2.addMember(new RelationMember("", child1));
231 Node child2 = ds.addNode(2);
232 child2.put("type", "type2");
233 parent1.addMember(new RelationMember("", child2));
234 parent2.addMember(new RelationMember("", child2));
235 Relation grandParent = ds.addRelation(3);
236 grandParent.put("type", "grandparent");
237 grandParent.put("name", "grandparent_name");
238 grandParent.addMember(new RelationMember("", parent1));
239
240
241 StringBuilder sb = new StringBuilder();
242 TemplateEntry entry = parser.parse();
243 entry.appendText(sb, child1);
244 entry.appendText(sb, child2);
245
246 Assert.assertEquals("grandparent_namename_parent2", sb.toString());
247 }
248
249 @Test(expected = ParseError.class)
250 public void testErrorsNot() throws ParseError {
251 TemplateParser parser = new TemplateParser("!{-parent() '{name}'}");
252 parser.parse();
253 }
254
255 @Test(expected = ParseError.class)
256 public void testErrorOr() throws ParseError {
257 TemplateParser parser = new TemplateParser("!{parent() | type=type1 '{name}'}");
258 parser.parse();
259 }
260
261 @Test
262 public void testChild() throws ParseError {
263 TemplateParser parser = new TemplateParser("!{((child(type=type1) type=child1) | (child type=type2 type=child2)) type=child2 '{name}'}");
264 DatasetFactory ds = new DatasetFactory();
265 Relation parent1 = ds.addRelation(1);
266 parent1.put("type", "type1");
267 Relation parent2 = ds.addRelation(2);
268 parent2.put("type", "type2");
269 Node child1 = ds.addNode(1);
270 child1.put("type", "child1");
271 child1.put("name", "child1");
272 parent1.addMember(new RelationMember("", child1));
273 parent2.addMember(new RelationMember("", child1));
274 Node child2 = ds.addNode(2);
275 child2.put("type", "child2");
276 child2.put("name", "child2");
277 parent1.addMember(new RelationMember("", child2));
278 parent2.addMember(new RelationMember("", child2));
279
280
281 StringBuilder sb = new StringBuilder();
282 TemplateEntry entry = parser.parse();
283 entry.appendText(sb, parent2);
284
285 Assert.assertEquals("child2", sb.toString());
286 }
287
288}
Note: See TracBrowser for help on using the repository browser.