OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 #import('../../../../frog/lang.dart', prefix:'lang'); | |
6 #import("../../../css/css.dart"); | |
7 | |
8 class SelectorLiteralTest { | |
9 | |
10 static testMain() { | |
11 initCssWorld(); | |
12 | |
13 testClass(); | |
14 testId(); | |
15 testElement(); | |
16 testNamespace(); | |
17 testSelectorGroups(); | |
18 testCombinator(); | |
19 testWildcard(); | |
20 testPseudo(); | |
21 testAttribute(); | |
22 testNegation(); | |
23 } | |
24 | |
25 static void testClass() { | |
26 Parser parser0 = new Parser(new lang.SourceFile( | |
jimhug
2011/11/10 17:58:56
Am I missing something, or could you split this in
terry
2011/11/16 14:00:22
I don't expect this to be how it's used but I've h
| |
27 lang.SourceFile.IN_MEMORY_FILE, ".foobar")); | |
28 | |
29 List<SelectorGroup> exprTree0 = parser0.expression(); | |
30 Expect.isNotNull(exprTree0); | |
31 Expect.equals(exprTree0.length, 1); | |
32 for (selectorGroup in exprTree0) { | |
33 Expect.equals(selectorGroup.selectors.length, 1); | |
34 for (selector in selectorGroup.selectors) { | |
35 Expect.isTrue(selector is ClassSelector); | |
36 Expect.isTrue(selector.isCombinatorNone()); | |
37 Expect.equals(selector.name, "foobar"); | |
38 } | |
39 } | |
40 | |
41 Parser parser1 = new Parser(new lang.SourceFile( | |
42 lang.SourceFile.IN_MEMORY_FILE, ".foobar .bar .no-story")); | |
43 | |
44 List<SelectorGroup> exprTree1 = parser1.expression(); | |
45 Expect.isNotNull(exprTree1); | |
46 Expect.equals(exprTree1.length, 1); | |
47 for (selectorGroup in exprTree1) { | |
48 var idx = 0; | |
49 for (selector in selectorGroup.selectors) { | |
50 if (idx == 0) { | |
51 Expect.isTrue(selector is ClassSelector); | |
52 Expect.isTrue(selector.isCombinatorNone()); | |
53 Expect.equals(selector.name, "foobar"); | |
54 } else if (idx == 1) { | |
55 Expect.isTrue(selector is ClassSelector); | |
56 Expect.isTrue(selector.isCombinatorNone()); | |
57 Expect.equals(selector.name, "bar"); | |
58 } else if (idx == 2) { | |
59 Expect.isTrue(selector is ClassSelector); | |
60 Expect.isTrue(selector.isCombinatorNone()); | |
61 Expect.equals(selector.name, "no-story"); | |
62 } else { | |
63 Expect.fail("unexpected expression"); | |
64 } | |
65 | |
66 idx++; | |
67 } | |
68 } | |
69 } | |
70 | |
71 static void testId() { | |
72 Parser parser0 = new Parser(new lang.SourceFile( | |
73 lang.SourceFile.IN_MEMORY_FILE, "#elemId")); | |
74 | |
75 List<SelectorGroup> exprTree = parser0.expression(); | |
76 Expect.isNotNull(exprTree); | |
77 Expect.equals(exprTree.length, 1); | |
78 Expect.isNotNull(exprTree); | |
79 for (selectorGroup in exprTree) { | |
80 Expect.equals(selectorGroup.selectors.length, 1); | |
81 for (selector in selectorGroup.selectors) { | |
82 Expect.isTrue(selector is IdSelector); | |
83 Expect.isTrue(selector.isCombinatorNone()); | |
84 Expect.equals(selector.name, "elemId"); | |
85 } | |
86 } | |
87 } | |
88 | |
89 static void testElement() { | |
90 Parser parser0 = new Parser(new lang.SourceFile( | |
91 lang.SourceFile.IN_MEMORY_FILE, "div")); | |
92 List<SelectorGroup> exprTree0 = parser0.expression(); | |
93 Expect.isNotNull(exprTree0); | |
94 Expect.equals(exprTree0.length, 1); | |
95 for (selectorGroup in exprTree0) { | |
96 Expect.equals(selectorGroup.selectors.length, 1); | |
97 for (selector in selectorGroup.selectors) { | |
98 Expect.isTrue(selector is ElementSelector); | |
99 Expect.isTrue(selector.isCombinatorNone()); | |
100 Expect.equals(selector.name, "div"); | |
101 } | |
102 } | |
103 | |
104 Parser parser1 = new Parser(new lang.SourceFile( | |
105 lang.SourceFile.IN_MEMORY_FILE, "div div span")); | |
106 List<SelectorGroup> exprTree1 = parser1.expression(); | |
107 Expect.isNotNull(exprTree1); | |
108 Expect.equals(exprTree1.length, 1); | |
109 for (selectorGroup in exprTree1) { | |
110 var idx = 0; | |
111 for (selector in selectorGroup.selectors) { | |
112 if (idx == 0) { | |
113 Expect.isTrue(selector is ElementSelector); | |
114 Expect.isTrue(selector.isCombinatorNone()); | |
115 Expect.equals(selector.name, "div"); | |
116 } else if (idx == 1) { | |
117 Expect.isTrue(selector is ElementSelector); | |
118 Expect.isTrue(selector.isCombinatorNone()); | |
119 Expect.equals(selector.name, "div"); | |
120 } else if (idx == 2) { | |
121 Expect.isTrue(selector is ElementSelector); | |
122 Expect.isTrue(selector.isCombinatorNone()); | |
123 Expect.equals(selector.name, "span"); | |
124 } else { | |
125 Expect.fail("unexpected expression"); | |
126 } | |
127 | |
128 idx++; | |
129 } | |
130 } | |
131 } | |
132 | |
133 static void testNamespace() { | |
134 Parser parser0 = new Parser(new lang.SourceFile( | |
135 lang.SourceFile.IN_MEMORY_FILE, "ns1|div")); | |
136 List<SelectorGroup> exprTree0 = parser0.expression(); | |
137 Expect.isNotNull(exprTree0); | |
138 Expect.equals(exprTree0.length, 1); | |
139 for (selectorGroup in exprTree0) { | |
140 Expect.equals(selectorGroup.selectors.length, 1); | |
141 for (selector in selectorGroup.selectors) { | |
142 Expect.isTrue(selector is NamespaceSelector); | |
143 Expect.isTrue(selector.isCombinatorNone()); | |
144 Expect.isFalse(selector.isNamespaceWildcard()); | |
145 Expect.equals(selector.namespace, "ns1"); | |
146 ElementSelector elementSelector = selector.nameAsElementSelector; | |
147 Expect.isTrue(elementSelector is ElementSelector); | |
148 Expect.isFalse(elementSelector.isWildcard()); | |
149 Expect.equals(elementSelector.name, "div"); | |
150 } | |
151 } | |
152 | |
153 Parser parser1 = new Parser(new lang.SourceFile( | |
154 lang.SourceFile.IN_MEMORY_FILE, "ns1|div div ns2|span .foobar")); | |
155 List<SelectorGroup> exprTree1 = parser1.expression(); | |
156 Expect.isNotNull(exprTree1); | |
157 Expect.equals(exprTree1.length, 1); | |
158 for (selectorGroup in exprTree1) { | |
159 var idx = 0; | |
160 for (selector in selectorGroup.selectors) { | |
161 if (idx == 0) { | |
162 Expect.isTrue(selector is NamespaceSelector); | |
163 Expect.isTrue(selector.isCombinatorNone()); | |
164 Expect.equals(selector.namespace, "ns1"); | |
165 ElementSelector elementSelector = selector.nameAsElementSelector; | |
166 Expect.isTrue(elementSelector is ElementSelector); | |
167 Expect.isFalse(elementSelector.isWildcard()); | |
168 Expect.equals(elementSelector.name, "div"); | |
169 } else if (idx == 1) { | |
170 Expect.isTrue(selector is ElementSelector); | |
171 Expect.isTrue(selector.isCombinatorNone()); | |
172 Expect.equals(selector.name, "div"); | |
173 } else if (idx == 2) { | |
174 Expect.isTrue(selector is NamespaceSelector); | |
175 Expect.isTrue(selector.isCombinatorNone()); | |
176 Expect.equals(selector.namespace, "ns2"); | |
177 ElementSelector elementSelector = selector.nameAsElementSelector; | |
178 Expect.isTrue(elementSelector is ElementSelector); | |
179 Expect.isFalse(elementSelector.isWildcard()); | |
180 Expect.equals(elementSelector.name, "span"); | |
181 } else if (idx == 3) { | |
182 Expect.isTrue(selector is ClassSelector); | |
183 Expect.isTrue(selector.isCombinatorNone()); | |
184 Expect.equals(selector.name, "foobar"); | |
185 } else { | |
186 Expect.fail("unexpected expression"); | |
187 } | |
188 | |
189 idx++; | |
190 } | |
191 } | |
192 } | |
193 | |
194 static void testSelectorGroups() { | |
195 Parser parser0 = new Parser(new lang.SourceFile( | |
196 lang.SourceFile.IN_MEMORY_FILE, | |
197 "div, .foobar ,#elemId, .xyzzy .test, ns1|div div #elemId .foobar")); | |
198 List<SelectorGroup> exprTree0 = parser0.expression(); | |
199 Expect.isNotNull(exprTree0); | |
200 Expect.equals(exprTree0.length, 5); | |
201 var groupIdx = 0; | |
202 for (selectorGroup in exprTree0) { | |
203 var idx = 0; | |
204 for (selector in selectorGroup.selectors) { | |
205 switch (groupIdx) { | |
206 case 0: // First selector group. | |
207 Expect.equals(selectorGroup.selectors.length, 1); | |
208 Expect.isTrue(selector is ElementSelector); | |
209 Expect.isTrue(selector.isCombinatorNone()); | |
210 Expect.equals(selector.name, "div"); | |
211 break; | |
212 case 1: // Second selector group. | |
213 Expect.equals(selectorGroup.selectors.length, 1); | |
214 Expect.isTrue(selector is ClassSelector); | |
215 Expect.isTrue(selector.isCombinatorNone()); | |
216 Expect.equals(selector.name, "foobar"); | |
217 break; | |
218 case 2: // Third selector group. | |
219 Expect.equals(selectorGroup.selectors.length, 1); | |
220 Expect.isTrue(selector is IdSelector); | |
221 Expect.isTrue(selector.isCombinatorNone()); | |
222 Expect.equals(selector.name, "elemId"); | |
223 break; | |
224 case 3: // Fourth selector group. | |
225 Expect.equals(selectorGroup.selectors.length, 2); | |
226 if (idx == 0) { | |
227 Expect.isTrue(selector is ClassSelector); | |
228 Expect.isTrue(selector.isCombinatorNone()); | |
229 Expect.equals(selector.name, "xyzzy"); | |
230 } else if (idx == 1) { | |
231 Expect.isTrue(selector is ClassSelector); | |
232 Expect.isTrue(selector.isCombinatorNone()); | |
233 Expect.equals(selector.name, "test"); | |
234 } else { | |
235 Expect.fail("unexpected expression"); | |
236 } | |
237 break; | |
238 case 4: // Fifth selector group. | |
239 Expect.equals(selectorGroup.selectors.length, 4); | |
240 if (idx == 0) { | |
241 Expect.isTrue(selector is NamespaceSelector); | |
242 Expect.isTrue(selector.isCombinatorNone()); | |
243 Expect.equals(selector.namespace, "ns1"); | |
244 ElementSelector elementSelector = selector.nameAsElementSelector; | |
245 Expect.isTrue(elementSelector is ElementSelector); | |
246 Expect.isFalse(elementSelector.isWildcard()); | |
247 Expect.equals(elementSelector.name, "div"); | |
248 } else if (idx == 1) { | |
249 Expect.isTrue(selector is ElementSelector); | |
250 Expect.isTrue(selector.isCombinatorNone()); | |
251 Expect.equals(selector.name, "div"); | |
252 } else if (idx == 2) { | |
253 Expect.isTrue(selector is IdSelector); | |
254 Expect.isTrue(selector.isCombinatorNone()); | |
255 Expect.equals(selector.name, "elemId"); | |
256 } else if (idx == 3) { | |
257 Expect.isTrue(selector is ClassSelector); | |
258 Expect.isTrue(selector.isCombinatorNone()); | |
259 Expect.equals(selector.name, "foobar"); | |
260 } else { | |
261 Expect.fail("unexpected expression"); | |
262 } | |
263 break; | |
264 } | |
265 idx++; | |
266 } | |
267 groupIdx++; | |
268 } | |
269 } | |
270 | |
271 static void testCombinator() { | |
272 Parser parser = new Parser(new lang.SourceFile( | |
273 lang.SourceFile.IN_MEMORY_FILE, | |
274 ".foobar > .bar + .no-story ~ myNs|div #elemId")); | |
275 | |
276 List<SelectorGroup> exprTree = parser.expression(); | |
277 Expect.isNotNull(exprTree); | |
278 Expect.equals(exprTree.length, 1); | |
279 for (selectorGroup in exprTree) { | |
280 var idx = 0; | |
281 Expect.equals(selectorGroup.selectors.length, 5); | |
282 for (selector in selectorGroup.selectors) { | |
283 if (idx == 0) { | |
284 Expect.isTrue(selector is ClassSelector); | |
285 Expect.isTrue(selector.isCombinatorNone()); | |
286 Expect.equals(selector.name, "foobar"); | |
287 } else if (idx == 1) { | |
288 Expect.isTrue(selector is ClassSelector); | |
289 Expect.isTrue(selector.isCombinatorGreater()); | |
290 Expect.equals(selector.name, "bar"); | |
291 } else if (idx == 2) { | |
292 Expect.isTrue(selector is ClassSelector); | |
293 Expect.isTrue(selector.isCombinatorPlus()); | |
294 Expect.equals(selector.name, "no-story"); | |
295 } else if (idx == 3) { | |
296 Expect.isTrue(selector is NamespaceSelector); | |
297 Expect.isTrue(selector.isCombinatorTilde()); | |
298 Expect.equals(selector.namespace, "myNs"); | |
299 ElementSelector elementSelector = selector.nameAsElementSelector; | |
300 Expect.isTrue(elementSelector is ElementSelector); | |
301 Expect.isFalse(elementSelector.isWildcard()); | |
302 Expect.equals(elementSelector.name, "div"); | |
303 } else if (idx == 4) { | |
304 Expect.isTrue(selector is IdSelector); | |
305 Expect.isTrue(selector.isCombinatorNone()); | |
306 Expect.equals(selector.name, "elemId"); | |
307 } else { | |
308 Expect.fail("unexpected expression"); | |
309 } | |
310 | |
311 idx++; | |
312 } | |
313 } | |
314 } | |
315 | |
316 static void testWildcard() { | |
317 Parser parser0 = new Parser(new lang.SourceFile( | |
318 lang.SourceFile.IN_MEMORY_FILE, "*")); | |
319 | |
320 List<SelectorGroup> exprTree0 = parser0.expression(); | |
321 Expect.isNotNull(exprTree0); | |
322 Expect.equals(exprTree0.length, 1); | |
323 for (selectorGroup in exprTree0) { | |
324 Expect.equals(selectorGroup.selectors.length, 1); | |
325 for (selector in selectorGroup.selectors) { | |
326 Expect.isTrue(selector is ElementSelector); | |
327 Expect.isTrue(selector.isCombinatorNone()); | |
328 Expect.isTrue(selector.isWildcard()); | |
329 Expect.equals(selector.name, "*"); | |
330 } | |
331 } | |
332 | |
333 Parser parser1 = new Parser(new lang.SourceFile( | |
334 lang.SourceFile.IN_MEMORY_FILE, "*.foobar")); | |
335 | |
336 List<SelectorGroup> exprTree1 = parser1.expression(); | |
337 Expect.isNotNull(exprTree1); | |
338 Expect.equals(exprTree1.length, 1); | |
339 for (selectorGroup in exprTree1) { | |
340 var idx = 0; | |
341 for (selector in selectorGroup.selectors) { | |
342 Expect.equals(selectorGroup.selectors.length, 2); | |
343 if (idx == 0) { | |
344 Expect.isTrue(selector is ElementSelector); | |
345 Expect.isTrue(selector.isCombinatorNone()); | |
346 Expect.isTrue(selector.isWildcard()); | |
347 Expect.equals(selector.name, "*"); | |
348 } else if (idx == 1) { | |
349 Expect.isTrue(selector is ClassSelector); | |
350 Expect.isTrue(selector.isCombinatorNone()); | |
351 Expect.equals(selector.name, "foobar"); | |
352 } else { | |
353 Expect.fail("unexpected expression"); | |
354 } | |
355 | |
356 idx++; | |
357 } | |
358 } | |
359 | |
360 Parser parser2 = new Parser(new lang.SourceFile( | |
361 lang.SourceFile.IN_MEMORY_FILE, "myNs|*.foobar")); | |
362 | |
363 List<SelectorGroup> exprTree2 = parser2.expression(); | |
364 Expect.isNotNull(exprTree2); | |
365 Expect.equals(exprTree2.length, 1); | |
366 for (selectorGroup in exprTree2) { | |
367 var idx = 0; | |
368 for (selector in selectorGroup.selectors) { | |
369 Expect.equals(selectorGroup.selectors.length, 2); | |
370 if (idx == 0) { | |
371 Expect.isTrue(selector is NamespaceSelector); | |
372 Expect.isTrue(selector.isCombinatorNone()); | |
373 Expect.isFalse(selector.isNamespaceWildcard()); | |
374 Expect.isTrue(selector.isWildcardElement()); | |
375 Expect.equals(selector.namespace, "myNs"); | |
376 ElementSelector elementSelector = selector.nameAsElementSelector; | |
377 Expect.isTrue(elementSelector.isWildcard()); | |
378 Expect.equals(elementSelector.name, "*"); | |
379 } else if (idx == 1) { | |
380 Expect.isTrue(selector is ClassSelector); | |
381 Expect.isTrue(selector.isCombinatorNone()); | |
382 Expect.equals(selector.name, "foobar"); | |
383 } else { | |
384 Expect.fail("unexpected expression"); | |
385 } | |
386 | |
387 idx++; | |
388 } | |
389 } | |
390 | |
391 Parser parser3 = new Parser(new lang.SourceFile( | |
392 lang.SourceFile.IN_MEMORY_FILE, "*|*.foobar")); | |
393 | |
394 List<SelectorGroup> exprTree3 = parser3.expression(); | |
395 Expect.isNotNull(exprTree3); | |
396 Expect.equals(exprTree3.length, 1); | |
397 for (selectorGroup in exprTree3) { | |
398 var idx = 0; | |
399 for (selector in selectorGroup.selectors) { | |
400 Expect.equals(selectorGroup.selectors.length, 2); | |
401 if (idx == 0) { | |
402 Expect.isTrue(selector is NamespaceSelector); | |
403 Expect.isTrue(selector.isCombinatorNone()); | |
404 Expect.isTrue(selector.isNamespaceWildcard()); | |
405 Expect.equals(selector.namespace, "*"); | |
406 Expect.isTrue(selector.isWildcardElement()); | |
407 ElementSelector elementSelector = selector.nameAsElementSelector; | |
408 Expect.isTrue(elementSelector.isWildcard()); | |
409 Expect.equals(elementSelector.name, "*"); | |
410 } else if (idx == 1) { | |
411 Expect.isTrue(selector is ClassSelector); | |
412 Expect.isTrue(selector.isCombinatorNone()); | |
413 Expect.equals(selector.name, "foobar"); | |
414 } else { | |
415 Expect.fail("unexpected expression"); | |
416 } | |
417 | |
418 idx++; | |
419 } | |
420 } | |
421 } | |
422 | |
423 static void testPseudo() { | |
424 // TODO(terry): Implement | |
425 } | |
426 | |
427 static void testAttribute() { | |
428 // TODO(terry): Implement | |
429 } | |
430 | |
431 static void testNegation() { | |
432 // TODO(terry): Implement | |
433 } | |
434 | |
435 } | |
436 | |
437 | |
438 main() { | |
439 SelectorLiteralTest.testMain(); | |
440 } | |
OLD | NEW |