Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: utils/tests/css/src/ExpressionTest.dart

Issue 8498020: Beginning of CSS parser using frog parsering infrastructure. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Incorporated Jim's CR Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698