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

Side by Side Diff: packages/csslib/test/compiler_test.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months 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
« no previous file with comments | « packages/csslib/test/big_1_test.dart ('k') | packages/csslib/test/debug_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012, 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 library compiler_test;
6
7 import 'dart:convert';
8 import 'package:test/test.dart';
9 import 'package:csslib/parser.dart';
10 import 'package:csslib/visitor.dart';
11 import 'testing.dart';
12
13 void testClass() {
14 var errors = [];
15 var input = ".foobar {}";
16 var stylesheet = parseCss(input, errors: errors);
17
18 expect(stylesheet != null, true);
19 expect(errors.isEmpty, true, reason: errors.toString());
20
21 walkTree(stylesheet);
22
23 expect(stylesheet.topLevels.length, 1);
24
25 expect(stylesheet.topLevels[0] is RuleSet, true);
26
27 var ruleset = stylesheet.topLevels[0];
28 expect(ruleset.selectorGroup.selectors.length, 1);
29 expect(ruleset.declarationGroup.declarations.length, 0);
30
31 var selectorSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
32 expect(selectorSeqs.length, 1);
33 final simpSelector = selectorSeqs[0].simpleSelector;
34 expect(simpSelector is ClassSelector, true);
35 expect(selectorSeqs[0].isCombinatorNone, true);
36 expect(simpSelector.name, "foobar");
37 }
38
39 void testClass2() {
40 var errors = [];
41 var input = ".foobar .bar .no-story {}";
42 var stylesheet = parseCss(input, errors: errors);
43
44 expect(stylesheet != null, true);
45 expect(errors.isEmpty, true, reason: errors.toString());
46
47 walkTree(stylesheet);
48
49 expect(stylesheet.topLevels.length, 1);
50
51 expect(stylesheet.topLevels[0] is RuleSet, true);
52 var ruleset = stylesheet.topLevels[0];
53 expect(ruleset.selectorGroup.selectors.length, 1);
54 expect(ruleset.declarationGroup.declarations.length, 0);
55
56 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
57 expect(simpleSeqs.length, 3);
58
59 var simpSelector0 = simpleSeqs[0].simpleSelector;
60 expect(simpSelector0 is ClassSelector, true);
61 expect(simpleSeqs[0].isCombinatorNone, true);
62 expect(simpSelector0.name, "foobar");
63
64 var simpSelector1 = simpleSeqs[1].simpleSelector;
65 expect(simpSelector1 is ClassSelector, true);
66 expect(simpleSeqs[1].isCombinatorDescendant, true);
67 expect(simpSelector1.name, "bar");
68
69 var simpSelector2 = simpleSeqs[2].simpleSelector;
70 expect(simpSelector2 is ClassSelector, true);
71 expect(simpleSeqs[2].isCombinatorDescendant, true);
72 expect(simpSelector2.name, "no-story");
73 }
74
75 void testId() {
76 var errors = [];
77 var input = "#elemId {}";
78 var stylesheet = parseCss(input, errors: errors);
79
80 expect(stylesheet != null, true);
81 expect(errors.isEmpty, true, reason: errors.toString());
82
83 walkTree(stylesheet);
84
85 expect(stylesheet.topLevels.length, 1);
86
87 expect(stylesheet.topLevels[0] is RuleSet, true);
88 var ruleset = stylesheet.topLevels[0];
89 expect(ruleset.selectorGroup.selectors.length, 1);
90 expect(ruleset.declarationGroup.declarations.length, 0);
91
92 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
93
94 expect(simpleSeqs.length, 1);
95 var simpSelector = simpleSeqs[0].simpleSelector;
96 expect(simpSelector is IdSelector, true);
97 expect(simpleSeqs[0].isCombinatorNone, true);
98 expect(simpSelector.name, "elemId");
99 }
100
101 void testElement() {
102 var errors = [];
103 var input = "div {}";
104 var stylesheet = parseCss(input, errors: errors);
105
106 expect(stylesheet != null, true);
107 expect(errors.isEmpty, true, reason: errors.toString());
108
109 walkTree(stylesheet);
110
111 expect(stylesheet.topLevels.length, 1);
112
113 expect(stylesheet.topLevels[0] is RuleSet, true);
114 var ruleset = stylesheet.topLevels[0];
115 expect(ruleset.selectorGroup.selectors.length, 1);
116 expect(ruleset.declarationGroup.declarations.length, 0);
117
118 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
119
120 expect(simpleSeqs.length, 1);
121
122 final simpSelector = simpleSeqs[0].simpleSelector;
123 expect(simpSelector is ElementSelector, true);
124 expect(simpleSeqs[0].isCombinatorNone, true);
125 expect(simpSelector.name, "div");
126
127 input = "div div span {}";
128 stylesheet = parseCss(input, errors: errors..clear());
129
130 expect(stylesheet != null, true);
131 expect(errors.isEmpty, true, reason: errors.toString());
132
133 walkTree(stylesheet);
134
135 expect(stylesheet.topLevels.length, 1);
136
137 expect(stylesheet.topLevels[0] is RuleSet, true);
138 ruleset = stylesheet.topLevels[0];
139 expect(ruleset.selectorGroup.selectors.length, 1);
140 expect(ruleset.declarationGroup.declarations.length, 0);
141
142 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
143
144 expect(simpleSeqs.length, 3);
145
146 var simpSelector0 = simpleSeqs[0].simpleSelector;
147 expect(simpSelector0 is ElementSelector, true);
148 expect(simpleSeqs[0].isCombinatorNone, true);
149 expect(simpSelector0.name, "div");
150
151 var simpSelector1 = simpleSeqs[1].simpleSelector;
152 expect(simpSelector1 is ElementSelector, true);
153 expect(simpleSeqs[1].isCombinatorDescendant, true);
154 expect(simpSelector1.name, "div");
155
156 var simpSelector2 = simpleSeqs[2].simpleSelector;
157 expect(simpSelector2 is ElementSelector, true);
158 expect(simpleSeqs[2].isCombinatorDescendant, true);
159 expect(simpSelector2.name, "span");
160 }
161
162 void testNamespace() {
163 var errors = [];
164 var input = "ns1|div {}";
165 var stylesheet = parseCss(input, errors: errors);
166
167 expect(stylesheet != null, true);
168 expect(errors.isEmpty, true, reason: errors.toString());
169
170 walkTree(stylesheet);
171
172 expect(stylesheet.topLevels.length, 1);
173
174 expect(stylesheet.topLevels[0] is RuleSet, true);
175 var ruleset = stylesheet.topLevels[0];
176 expect(ruleset.selectorGroup.selectors.length, 1);
177 expect(ruleset.declarationGroup.declarations.length, 0);
178
179 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
180
181 expect(simpleSeqs.length, 1);
182 var simpSelector = simpleSeqs[0].simpleSelector;
183 expect(simpSelector is NamespaceSelector, true);
184 expect(simpleSeqs[0].isCombinatorNone, true);
185 expect(simpSelector.isNamespaceWildcard, false);
186 expect(simpSelector.namespace, "ns1");
187 var elementSelector = simpSelector.nameAsSimpleSelector;
188 expect(elementSelector is ElementSelector, true);
189 expect(elementSelector.isWildcard, false);
190 expect(elementSelector.name, "div");
191 }
192
193 void testNamespace2() {
194 var errors = [];
195 var input = "ns1|div div ns2|span .foobar {}";
196 var stylesheet = parseCss(input, errors: errors);
197
198 expect(stylesheet != null, true);
199 expect(errors.isEmpty, true, reason: errors.toString());
200
201 walkTree(stylesheet);
202
203 expect(stylesheet.topLevels.length, 1);
204
205 expect(stylesheet.topLevels[0] is RuleSet, true);
206 var ruleset = stylesheet.topLevels[0];
207 expect(ruleset.selectorGroup.selectors.length, 1);
208 expect(ruleset.declarationGroup.declarations.length, 0);
209
210 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
211
212 expect(simpleSeqs.length, 4);
213
214 var simpSelector0 = simpleSeqs[0].simpleSelector;
215 expect(simpSelector0 is NamespaceSelector, true);
216 expect(simpleSeqs[0].isCombinatorNone, true);
217 expect(simpSelector0.namespace, "ns1");
218 var elementSelector0 = simpSelector0.nameAsSimpleSelector;
219 expect(elementSelector0 is ElementSelector, true);
220 expect(elementSelector0.isWildcard, false);
221 expect(elementSelector0.name, "div");
222
223 var simpSelector1 = simpleSeqs[1].simpleSelector;
224 expect(simpSelector1 is ElementSelector, true);
225 expect(simpleSeqs[1].isCombinatorDescendant, true);
226 expect(simpSelector1.name, "div");
227
228 var simpSelector2 = simpleSeqs[2].simpleSelector;
229 expect(simpSelector2 is NamespaceSelector, true);
230 expect(simpleSeqs[2].isCombinatorDescendant, true);
231 expect(simpSelector2.namespace, "ns2");
232 var elementSelector2 = simpSelector2.nameAsSimpleSelector;
233 expect(elementSelector2 is ElementSelector, true);
234 expect(elementSelector2.isWildcard, false);
235 expect(elementSelector2.name, "span");
236
237 var simpSelector3 = simpleSeqs[3].simpleSelector;
238 expect(simpSelector3 is ClassSelector, true);
239 expect(simpleSeqs[3].isCombinatorDescendant, true);
240 expect(simpSelector3.name, "foobar");
241 }
242
243 void testSelectorGroups() {
244 var errors = [];
245 var input =
246 "div, .foobar ,#elemId, .xyzzy .test, ns1|div div #elemId .foobar {}";
247 var stylesheet = parseCss(input, errors: errors);
248
249 expect(stylesheet != null, true);
250 expect(errors.isEmpty, true, reason: errors.toString());
251
252 walkTree(stylesheet);
253
254 expect(stylesheet.topLevels.length, 1);
255
256 expect(stylesheet.topLevels[0] is RuleSet, true);
257 var ruleset = stylesheet.topLevels[0];
258 expect(ruleset.selectorGroup.selectors.length, 5);
259 expect(ruleset.declarationGroup.declarations.length, 0);
260
261 var groupSelector0 = ruleset.selectorGroup.selectors[0];
262 expect(groupSelector0.simpleSelectorSequences.length, 1);
263 var selector0 = groupSelector0.simpleSelectorSequences[0];
264 var simpleSelector0 = selector0.simpleSelector;
265 expect(simpleSelector0 is ElementSelector, true);
266 expect(selector0.isCombinatorNone, true);
267 expect(simpleSelector0.name, "div");
268
269 var groupSelector1 = ruleset.selectorGroup.selectors[1];
270 expect(groupSelector1.simpleSelectorSequences.length, 1);
271 var selector1 = groupSelector1.simpleSelectorSequences[0];
272 var simpleSelector1 = selector1.simpleSelector;
273 expect(simpleSelector1 is ClassSelector, true);
274 expect(selector1.isCombinatorNone, true);
275 expect(simpleSelector1.name, "foobar");
276
277 var groupSelector2 = ruleset.selectorGroup.selectors[2];
278 expect(groupSelector2.simpleSelectorSequences.length, 1);
279 var selector2 = groupSelector2.simpleSelectorSequences[0];
280 var simpleSelector2 = selector2.simpleSelector;
281 expect(simpleSelector2 is IdSelector, true);
282 expect(selector2.isCombinatorNone, true);
283 expect(simpleSelector2.name, "elemId");
284
285 var groupSelector3 = ruleset.selectorGroup.selectors[3];
286 expect(groupSelector3.simpleSelectorSequences.length, 2);
287
288 var selector30 = groupSelector3.simpleSelectorSequences[0];
289 var simpleSelector30 = selector30.simpleSelector;
290 expect(simpleSelector30 is ClassSelector, true);
291 expect(selector30.isCombinatorNone, true);
292 expect(simpleSelector30.name, "xyzzy");
293
294 var selector31 = groupSelector3.simpleSelectorSequences[1];
295 var simpleSelector31 = selector31.simpleSelector;
296 expect(simpleSelector31 is ClassSelector, true);
297 expect(selector31.isCombinatorDescendant, true);
298 expect(simpleSelector31.name, "test");
299
300 var groupSelector4 = ruleset.selectorGroup.selectors[4];
301 expect(groupSelector4.simpleSelectorSequences.length, 4);
302
303 var selector40 = groupSelector4.simpleSelectorSequences[0];
304 var simpleSelector40 = selector40.simpleSelector;
305 expect(simpleSelector40 is NamespaceSelector, true);
306 expect(selector40.isCombinatorNone, true);
307 expect(simpleSelector40.namespace, "ns1");
308 var elementSelector = simpleSelector40.nameAsSimpleSelector;
309 expect(elementSelector is ElementSelector, true);
310 expect(elementSelector.isWildcard, false);
311 expect(elementSelector.name, "div");
312
313 var selector41 = groupSelector4.simpleSelectorSequences[1];
314 var simpleSelector41 = selector41.simpleSelector;
315 expect(simpleSelector41 is ElementSelector, true);
316 expect(selector41.isCombinatorDescendant, true);
317 expect(simpleSelector41.name, "div");
318
319 var selector42 = groupSelector4.simpleSelectorSequences[2];
320 var simpleSelector42 = selector42.simpleSelector;
321 expect(simpleSelector42 is IdSelector, true);
322 expect(selector42.isCombinatorDescendant, true);
323 expect(simpleSelector42.name, "elemId");
324
325 var selector43 = groupSelector4.simpleSelectorSequences[3];
326 var simpleSelector43 = selector43.simpleSelector;
327 expect(selector43.isCombinatorDescendant, true);
328 expect(simpleSelector43.name, "foobar");
329 }
330
331 void testCombinator() {
332 var errors = [];
333 var input = ".foobar > .bar + .no-story ~ myNs|div #elemId {}";
334 var stylesheet = parseCss(input, errors: errors);
335
336 expect(stylesheet != null, true);
337 expect(errors.isEmpty, true, reason: errors.toString());
338
339 walkTree(stylesheet);
340
341 expect(stylesheet.topLevels.length, 1);
342
343 expect(stylesheet.topLevels[0] is RuleSet, true);
344 var ruleset = stylesheet.topLevels[0];
345 expect(ruleset.selectorGroup.selectors.length, 1);
346 expect(ruleset.declarationGroup.declarations.length, 0);
347
348 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
349
350 expect(simpleSeqs.length, 5);
351
352 var selector0 = simpleSeqs[0];
353 var simpleSelector0 = selector0.simpleSelector;
354 expect(simpleSelector0 is ClassSelector, true);
355 expect(selector0.isCombinatorNone, true);
356 expect(simpleSelector0.name, "foobar");
357
358 var selector1 = simpleSeqs[1];
359 var simpleSelector1 = selector1.simpleSelector;
360 expect(simpleSelector1 is ClassSelector, true);
361 expect(selector1.isCombinatorGreater, true);
362 expect(simpleSelector1.name, "bar");
363
364 var selector2 = simpleSeqs[2];
365 var simpleSelector2 = selector2.simpleSelector;
366 expect(simpleSelector2 is ClassSelector, true);
367 expect(selector2.isCombinatorPlus, true);
368 expect(simpleSelector2.name, "no-story");
369
370 var selector3 = simpleSeqs[3];
371 var simpleSelector3 = selector3.simpleSelector;
372 expect(simpleSelector3 is NamespaceSelector, true);
373 expect(selector3.isCombinatorTilde, true);
374 expect(simpleSelector3.namespace, "myNs");
375 var elementSelector = simpleSelector3.nameAsSimpleSelector;
376 expect(elementSelector is ElementSelector, true);
377 expect(elementSelector.isWildcard, false);
378 expect(elementSelector.name, "div");
379
380 var selector4 = simpleSeqs[4];
381 var simpleSelector4 = selector4.simpleSelector;
382 expect(simpleSelector4 is IdSelector, true);
383 expect(selector4.isCombinatorDescendant, true);
384 expect(simpleSelector4.name, "elemId");
385 }
386
387 void testWildcard() {
388 var errors = [];
389 var input = "* {}";
390 var stylesheet = parseCss(input, errors: errors);
391
392 expect(stylesheet != null, true);
393 expect(errors.isEmpty, true, reason: errors.toString());
394
395 walkTree(stylesheet);
396
397 expect(stylesheet.topLevels.length, 1);
398
399 expect(stylesheet.topLevels[0] is RuleSet, true);
400 var ruleset = stylesheet.topLevels[0];
401 expect(ruleset.selectorGroup.selectors.length, 1);
402 expect(ruleset.declarationGroup.declarations.length, 0);
403
404 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
405
406 expect(simpleSeqs.length, 1);
407 var simpSelector = simpleSeqs[0].simpleSelector;
408 expect(simpSelector is ElementSelector, true);
409 expect(simpleSeqs[0].isCombinatorNone, true);
410 expect(simpSelector.isWildcard, true);
411 expect(simpSelector.name, "*");
412
413 input = "*.foobar {}";
414 stylesheet = parseCss(input, errors: errors..clear());
415
416 expect(stylesheet != null, true);
417 expect(errors.isEmpty, true, reason: errors.toString());
418
419 walkTree(stylesheet);
420
421 expect(stylesheet.topLevels.length, 1);
422
423 expect(stylesheet.topLevels[0] is RuleSet, true);
424 ruleset = stylesheet.topLevels[0];
425 expect(ruleset.selectorGroup.selectors.length, 1);
426 expect(ruleset.declarationGroup.declarations.length, 0);
427
428 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
429
430 expect(simpleSeqs.length, 2);
431
432 var selector0 = simpleSeqs[0];
433 var simpleSelector0 = selector0.simpleSelector;
434 expect(simpleSelector0 is ElementSelector, true);
435 expect(selector0.isCombinatorNone, true);
436 expect(simpleSelector0.isWildcard, true);
437 expect(simpleSelector0.name, "*");
438
439 var selector1 = simpleSeqs[1];
440 var simpleSelector1 = selector1.simpleSelector;
441 expect(simpleSelector1 is ClassSelector, true);
442 expect(selector1.isCombinatorNone, true);
443 expect(simpleSelector1.name, "foobar");
444
445 input = "myNs|*.foobar {}";
446 stylesheet = parseCss(input, errors: errors..clear());
447
448 expect(stylesheet != null, true);
449 expect(errors.isEmpty, true, reason: errors.toString());
450
451 walkTree(stylesheet);
452
453 expect(stylesheet.topLevels.length, 1);
454
455 expect(stylesheet.topLevels[0] is RuleSet, true);
456 ruleset = stylesheet.topLevels[0];
457 expect(ruleset.selectorGroup.selectors.length, 1);
458 expect(ruleset.declarationGroup.declarations.length, 0);
459
460 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
461
462 expect(simpleSeqs.length, 2);
463
464 selector0 = simpleSeqs[0];
465 simpleSelector0 = selector0.simpleSelector;
466 expect(simpleSelector0 is NamespaceSelector, true);
467 expect(selector0.isCombinatorNone, true);
468 expect(simpleSelector0.isNamespaceWildcard, false);
469 var elementSelector = simpleSelector0.nameAsSimpleSelector;
470 expect("myNs", simpleSelector0.namespace);
471 expect(elementSelector.isWildcard, true);
472 expect("*", elementSelector.name);
473
474 selector1 = simpleSeqs[1];
475 simpleSelector1 = selector1.simpleSelector;
476 expect(simpleSelector1 is ClassSelector, true);
477 expect(selector1.isCombinatorNone, true);
478 expect("foobar", simpleSelector1.name);
479
480 input = "*|*.foobar {}";
481 stylesheet = parseCss(input, errors: errors..clear());
482
483 expect(stylesheet != null, true);
484 expect(errors.isEmpty, true, reason: errors.toString());
485
486 walkTree(stylesheet);
487
488 expect(stylesheet.topLevels[0] is RuleSet, true);
489 ruleset = stylesheet.topLevels[0];
490 expect(ruleset.selectorGroup.selectors.length, 1);
491 expect(ruleset.declarationGroup.declarations.length, 0);
492
493 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
494
495 expect(simpleSeqs.length, 2);
496
497 selector0 = simpleSeqs[0];
498 simpleSelector0 = selector0.simpleSelector;
499 expect(simpleSelector0 is NamespaceSelector, true);
500 expect(selector0.isCombinatorNone, true);
501 expect(simpleSelector0.isNamespaceWildcard, true);
502 expect("*", simpleSelector0.namespace);
503 elementSelector = simpleSelector0.nameAsSimpleSelector;
504 expect(elementSelector.isWildcard, true);
505 expect("*", elementSelector.name);
506
507 selector1 = simpleSeqs[1];
508 simpleSelector1 = selector1.simpleSelector;
509 expect(simpleSelector1 is ClassSelector, true);
510 expect(selector1.isCombinatorNone, true);
511 expect("foobar", simpleSelector1.name);
512 }
513
514 /** Test List<int> as input to parser. */
515 void testArrayOfChars() {
516 var errors = [];
517 var input = '<![CDATA[.foo { '
518 'color: red; left: 20px; top: 20px; width: 100px; height:200px'
519 '}'
520 '#div {'
521 'color : #00F578; border-color: #878787;'
522 '}]]>';
523
524 var stylesheet = parse(UTF8.encode(input), errors: errors);
525
526 expect(stylesheet != null, true);
527 expect(errors.isEmpty, true, reason: errors.toString());
528
529 expect(prettyPrint(stylesheet), r'''
530 .foo {
531 color: #f00;
532 left: 20px;
533 top: 20px;
534 width: 100px;
535 height: 200px;
536 }
537 #div {
538 color: #00F578;
539 border-color: #878787;
540 }''');
541 }
542
543 void testPseudo() {
544 var errors = [];
545
546 final input = r'''
547 html:lang(fr-ca) { quotes: '" ' ' "' }
548 zoom: { }
549
550 a:link { color: red }
551 :link { color: blue }
552
553 a:focus { background: yellow }
554 a:focus:hover { background: white }
555
556 p.special:first-letter {color: #ffd800}
557
558 p:not(#example){
559 background-color: yellow;
560 }
561
562 input:not([DISABLED]){
563 background-color: yellow;
564 }
565
566 html|*:not(:link):not(:visited) {
567 border: 1px solid black;
568 }
569
570 *:not(FOO) {
571 height: 20px;
572 }
573
574 *|*:not(*) {
575 color: orange;
576 }
577
578 *|*:not(:hover) {
579 color: magenta;
580 }
581
582 p:nth-child(3n-3) { }
583
584 div:nth-child(2n) { color : red; }
585 ''';
586
587 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
588
589 expect(stylesheet != null, true);
590 expect(errors.isEmpty, true, reason: errors.toString());
591 expect(prettyPrint(stylesheet), r'''
592 html:lang(fr-ca) {
593 quotes: '" ' ' "';
594 }
595 zoom {
596 }
597 a:link {
598 color: #f00;
599 }
600 :link {
601 color: #00f;
602 }
603 a:focus {
604 background: #ff0;
605 }
606 a:focus:hover {
607 background: #fff;
608 }
609 p.special:first-letter {
610 color: #ffd800;
611 }
612 p:not(#example) {
613 background-color: #ff0;
614 }
615 input:not([DISABLED]) {
616 background-color: #ff0;
617 }
618 html|*:not(:link):not(:visited) {
619 border: 1px solid #000;
620 }
621 *:not(FOO) {
622 height: 20px;
623 }
624 *|*:not(*) {
625 color: #ffa500;
626 }
627 *|*:not(:hover) {
628 color: #f0f;
629 }
630 p:nth-child(3n-3) {
631 }
632 div:nth-child(2n) {
633 color: #f00;
634 }''');
635 }
636
637 void testAttribute() {
638 // TODO(terry): Implement
639 }
640
641 void testNegation() {
642 // TODO(terry): Implement
643 }
644
645 void testHost() {
646 var errors = [];
647 var input = '@host { '
648 ':scope {'
649 'white-space: nowrap;'
650 'overflow-style: marquee-line;'
651 'overflow-x: marquee;'
652 '}'
653 '* { color: red; }'
654 '*:hover { font-weight: bold; }'
655 ':nth-child(odd) { color: blue; }'
656 '}';
657 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
658
659 expect(stylesheet != null, true);
660 expect(errors.isEmpty, true, reason: errors.toString());
661 expect(prettyPrint(stylesheet), r'''
662 @host {
663 :scope {
664 white-space: nowrap;
665 overflow-style: marquee-line;
666 overflow-x: marquee;
667 }
668 * {
669 color: #f00;
670 }
671 *:hover {
672 font-weight: bold;
673 }
674 :nth-child(odd) {
675 color: #00f;
676 }
677 }''');
678 }
679
680 void testStringEscape() {
681 var errors = [];
682 var input = r'''a { foo: '{"text" : "a\\\""}' }''';
683 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
684 expect(stylesheet != null, true);
685 expect(errors.isEmpty, true, reason: errors.toString());
686
687 expect(prettyPrint(stylesheet), r'''
688 a {
689 foo: '{"text" : "a\\\""}';
690 }''');
691 }
692
693 // TODO(terry): Move to emitter_test.dart when real emitter exist.
694 void testEmitter() {
695 var errors = [];
696 var input = '.foo { '
697 'color: red; left: 20px; top: 20px; width: 100px; height:200px'
698 '}'
699 '#div {'
700 'color : #00F578; border-color: #878787;'
701 '}';
702 var stylesheet = parseCss(input, errors: errors);
703
704 expect(stylesheet != null, true);
705 expect(errors.isEmpty, true, reason: errors.toString());
706
707 walkTree(stylesheet);
708
709 expect(prettyPrint(stylesheet), r'''
710 .foo {
711 color: #f00;
712 left: 20px;
713 top: 20px;
714 width: 100px;
715 height: 200px;
716 }
717 #div {
718 color: #00F578;
719 border-color: #878787;
720 }''');
721 }
722
723 main() {
724 test('Classes', testClass);
725 test('Classes 2', testClass2);
726 test('Ids', testId);
727 test('Elements', testElement);
728 test('Namespace', testNamespace);
729 test('Namespace 2', testNamespace2);
730 test('Selector Groups', testSelectorGroups);
731 test('Combinator', testCombinator);
732 test('Wildcards', testWildcard);
733 test('Pseudo', testPseudo);
734 test('Attributes', testAttribute);
735 test('Negation', testNegation);
736 test('@host', testHost);
737 test('stringEscape', testStringEscape);
738 test('Parse List<int> as input', testArrayOfChars);
739 test('Simple Emitter', testEmitter);
740 }
OLDNEW
« no previous file with comments | « packages/csslib/test/big_1_test.dart ('k') | packages/csslib/test/debug_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698