OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library declaration_test; | 5 library declaration_test; |
6 | 6 |
7 import 'package:unittest/unittest.dart'; | 7 import 'package:unittest/unittest.dart'; |
8 import 'testing.dart'; | 8 import 'testing.dart'; |
9 | 9 |
10 /** CSS compiler options no checks in in memory style sheet. */ | |
11 List options = ['--no-colors', 'memory']; | |
12 | |
13 void testSimpleTerms() { | 10 void testSimpleTerms() { |
14 var errors = []; | 11 var errors = []; |
15 final String input = r''' | 12 final String input = r''' |
16 @ import url("test.css"); | 13 @ import url("test.css"); |
17 .foo { | 14 .foo { |
18 background-color: #191919; | 15 background-color: #191919; |
19 width: 10PX; | 16 width: 10PX; |
20 height: 22mM !important; | 17 height: 22mM !important; |
21 border-width: 20cm; | 18 border-width: 20cm; |
22 margin-width: 33%; | 19 margin-width: 33%; |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 } | 226 } |
230 #id-3 { | 227 #id-3 { |
231 -web-kit-resolution: 3dpcm; | 228 -web-kit-resolution: 3dpcm; |
232 transform: rotatey(20grad); | 229 transform: rotatey(20grad); |
233 } | 230 } |
234 #id-4 { | 231 #id-4 { |
235 -web-kit-resolution: 4dppx; | 232 -web-kit-resolution: 4dppx; |
236 transform: rotatez(20turn); | 233 transform: rotatez(20turn); |
237 }'''; | 234 }'''; |
238 | 235 |
239 var stylesheet = parseCss(input, errors: errors, opts: options); | 236 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); |
240 | 237 |
241 expect(stylesheet != null, true); | 238 expect(stylesheet != null, true); |
242 expect(errors.isEmpty, true, reason: errors.toString()); | 239 expect(errors.isEmpty, true, reason: errors.toString()); |
243 expect(prettyPrint(stylesheet), generated); | 240 expect(prettyPrint(stylesheet), generated); |
244 } | 241 } |
245 | 242 |
246 void testUnicode() { | 243 void testUnicode() { |
247 var errors = []; | 244 var errors = []; |
248 final String input = r''' | 245 final String input = r''' |
249 .toggle:after { | 246 .toggle:after { |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 String generated = ''' | 329 String generated = ''' |
333 @media screen AND (-webkit-min-device-pixel-ratio:0) { | 330 @media screen AND (-webkit-min-device-pixel-ratio:0) { |
334 .todo-item .toggle { | 331 .todo-item .toggle { |
335 background: none; | 332 background: none; |
336 } | 333 } |
337 #todo-item .toggle { | 334 #todo-item .toggle { |
338 height: 40px; | 335 height: 40px; |
339 } | 336 } |
340 }'''; | 337 }'''; |
341 | 338 |
342 var stylesheet = parseCss(input, errors: errors, opts: options); | 339 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); |
343 expect(stylesheet != null, true); | 340 expect(stylesheet != null, true); |
344 expect(errors.isEmpty, true, reason: errors.toString()); | 341 expect(errors.isEmpty, true, reason: errors.toString()); |
345 expect(prettyPrint(stylesheet), generated); | 342 expect(prettyPrint(stylesheet), generated); |
346 | 343 |
347 input = ''' | 344 input = ''' |
348 @media handheld and (min-width: 20em), | 345 @media handheld and (min-width: 20em), |
349 screen and (min-width: 20em) { | 346 screen and (min-width: 20em) { |
350 #id { color: red; } | 347 #id { color: red; } |
351 .myclass { height: 20px; } | 348 .myclass { height: 20px; } |
352 } | 349 } |
(...skipping 24 matching lines...) Expand all Loading... |
377 } | 374 } |
378 } @media print AND (min-resolution:280dpcm) { | 375 } @media print AND (min-resolution:280dpcm) { |
379 #finalId { | 376 #finalId { |
380 color: #aaa; | 377 color: #aaa; |
381 } | 378 } |
382 .class2 { | 379 .class2 { |
383 border: 20px; | 380 border: 20px; |
384 } | 381 } |
385 }'''; | 382 }'''; |
386 | 383 |
387 stylesheet = parseCss(input, errors: errors..clear(), opts: options); | 384 stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); |
388 | 385 |
389 expect(stylesheet != null, true); | 386 expect(stylesheet != null, true); |
390 expect(errors.isEmpty, true, reason: errors.toString()); | 387 expect(errors.isEmpty, true, reason: errors.toString()); |
391 expect(prettyPrint(stylesheet), generated); | 388 expect(prettyPrint(stylesheet), generated); |
392 | 389 |
393 input = ''' | 390 input = ''' |
394 @media only screen and (min-device-width: 4000px) and | 391 @media only screen and (min-device-width: 4000px) and |
395 (min-device-height: 2000px), screen (another: 100px) { | 392 (min-device-height: 2000px), screen (another: 100px) { |
396 html { | 393 html { |
397 font-size: 10em; | 394 font-size: 10em; |
398 } | 395 } |
399 }'''; | 396 }'''; |
400 generated = '@media ONLY screen AND (min-device-width:4000px) ' | 397 generated = '@media ONLY screen AND (min-device-width:4000px) ' |
401 'AND (min-device-height:2000px), screen (another:100px) {\n' | 398 'AND (min-device-height:2000px), screen (another:100px) {\n' |
402 'html {\n font-size: 10em;\n}\n}'; | 399 'html {\n font-size: 10em;\n}\n}'; |
403 | 400 |
404 stylesheet = parseCss(input, errors: errors..clear(), opts: options); | 401 stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); |
405 | 402 |
406 expect(stylesheet != null, true); | 403 expect(stylesheet != null, true); |
407 expect(errors.isEmpty, true, reason: errors.toString()); | 404 expect(errors.isEmpty, true, reason: errors.toString()); |
408 expect(prettyPrint(stylesheet), generated); | 405 expect(prettyPrint(stylesheet), generated); |
409 | 406 |
410 input = ''' | 407 input = ''' |
411 @media screen,print (min-device-width: 4000px) and | 408 @media screen,print (min-device-width: 4000px) and |
412 (min-device-height: 2000px), screen (another: 100px) { | 409 (min-device-height: 2000px), screen (another: 100px) { |
413 html { | 410 html { |
414 font-size: 10em; | 411 font-size: 10em; |
415 } | 412 } |
416 }'''; | 413 }'''; |
417 generated = '@media screen, print (min-device-width:4000px) AND ' | 414 generated = '@media screen, print (min-device-width:4000px) AND ' |
418 '(min-device-height:2000px), screen (another:100px) {\n' | 415 '(min-device-height:2000px), screen (another:100px) {\n' |
419 'html {\n font-size: 10em;\n}\n}'; | 416 'html {\n font-size: 10em;\n}\n}'; |
420 | 417 |
421 stylesheet = parseCss(input, errors: errors..clear(), opts: options); | 418 stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); |
422 | 419 |
423 expect(stylesheet != null, true); | 420 expect(stylesheet != null, true); |
424 expect(errors.isEmpty, true, reason: errors.toString()); | 421 expect(errors.isEmpty, true, reason: errors.toString()); |
425 expect(prettyPrint(stylesheet), generated); | 422 expect(prettyPrint(stylesheet), generated); |
426 | 423 |
427 input = ''' | 424 input = ''' |
428 @import "test.css" ONLY screen, NOT print (min-device-width: 4000px);'''; | 425 @import "test.css" ONLY screen, NOT print (min-device-width: 4000px);'''; |
429 generated = | 426 generated = |
430 '@import "test.css" ONLY screen, NOT print (min-device-width:4000px);'; | 427 '@import "test.css" ONLY screen, NOT print (min-device-width:4000px);'; |
431 | 428 |
432 stylesheet = parseCss(input, errors: errors..clear(), opts: options); | 429 stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); |
433 | 430 |
434 expect(stylesheet != null, true); | 431 expect(stylesheet != null, true); |
435 expect(errors.isEmpty, true, reason: errors.toString()); | 432 expect(errors.isEmpty, true, reason: errors.toString()); |
436 expect(prettyPrint(stylesheet), generated); | 433 expect(prettyPrint(stylesheet), generated); |
437 } | 434 } |
438 | 435 |
439 void testFontFace() { | 436 void testFontFace() { |
440 var errors = []; | 437 var errors = []; |
441 | 438 |
442 final String input = ''' | 439 final String input = ''' |
443 @font-face { | 440 @font-face { |
444 font-family: BBCBengali; | 441 font-family: BBCBengali; |
445 src: url(fonts/BBCBengali.ttf) format("opentype"); | 442 src: url(fonts/BBCBengali.ttf) format("opentype"); |
446 unicode-range: U+0A-FF, U+980-9FF, U+????, U+3???; | 443 unicode-range: U+0A-FF, U+980-9FF, U+????, U+3???; |
447 }'''; | 444 }'''; |
448 final String generated = '''@font-face { | 445 final String generated = '''@font-face { |
449 font-family: BBCBengali; | 446 font-family: BBCBengali; |
450 src: url("fonts/BBCBengali.ttf") format("opentype"); | 447 src: url("fonts/BBCBengali.ttf") format("opentype"); |
451 unicode-range: U+0A-FF, U+980-9FF, U+????, U+3???; | 448 unicode-range: U+0A-FF, U+980-9FF, U+????, U+3???; |
452 }'''; | 449 }'''; |
453 var stylesheet = parseCss(input, errors: errors, opts: options); | 450 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); |
454 | 451 |
455 expect(stylesheet != null, true); | 452 expect(stylesheet != null, true); |
456 expect(errors.isEmpty, true, reason: errors.toString()); | 453 expect(errors.isEmpty, true, reason: errors.toString()); |
457 expect(prettyPrint(stylesheet), generated); | 454 expect(prettyPrint(stylesheet), generated); |
458 | 455 |
459 final String input1 = ''' | 456 final String input1 = ''' |
460 @font-face { | 457 @font-face { |
461 font-family: Gentium; | 458 font-family: Gentium; |
462 src: url(http://example.com/fonts/Gentium.ttf); | 459 src: url(http://example.com/fonts/Gentium.ttf); |
463 src: url(http://example.com/fonts/Gentium.ttf); | 460 src: url(http://example.com/fonts/Gentium.ttf); |
464 }'''; | 461 }'''; |
465 final String generated1 = '''@font-face { | 462 final String generated1 = '''@font-face { |
466 font-family: Gentium; | 463 font-family: Gentium; |
467 src: url("http://example.com/fonts/Gentium.ttf"); | 464 src: url("http://example.com/fonts/Gentium.ttf"); |
468 src: url("http://example.com/fonts/Gentium.ttf"); | 465 src: url("http://example.com/fonts/Gentium.ttf"); |
469 }'''; | 466 }'''; |
470 | 467 |
471 stylesheet = parseCss(input1, errors: errors..clear(), opts: options); | 468 stylesheet = parseCss(input1, errors: errors..clear(), opts: simpleOptions); |
472 | 469 |
473 expect(stylesheet != null, true); | 470 expect(stylesheet != null, true); |
474 expect(errors.isEmpty, true, reason: errors.toString()); | 471 expect(errors.isEmpty, true, reason: errors.toString()); |
475 expect(prettyPrint(stylesheet), generated1); | 472 expect(prettyPrint(stylesheet), generated1); |
476 | 473 |
477 final String input2 = ''' | 474 final String input2 = ''' |
478 @font-face { | 475 @font-face { |
479 src: url(ideal-sans-serif.woff) format("woff"), | 476 src: url(ideal-sans-serif.woff) format("woff"), |
480 url(basic-sans-serif.ttf) format("opentype"), | 477 url(basic-sans-serif.ttf) format("opentype"), |
481 local(Gentium Bold); | 478 local(Gentium Bold); |
482 }'''; | 479 }'''; |
483 final String generated2 = '@font-face {\n' | 480 final String generated2 = '@font-face {\n' |
484 ' src: url("ideal-sans-serif.woff") ' | 481 ' src: url("ideal-sans-serif.woff") ' |
485 'format("woff"), url("basic-sans-serif.ttf") ' | 482 'format("woff"), url("basic-sans-serif.ttf") ' |
486 'format("opentype"), local(Gentium Bold);\n}'; | 483 'format("opentype"), local(Gentium Bold);\n}'; |
487 | 484 |
488 stylesheet = parseCss(input2, errors: errors..clear(), opts: options); | 485 stylesheet = parseCss(input2, errors: errors..clear(), opts: simpleOptions); |
489 | 486 |
490 expect(stylesheet != null, true); | 487 expect(stylesheet != null, true); |
491 expect(errors.isEmpty, true, reason: errors.toString()); | 488 expect(errors.isEmpty, true, reason: errors.toString()); |
492 expect(prettyPrint(stylesheet), generated2); | 489 expect(prettyPrint(stylesheet), generated2); |
493 | 490 |
494 final String input3 = '''@font-face { | 491 final String input3 = '''@font-face { |
495 font-family: MyGentium Text Ornaments; | 492 font-family: MyGentium Text Ornaments; |
496 src: local(Gentium Bold), /* full font name */ | 493 src: local(Gentium Bold), /* full font name */ |
497 local(Gentium-Bold), /* Postscript name */ | 494 local(Gentium-Bold), /* Postscript name */ |
498 url(GentiumBold.ttf); /* otherwise, download it */ | 495 url(GentiumBold.ttf); /* otherwise, download it */ |
499 font-weight: bold; | 496 font-weight: bold; |
500 }'''; | 497 }'''; |
501 final String generated3 = '''@font-face { | 498 final String generated3 = '''@font-face { |
502 font-family: MyGentium Text Ornaments; | 499 font-family: MyGentium Text Ornaments; |
503 src: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf"); | 500 src: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf"); |
504 font-weight: bold; | 501 font-weight: bold; |
505 }'''; | 502 }'''; |
506 | 503 |
507 stylesheet = parseCss(input3, errors: errors..clear(), opts: options); | 504 stylesheet = parseCss(input3, errors: errors..clear(), opts: simpleOptions); |
508 | 505 |
509 expect(stylesheet != null, true); | 506 expect(stylesheet != null, true); |
510 expect(errors.isEmpty, true, reason: errors.toString()); | 507 expect(errors.isEmpty, true, reason: errors.toString()); |
511 expect(prettyPrint(stylesheet), generated3); | 508 expect(prettyPrint(stylesheet), generated3); |
512 | 509 |
513 final String input4 = ''' | 510 final String input4 = ''' |
514 @font-face { | 511 @font-face { |
515 font-family: STIXGeneral; | 512 font-family: STIXGeneral; |
516 src: local(STIXGeneral), url(/stixfonts/STIXGeneral.otf); | 513 src: local(STIXGeneral), url(/stixfonts/STIXGeneral.otf); |
517 unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; | 514 unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; |
518 }'''; | 515 }'''; |
519 final String generated4 = '''@font-face { | 516 final String generated4 = '''@font-face { |
520 font-family: STIXGeneral; | 517 font-family: STIXGeneral; |
521 src: local(STIXGeneral), url("/stixfonts/STIXGeneral.otf"); | 518 src: local(STIXGeneral), url("/stixfonts/STIXGeneral.otf"); |
522 unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; | 519 unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; |
523 }'''; | 520 }'''; |
524 stylesheet = parseCss(input4, errors: errors..clear(), opts: options); | 521 stylesheet = parseCss(input4, errors: errors..clear(), opts: simpleOptions); |
525 | 522 |
526 expect(stylesheet != null, true); | 523 expect(stylesheet != null, true); |
527 expect(errors.isEmpty, true, reason: errors.toString()); | 524 expect(errors.isEmpty, true, reason: errors.toString()); |
528 expect(prettyPrint(stylesheet), generated4); | 525 expect(prettyPrint(stylesheet), generated4); |
529 } | 526 } |
530 | 527 |
531 void testCssFile() { | 528 void testCssFile() { |
532 var errors = []; | 529 var errors = []; |
533 final String input = r''' | 530 final String input = r''' |
534 @import 'simple.css' | 531 @import 'simple.css' |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 html|*:not(:link):not(:visited) { | 693 html|*:not(:link):not(:visited) { |
697 width: 92%; | 694 width: 92%; |
698 } | 695 } |
699 *|*:not(*) { | 696 *|*:not(*) { |
700 font-weight: bold; | 697 font-weight: bold; |
701 } | 698 } |
702 *:not(:not([disabled])) { | 699 *:not(:not([disabled])) { |
703 color: #00f; | 700 color: #00f; |
704 }'''; | 701 }'''; |
705 | 702 |
706 var stylesheet = parseCss(input, errors: errors, opts: options); | 703 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); |
707 | 704 |
708 expect(stylesheet != null, true); | 705 expect(stylesheet != null, true); |
709 expect(errors.isEmpty, true, reason: errors.toString()); | 706 expect(errors.isEmpty, true, reason: errors.toString()); |
710 expect(prettyPrint(stylesheet), generated); | 707 expect(prettyPrint(stylesheet), generated); |
711 } | 708 } |
712 | 709 |
713 void testIE() { | 710 void testIE() { |
714 var errors = []; | 711 var errors = []; |
715 final String input = ".test {\n" | 712 final String input = ".test {\n" |
716 " filter: progid:DXImageTransform.Microsoft.gradient" | 713 " filter: progid:DXImageTransform.Microsoft.gradient" |
717 "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');\n" | 714 "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');\n" |
718 "}"; | 715 "}"; |
719 final String generated = ".test {\n" | 716 final String generated = ".test {\n" |
720 " filter: progid:DXImageTransform.Microsoft.gradient" | 717 " filter: progid:DXImageTransform.Microsoft.gradient" |
721 "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');\n" | 718 "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');\n" |
722 "}"; | 719 "}"; |
723 | 720 |
724 var stylesheet = parseCss(input, errors: errors, opts: options); | 721 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); |
725 | 722 |
726 expect(stylesheet != null, true); | 723 expect(stylesheet != null, true); |
727 expect(errors.isEmpty, true, reason: errors.toString()); | 724 expect(errors.isEmpty, true, reason: errors.toString()); |
728 expect(prettyPrint(stylesheet), generated); | 725 expect(prettyPrint(stylesheet), generated); |
729 | 726 |
730 final String input2 = ".test {\n" | 727 final String input2 = ".test {\n" |
731 " filter: progid:DXImageTransform.Microsoft.gradient" | 728 " filter: progid:DXImageTransform.Microsoft.gradient" |
732 "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670')\n" | 729 "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670')\n" |
733 " progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1
);\n" | 730 " progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1
);\n" |
734 "}"; | 731 "}"; |
735 | 732 |
736 final String generated2 = ".test {\n" | 733 final String generated2 = ".test {\n" |
737 " filter: progid:DXImageTransform.Microsoft.gradient" | 734 " filter: progid:DXImageTransform.Microsoft.gradient" |
738 "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670')\n" | 735 "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670')\n" |
739 " progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=
1);\n" | 736 " progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=
1);\n" |
740 "}"; | 737 "}"; |
741 | 738 |
742 stylesheet = parseCss(input2, errors: errors..clear(), opts: options); | 739 stylesheet = parseCss(input2, errors: errors..clear(), opts: simpleOptions); |
743 | 740 |
744 expect(stylesheet != null, true); | 741 expect(stylesheet != null, true); |
745 expect(errors.isEmpty, true, reason: errors.toString()); | 742 expect(errors.isEmpty, true, reason: errors.toString()); |
746 expect(prettyPrint(stylesheet), generated2); | 743 expect(prettyPrint(stylesheet), generated2); |
747 | 744 |
748 final String input3 = ''' | 745 final String input3 = ''' |
749 div { | 746 div { |
750 filter: alpha(opacity=80); /* IE7 and under */ | 747 filter: alpha(opacity=80); /* IE7 and under */ |
751 -ms-filter: "Alpha(Opacity=40)"; /* IE8 and newer */ | 748 -ms-filter: "Alpha(Opacity=40)"; /* IE8 and newer */ |
752 | 749 |
753 Filter: Blur(Add = 0, Direction = 225, Strength = 10); | 750 Filter: Blur(Add = 0, Direction = 225, Strength = 10); |
754 Filter: FlipV; | 751 Filter: FlipV; |
755 Filter: Gray; | 752 Filter: Gray; |
756 FILTER: Chroma(Color = #000000) Mask(Color=#00FF00); | 753 FILTER: Chroma(Color = #000000) Mask(Color=#00FF00); |
757 Filter: Alpha(Opacity=100, FinishOpacity=0, Style=2, StartX=20, StartY=40, | 754 Filter: Alpha(Opacity=100, FinishOpacity=0, Style=2, StartX=20, StartY=40, |
758 FinishX=0, FinishY=0) Wave(Add=0, Freq=5, LightStrength=20, | 755 FinishX=0, FinishY=0) Wave(Add=0, Freq=5, LightStrength=20, |
759 Phase=220, Strength=10); | 756 Phase=220, Strength=10); |
760 } | 757 } |
761 '''; | 758 '''; |
762 final String generated3 = 'div {\n filter: alpha(opacity=80);\n' | 759 final String generated3 = 'div {\n filter: alpha(opacity=80);\n' |
763 ' -ms-filter: "Alpha(Opacity=40)";\n' | 760 ' -ms-filter: "Alpha(Opacity=40)";\n' |
764 ' Filter: Blur(Add = 0, Direction = 225, Strength = 10);\n' | 761 ' Filter: Blur(Add = 0, Direction = 225, Strength = 10);\n' |
765 ' Filter: FlipV;\n Filter: Gray;\n' | 762 ' Filter: FlipV;\n Filter: Gray;\n' |
766 ' FILTER: Chroma(Color = #000000) Mask(Color=#00FF00);\n' | 763 ' FILTER: Chroma(Color = #000000) Mask(Color=#00FF00);\n' |
767 ' Filter: Alpha(Opacity=100, FinishOpacity=0, Style=2, ' | 764 ' Filter: Alpha(Opacity=100, FinishOpacity=0, Style=2, ' |
768 'StartX=20, StartY=40, \n' | 765 'StartX=20, StartY=40, \n' |
769 ' FinishX=0, FinishY=0) Wave(Add=0, Freq=5, LightStrength=20, \n' | 766 ' FinishX=0, FinishY=0) Wave(Add=0, Freq=5, LightStrength=20, \n' |
770 ' Phase=220, Strength=10);\n}'; | 767 ' Phase=220, Strength=10);\n}'; |
771 | 768 |
772 stylesheet = parseCss(input3, errors: errors..clear(), opts: options); | 769 stylesheet = parseCss(input3, errors: errors..clear(), opts: simpleOptions); |
773 | 770 |
774 expect(stylesheet != null, true); | 771 expect(stylesheet != null, true); |
775 expect(errors.isEmpty, true, reason: errors.toString()); | 772 expect(errors.isEmpty, true, reason: errors.toString()); |
776 expect(prettyPrint(stylesheet), generated3); | 773 expect(prettyPrint(stylesheet), generated3); |
777 } | 774 } |
778 | 775 |
779 /** | 776 /** |
780 * Test IE specific declaration syntax: | 777 * Test IE specific declaration syntax: |
781 * IE6 property name prefixed with _ (normal CSS property name can start | 778 * IE6 property name prefixed with _ (normal CSS property name can start |
782 * with an underscore). | 779 * with an underscore). |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
939 } | 936 } |
940 @keyframes progress-bar-stripes { | 937 @keyframes progress-bar-stripes { |
941 from { | 938 from { |
942 background-position: 40px 0; | 939 background-position: 40px 0; |
943 } | 940 } |
944 to { | 941 to { |
945 background-position: 0 0; | 942 background-position: 0 0; |
946 } | 943 } |
947 }'''; | 944 }'''; |
948 | 945 |
949 var stylesheet = parseCss(input, errors: errors, opts: options); | 946 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); |
950 expect(stylesheet != null, true); | 947 expect(stylesheet != null, true); |
951 expect(errors.isEmpty, true, reason: errors.toString()); | 948 expect(errors.isEmpty, true, reason: errors.toString()); |
952 expect(prettyPrint(stylesheet), generated); | 949 expect(prettyPrint(stylesheet), generated); |
953 } | 950 } |
954 | 951 |
955 void testHangs() { | 952 void testHangs() { |
956 final optionErrors = ['--no-colors', '--warnings_as_errors', 'memory']; | |
957 var errors = []; | 953 var errors = []; |
958 | 954 |
959 // Bad hexvalue had caused a hang in processTerm. | 955 // Bad hexvalue had caused a hang in processTerm. |
960 final input = r'''#a { color: #ebebeburl(0/IE8+9+); }'''; | 956 final input = r'''#a { color: #ebebeburl(0/IE8+9+); }'''; |
961 var stylesheet = parseCss(input, errors: errors, opts: optionErrors); | 957 var stylesheet = parseCss(input, errors: errors, opts: options); |
962 | 958 |
963 expect(stylesheet != null, true); | 959 expect(stylesheet != null, true); |
964 expect(errors.length, 3, reason: errors.toString()); | 960 expect(errors.length, 3, reason: errors.toString()); |
965 | 961 |
966 var errorMessage = errors[0]; | 962 var errorMessage = errors[0]; |
967 expect(errorMessage.message, contains('Bad hex number')); | 963 expect(errorMessage.message, contains('Bad hex number')); |
968 expect(errorMessage.span, isNotNull); | 964 expect(errorMessage.span, isNotNull); |
969 expect(errorMessage.span.start.line, 0); | 965 expect(errorMessage.span.start.line, 0); |
970 expect(errorMessage.span.start.column, 12); | 966 expect(errorMessage.span.start.column, 12); |
971 expect(errorMessage.span.text, '#ebebeburl'); | 967 expect(errorMessage.span.text, '#ebebeburl'); |
(...skipping 15 matching lines...) Expand all Loading... |
987 // Missing closing parenthesis for keyframes. | 983 // Missing closing parenthesis for keyframes. |
988 final input2 = r'''@-ms-keyframes progress-bar-stripes { | 984 final input2 = r'''@-ms-keyframes progress-bar-stripes { |
989 from { | 985 from { |
990 background-position: 40px 0; | 986 background-position: 40px 0; |
991 } | 987 } |
992 to { | 988 to { |
993 background-position: 0 0; | 989 background-position: 0 0; |
994 } | 990 } |
995 '''; | 991 '''; |
996 | 992 |
997 stylesheet = parseCss(input2, errors: errors..clear(), opts: optionErrors); | 993 stylesheet = parseCss(input2, errors: errors..clear(), opts: options); |
998 | 994 |
999 expect(stylesheet != null, true); | 995 expect(stylesheet != null, true); |
1000 | 996 |
1001 expect(errors.length, 1, reason: errors.toString()); | 997 expect(errors.length, 1, reason: errors.toString()); |
1002 | 998 |
1003 errorMessage = errors[0]; | 999 errorMessage = errors[0]; |
1004 expect(errorMessage.message, contains('unexpected end of file')); | 1000 expect(errorMessage.message, contains('unexpected end of file')); |
1005 expect(errorMessage.span, isNotNull); | 1001 expect(errorMessage.span, isNotNull); |
1006 expect(errorMessage.span.start.line, 7); | 1002 expect(errorMessage.span.start.line, 7); |
1007 expect(errorMessage.span.start.column, 0); | 1003 expect(errorMessage.span.start.column, 0); |
(...skipping 10 matching lines...) Expand all Loading... |
1018 test('Newer CSS', testNewerCss); | 1014 test('Newer CSS', testNewerCss); |
1019 test('Media Queries', testMediaQueries); | 1015 test('Media Queries', testMediaQueries); |
1020 test('Font-Face', testFontFace); | 1016 test('Font-Face', testFontFace); |
1021 test('CSS file', testCssFile); | 1017 test('CSS file', testCssFile); |
1022 test('Compact Emitter', testCompactEmitter); | 1018 test('Compact Emitter', testCompactEmitter); |
1023 test('Selector Negation', testNotSelectors); | 1019 test('Selector Negation', testNotSelectors); |
1024 test('IE stuff', testIE); | 1020 test('IE stuff', testIE); |
1025 test('IE declaration syntax', testIEDeclaration); | 1021 test('IE declaration syntax', testIEDeclaration); |
1026 test('Hanging bugs', testHangs); | 1022 test('Hanging bugs', testHangs); |
1027 } | 1023 } |
OLD | NEW |