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

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

Powered by Google App Engine
This is Rietveld 408576698