OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 polymer.test.build.script_compactor_test; | 5 library polymer.test.build.script_compactor_test; |
6 | 6 |
| 7 import 'dart:convert'; |
| 8 |
7 import 'package:code_transformers/tests.dart' show testingDartSdkDirectory; | 9 import 'package:code_transformers/tests.dart' show testingDartSdkDirectory; |
8 import 'package:polymer/src/build/common.dart'; | 10 import 'package:polymer/src/build/common.dart'; |
9 import 'package:polymer/src/build/script_compactor.dart'; | 11 import 'package:polymer/src/build/script_compactor.dart'; |
10 import 'package:smoke/codegen/generator.dart' show DEFAULT_IMPORTS; | 12 import 'package:smoke/codegen/generator.dart' show DEFAULT_IMPORTS; |
11 import 'package:unittest/compact_vm_config.dart'; | 13 import 'package:unittest/compact_vm_config.dart'; |
12 import 'package:unittest/unittest.dart'; | 14 import 'package:unittest/unittest.dart'; |
13 | 15 |
14 import 'common.dart'; | 16 import 'common.dart'; |
15 | 17 |
16 void main() { | 18 void main() { |
17 useCompactVMConfiguration(); | 19 useCompactVMConfiguration(); |
18 var phases = [[new ScriptCompactor(new TransformOptions(), | 20 var phases = [[new ScriptCompactor(new TransformOptions(), |
19 sdkDir: testingDartSdkDirectory)]]; | 21 sdkDir: testingDartSdkDirectory)]]; |
20 group('initializers', () => initializerTests(phases)); | 22 group('initializers', () => initializerTests(phases)); |
21 group('experimental', () => initializerTestsExperimental(phases)); | 23 group('experimental', () => initializerTestsExperimental(phases)); |
22 group('codegen', () => codegenTests(phases)); | 24 group('codegen', () => codegenTests(phases)); |
| 25 group('log element injection', logElementInjectionTests); |
23 } | 26 } |
24 | 27 |
25 initializerTests(phases) { | 28 initializerTests(phases) { |
26 testPhases('no changes', phases, { | 29 testPhases('no changes', phases, { |
27 'a|web/test.html': '<!DOCTYPE html><html></html>', | 30 'a|web/test.html': '<!DOCTYPE html><html></html>', |
28 'a|web/test.html._data': EMPTY_DATA, | 31 'a|web/test.html._data': EMPTY_DATA, |
29 }, { | 32 }, { |
30 'a|web/test.html': '<!DOCTYPE html><html></html>', | 33 'a|web/test.html': '<!DOCTYPE html><html></html>', |
31 }); | 34 }); |
32 | 35 |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 smoke_0.XFoo: {}, | 149 smoke_0.XFoo: {}, |
147 })); | 150 })); |
148 configureForDeployment([ | 151 configureForDeployment([ |
149 () => Polymer.register(\'x-foo2\', i0.XFoo), | 152 () => Polymer.register(\'x-foo2\', i0.XFoo), |
150 ]); | 153 ]); |
151 i0.main(); | 154 i0.main(); |
152 } | 155 } |
153 '''.replaceAll('\n ', '\n'), | 156 '''.replaceAll('\n ', '\n'), |
154 }); | 157 }); |
155 | 158 |
156 testPhases('invalid const expression', phases, { | |
157 'a|web/test.html': | |
158 '<!DOCTYPE html><html><head>', | |
159 'a|web/test.html._data': expectedData(['web/a.dart']), | |
160 'a|web/a.dart': | |
161 'library a;\n' | |
162 'import "package:polymer/polymer.dart";\n' | |
163 '@CustomTag("\${x}-foo")\n' // invalid, x is not defined | |
164 'class XFoo extends PolymerElement {\n' | |
165 '}\n' | |
166 'main(){}', | |
167 }, { | |
168 'a|web/test.html_bootstrap.dart': | |
169 '''$MAIN_HEADER | |
170 import 'a.dart' as i0; | |
171 ${DEFAULT_IMPORTS.join('\n')} | |
172 import 'a.dart' as smoke_0; | |
173 import 'package:polymer/polymer.dart' as smoke_1; | |
174 | 159 |
175 void main() { | 160 testLogOutput( |
176 useGeneratedCode(new StaticConfiguration( | 161 (options) => |
177 checkedMode: false, | 162 new ScriptCompactor(options, sdkDir: testingDartSdkDirectory), |
178 parents: { | 163 'invalid const expression logs', { |
179 smoke_0.XFoo: smoke_1.PolymerElement, | 164 'a|web/test.html': |
180 }, | 165 '<!DOCTYPE html><html><head>', |
181 declarations: { | 166 'a|web/test.html._data': expectedData(['web/a.dart']), |
182 smoke_0.XFoo: {}, | 167 'a|web/a.dart': |
183 })); | 168 'library a;\n' |
184 configureForDeployment([]); | 169 'import "package:polymer/polymer.dart";\n' |
185 i0.main(); | 170 '@CustomTag("\${x}-foo")\n' // invalid, x is not defined |
186 } | 171 'class XFoo extends PolymerElement {\n' |
187 '''.replaceAll('\n ', '\n'), | 172 '}\n' |
| 173 'main(){}', |
| 174 }, {}, [ |
| 175 'warning: The parameter to @CustomTag seems to be invalid. ' |
| 176 '(web/a.dart 2 11)', |
| 177 ]); |
188 | 178 |
189 }, [ | 179 testPhases( |
190 'warning: The parameter to @CustomTag seems to be invalid. ' | 180 'invalid const expression', phases, { |
191 '(web/a.dart 2 11)', | 181 'a|web/test.html': |
192 ]); | 182 '<!DOCTYPE html><html><head>', |
| 183 'a|web/test.html._data': expectedData(['web/a.dart']), |
| 184 'a|web/a.dart': |
| 185 'library a;\n' |
| 186 'import "package:polymer/polymer.dart";\n' |
| 187 '@CustomTag("\${x}-foo")\n' // invalid, x is not defined |
| 188 'class XFoo extends PolymerElement {\n' |
| 189 '}\n' |
| 190 'main(){}', |
| 191 }, { |
| 192 'a|web/test.html_bootstrap.dart': |
| 193 '''$MAIN_HEADER |
| 194 import 'a.dart' as i0; |
| 195 ${DEFAULT_IMPORTS.join('\n')} |
| 196 import 'a.dart' as smoke_0; |
| 197 import 'package:polymer/polymer.dart' as smoke_1; |
| 198 |
| 199 void main() { |
| 200 useGeneratedCode(new StaticConfiguration( |
| 201 checkedMode: false, |
| 202 parents: { |
| 203 smoke_0.XFoo: smoke_1.PolymerElement, |
| 204 }, |
| 205 declarations: { |
| 206 smoke_0.XFoo: {}, |
| 207 })); |
| 208 configureForDeployment([]); |
| 209 i0.main(); |
| 210 } |
| 211 '''.replaceAll('\n ', '\n'), |
| 212 |
| 213 }); |
193 | 214 |
194 testPhases('no polymer import (no warning, but no crash either)', phases, { | 215 testPhases('no polymer import (no warning, but no crash either)', phases, { |
195 'a|web/test.html': | 216 'a|web/test.html': |
196 '<!DOCTYPE html><html><head>', | 217 '<!DOCTYPE html><html><head>', |
197 'a|web/test.html._data': expectedData(['web/a.dart']), | 218 'a|web/test.html._data': expectedData(['web/a.dart']), |
198 'a|web/a.dart': | 219 'a|web/a.dart': |
199 'library a;\n' | 220 'library a;\n' |
200 'import "package:polymer/polymer.broken.import.dart";\n' | 221 'import "package:polymer/polymer.broken.import.dart";\n' |
201 '@CustomTag("x-foo")\n' | 222 '@CustomTag("x-foo")\n' |
202 'class XFoo extends PolymerElement {\n' | 223 'class XFoo extends PolymerElement {\n' |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 declarations: { | 479 declarations: { |
459 smoke_0.XFoo: {}, | 480 smoke_0.XFoo: {}, |
460 })); | 481 })); |
461 startPolymer([ | 482 startPolymer([ |
462 () => Polymer.register(\'x-foo2\', i0.XFoo), | 483 () => Polymer.register(\'x-foo2\', i0.XFoo), |
463 ]); | 484 ]); |
464 } | 485 } |
465 '''.replaceAll('\n ', '\n'), | 486 '''.replaceAll('\n ', '\n'), |
466 }); | 487 }); |
467 | 488 |
468 testPhases('invalid const expression', phases, { | 489 testLogOutput( |
469 'a|web/test.html': | 490 (options) => |
470 '<!DOCTYPE html><html><head>', | 491 new ScriptCompactor(options, sdkDir: testingDartSdkDirectory), |
471 'a|web/test.html._data': expectedData(['web/a.dart'], experimental: true), | 492 'invalid const expression logs', { |
472 'a|web/a.dart': | 493 'a|web/test.html': |
473 'library a;\n' | 494 '<!DOCTYPE html><html><head>', |
474 'import "package:polymer/polymer.dart";\n' | 495 'a|web/test.html._data': |
475 '@CustomTag("\${x}-foo")\n' // invalid, x is not defined | 496 expectedData(['web/a.dart'], experimental: true), |
476 'class XFoo extends PolymerElement {\n' | 497 'a|web/a.dart': |
477 '}\n' | 498 'library a;\n' |
478 'main(){}', | 499 'import "package:polymer/polymer.dart";\n' |
479 }, { | 500 '@CustomTag("\${x}-foo")\n' // invalid, x is not defined |
480 'a|web/test.html_bootstrap.dart': | 501 'class XFoo extends PolymerElement {\n' |
481 '''$MAIN_HEADER | 502 '}\n' |
482 import 'a.dart' as i0; | 503 'main(){}', |
483 ${DEFAULT_IMPORTS.join('\n')} | 504 }, {}, [ |
484 import 'a.dart' as smoke_0; | 505 'warning: The parameter to @CustomTag seems to be invalid. ' |
485 import 'package:polymer/polymer.dart' as smoke_1; | 506 '(web/a.dart 2 11)', |
| 507 'warning: $NO_INITIALIZERS_ERROR', |
| 508 ]); |
486 | 509 |
487 void main() { | 510 testPhases( |
488 useGeneratedCode(new StaticConfiguration( | 511 'invalid const expression', phases, { |
489 checkedMode: false, | 512 'a|web/test.html': |
490 parents: { | 513 '<!DOCTYPE html><html><head>', |
491 smoke_0.XFoo: smoke_1.PolymerElement, | 514 'a|web/test.html._data': |
492 }, | 515 expectedData(['web/a.dart'], experimental: true), |
493 declarations: { | 516 'a|web/a.dart': |
494 smoke_0.XFoo: {}, | 517 'library a;\n' |
495 })); | 518 'import "package:polymer/polymer.dart";\n' |
496 startPolymer([]); | 519 '@CustomTag("\${x}-foo")\n' // invalid, x is not defined |
497 } | 520 'class XFoo extends PolymerElement {\n' |
498 '''.replaceAll('\n ', '\n'), | 521 '}\n' |
| 522 'main(){}', |
| 523 }, { |
| 524 'a|web/test.html_bootstrap.dart': |
| 525 '''$MAIN_HEADER |
| 526 import 'a.dart' as i0; |
| 527 ${DEFAULT_IMPORTS.join('\n')} |
| 528 import 'a.dart' as smoke_0; |
| 529 import 'package:polymer/polymer.dart' as smoke_1; |
499 | 530 |
500 }, [ | 531 void main() { |
501 'warning: The parameter to @CustomTag seems to be invalid. ' | 532 useGeneratedCode(new StaticConfiguration( |
502 '(web/a.dart 2 11)', | 533 checkedMode: false, |
503 'warning: $NO_INITIALIZERS_ERROR', | 534 parents: { |
504 ]); | 535 smoke_0.XFoo: smoke_1.PolymerElement, |
| 536 }, |
| 537 declarations: { |
| 538 smoke_0.XFoo: {}, |
| 539 })); |
| 540 startPolymer([]); |
| 541 } |
| 542 '''.replaceAll('\n ', '\n'), |
| 543 }); |
505 | 544 |
506 testPhases('no polymer import (no warning, but no crash either)', phases, { | 545 testLogOutput( |
507 'a|web/test.html': | 546 (options) => |
508 '<!DOCTYPE html><html><head>', | 547 new ScriptCompactor(options, sdkDir: testingDartSdkDirectory), |
509 'a|web/test.html._data': expectedData(['web/a.dart'], experimental: true), | 548 'no polymer import logs', { |
510 'a|web/a.dart': | 549 'a|web/test.html': |
511 'library a;\n' | 550 '<!DOCTYPE html><html><head>', |
512 'import "package:polymer/polymer.broken.import.dart";\n' | 551 'a|web/test.html._data': expectedData(['web/a.dart'], experimental: true
), |
513 '@CustomTag("x-foo")\n' | 552 'a|web/a.dart': |
514 'class XFoo extends PolymerElement {\n' | 553 'library a;\n' |
515 '}\n' | 554 'import "package:polymer/polymer.broken.import.dart";\n' |
516 'main(){}', | 555 '@CustomTag("x-foo")\n' |
517 }, { | 556 'class XFoo extends PolymerElement {\n' |
518 'a|web/test.html_bootstrap.dart': | 557 '}\n' |
519 '''$MAIN_HEADER | 558 'main(){}', |
520 import 'a.dart' as i0; | 559 }, {}, [ |
521 ${DEFAULT_IMPORTS.join('\n')} | 560 'warning: $NO_INITIALIZERS_ERROR', |
| 561 ]); |
522 | 562 |
523 void main() { | 563 testPhases( |
524 useGeneratedCode(new StaticConfiguration( | 564 'no polymer import', phases, { |
525 checkedMode: false)); | 565 'a|web/test.html': |
526 startPolymer([]); | 566 '<!DOCTYPE html><html><head>', |
527 } | 567 'a|web/test.html._data': |
528 '''.replaceAll('\n ', '\n'), | 568 expectedData(['web/a.dart'], experimental: true), |
| 569 'a|web/a.dart': |
| 570 'library a;\n' |
| 571 'import "package:polymer/polymer.broken.import.dart";\n' |
| 572 '@CustomTag("x-foo")\n' |
| 573 'class XFoo extends PolymerElement {\n' |
| 574 '}\n' |
| 575 'main(){}', |
| 576 }, { |
| 577 'a|web/test.html_bootstrap.dart': |
| 578 '''$MAIN_HEADER |
| 579 import 'a.dart' as i0; |
| 580 ${DEFAULT_IMPORTS.join('\n')} |
529 | 581 |
530 }, [ | 582 void main() { |
531 'warning: $NO_INITIALIZERS_ERROR', | 583 useGeneratedCode(new StaticConfiguration( |
532 ]); | 584 checkedMode: false)); |
| 585 startPolymer([]); |
| 586 } |
| 587 '''.replaceAll('\n ', '\n'), |
| 588 |
| 589 }); |
533 | 590 |
534 testPhases('several scripts', phases, { | 591 testPhases('several scripts', phases, { |
535 'a|web/test.html': | 592 'a|web/test.html': |
536 '<!DOCTYPE html><html><head>' | 593 '<!DOCTYPE html><html><head>' |
537 '</head><body><div></div>', | 594 '</head><body><div></div>', |
538 'a|web/test.html._data': | 595 'a|web/test.html._data': |
539 expectedData(['web/a.dart', 'web/b.dart', 'web/c.dart', 'web/d.dart'],
experimental: true), | 596 expectedData(['web/a.dart', 'web/b.dart', 'web/c.dart', 'web/d.dart'],
experimental: true), |
540 'a|web/d.dart': | 597 'a|web/d.dart': |
541 'library d;\n' | 598 'library d;\n' |
542 'import "package:polymer/polymer.dart";\n' | 599 'import "package:polymer/polymer.dart";\n' |
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1086 })); | 1143 })); |
1087 configureForDeployment([ | 1144 configureForDeployment([ |
1088 () => Polymer.register(\'x-foo\', i0.XFoo), | 1145 () => Polymer.register(\'x-foo\', i0.XFoo), |
1089 ]); | 1146 ]); |
1090 i0.main(); | 1147 i0.main(); |
1091 } | 1148 } |
1092 '''.replaceAll('\n ', '\n'), | 1149 '''.replaceAll('\n ', '\n'), |
1093 }); | 1150 }); |
1094 } | 1151 } |
1095 | 1152 |
| 1153 void logElementInjectionTests() { |
| 1154 final outputLogsPhases = [[new ScriptCompactor( |
| 1155 new TransformOptions(injectBuildLogsInOutput: true, releaseMode: false), |
| 1156 sdkDir: testingDartSdkDirectory)]]; |
| 1157 |
| 1158 testPhases('Injects logging element and styles', outputLogsPhases, { |
| 1159 'a|web/test.html': '<!DOCTYPE html><html><head>', |
| 1160 'a|web/test.html._data': expectedData(['web/a.dart']), |
| 1161 'a|web/a.dart': |
| 1162 'library a;\n' |
| 1163 'import "package:polymer/polymer.dart";\n' |
| 1164 'main(){}', |
| 1165 }, { |
| 1166 'a|web/test.html': |
| 1167 '<!DOCTYPE html><html><head>' |
| 1168 '<link rel="stylesheet" type="text/css" ' |
| 1169 'href="packages/polymer/src/build/log_injector.css">' |
| 1170 '</head><body>' |
| 1171 '<script type="application/dart" ' |
| 1172 'src="test.html_bootstrap.dart"></script>' |
| 1173 '</body></html>', |
| 1174 'a|web/test.html_bootstrap.dart': |
| 1175 '''$MAIN_HEADER |
| 1176 import 'a.dart' as i0; |
| 1177 import 'package:polymer/src/build/log_injector.dart'; |
| 1178 ${DEFAULT_IMPORTS.join('\n')} |
| 1179 |
| 1180 void main() { |
| 1181 useGeneratedCode(new StaticConfiguration( |
| 1182 checkedMode: false)); |
| 1183 new LogInjector().injectLogsFromUrl(); |
| 1184 configureForDeployment([]); |
| 1185 i0.main(); |
| 1186 } |
| 1187 '''.replaceAll('\n ', '\n'), |
| 1188 'a|web/a.dart': |
| 1189 'library a;\n' |
| 1190 'import "package:polymer/polymer.dart";\n' |
| 1191 'main(){}', |
| 1192 }); |
| 1193 } |
OLD | NEW |