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.linter_test; | 5 library polymer.test.linter_test; |
6 | 6 |
7 import 'package:polymer/src/build/common.dart'; | 7 import 'package:polymer/src/build/common.dart'; |
8 import 'package:polymer/src/build/linter.dart'; | 8 import 'package:polymer/src/build/linter.dart'; |
9 import 'package:unittest/compact_vm_config.dart'; | |
10 import 'package:unittest/unittest.dart'; | 9 import 'package:unittest/unittest.dart'; |
11 | 10 |
12 import 'common.dart'; | 11 import 'common.dart'; |
13 | 12 |
14 void main() { | 13 void main() { |
15 useCompactVMConfiguration(); | |
16 _testLinter('nothing to report', { | 14 _testLinter('nothing to report', { |
17 'a|lib/test.html': '<!DOCTYPE html><html></html>', | 15 'a|lib/test.html': '<!DOCTYPE html><html></html>', |
18 }, []); | 16 }, []); |
19 | 17 |
20 group('must have Dart code to invoke initPolymer, dart.js, not boot.js', () { | 18 group('must have import to polymer.html', () { |
21 _testLinter('nothing to report', { | 19 _testLinter('nothing to report', { |
22 'a|web/test.html': '<!DOCTYPE html><html>' | 20 'a|web/test.html': '<!DOCTYPE html><html>' |
| 21 '<link rel="import" href="packages/polymer/polymer.html">' |
23 '<script type="application/dart" src="foo.dart">' | 22 '<script type="application/dart" src="foo.dart">' |
24 '</script>' | 23 '</script>' |
25 '<script src="packages/browser/dart.js"></script>' | 24 '<script src="packages/browser/dart.js"></script>' |
26 '</html>', | 25 '</html>', |
27 }, []); | 26 }, []); |
28 | 27 |
29 _testLinter('missing Dart code and dart.js', { | 28 _testLinter('missing everything', { |
30 'a|web/test.html': '<!DOCTYPE html><html></html>', | 29 'a|web/test.html': '<!DOCTYPE html><html></html>', |
31 }, [ | 30 }, [ |
32 'error: $USE_INIT_DART', | 31 'warning: $USE_POLYMER_HTML', |
33 ]); | 32 ]); |
34 | 33 |
35 _testLinter('using deprecated boot.js', { | 34 _testLinter('using deprecated boot.js', { |
36 'a|web/test.html': '<!DOCTYPE html><html>\n' | 35 'a|web/test.html': '<!DOCTYPE html><html>\n' |
37 '<script src="packages/polymer/boot.js"></script>' | 36 '<script src="packages/polymer/boot.js"></script>' |
38 '<script type="application/dart" src="foo.dart">' | 37 '<script type="application/dart" src="foo.dart">' |
39 '</script>' | 38 '</script>' |
40 '<script src="packages/browser/dart.js"></script>' | 39 '<script src="packages/browser/dart.js"></script>' |
41 '</html>', | 40 '</html>', |
42 }, [ | 41 }, [ |
43 'warning: $BOOT_JS_DEPRECATED (web/test.html 1 0)', | 42 'warning: $USE_POLYMER_HTML', |
44 ]); | 43 ]); |
45 }); | 44 }); |
46 group('single script tag per document', () { | 45 group('multiple script tag per document allowed', () { |
47 _testLinter('two top-level tags', { | 46 _testLinter('two top-level tags', { |
48 'a|web/test.html': '<!DOCTYPE html><html>' | 47 'a|web/test.html': '<!DOCTYPE html><html>' |
| 48 '<link rel="import" href="packages/polymer/polymer.html">' |
49 '<script type="application/dart" src="a.dart">' | 49 '<script type="application/dart" src="a.dart">' |
50 '</script>\n' | 50 '</script>\n' |
51 '<script type="application/dart" src="b.dart">' | 51 '<script type="application/dart" src="b.dart">' |
52 '</script>' | 52 '</script>' |
53 '<script src="packages/browser/dart.js"></script>' | 53 '<script src="packages/browser/dart.js"></script>' |
54 }, [ | 54 }, []); |
55 'warning: Only one "application/dart" script tag per document is' | |
56 ' allowed. (web/test.html 1 0)', | |
57 ]); | |
58 | |
59 _testLinter('two top-level tags, non entrypoint', { | |
60 'a|lib/test.html': '<!DOCTYPE html><html>' | |
61 '<script type="application/dart" src="a.dart">' | |
62 '</script>\n' | |
63 '<script type="application/dart" src="b.dart">' | |
64 '</script>' | |
65 '<script src="packages/browser/dart.js"></script>' | |
66 }, [ | |
67 'warning: Only one "application/dart" script tag per document is' | |
68 ' allowed. (lib/test.html 1 0)', | |
69 ]); | |
70 | 55 |
71 _testLinter('tags inside elements', { | 56 _testLinter('tags inside elements', { |
72 'a|web/test.html': '<!DOCTYPE html><html>' | 57 'a|web/test.html': '<!DOCTYPE html><html>' |
| 58 '<link rel="import" href="packages/polymer/polymer.html">' |
73 '<polymer-element name="x-a">' | 59 '<polymer-element name="x-a">' |
74 '<script type="application/dart" src="a.dart">' | 60 '<script type="application/dart" src="a.dart">' |
75 '</script>' | 61 '</script>' |
76 '</polymer-element>\n' | 62 '</polymer-element>\n' |
77 '<script type="application/dart" src="b.dart">' | 63 '<script type="application/dart" src="b.dart">' |
78 '</script>' | 64 '</script>' |
79 '<script src="packages/browser/dart.js"></script>' | 65 '<script src="packages/browser/dart.js"></script>' |
80 }, [ | 66 }, []); |
81 'warning: Only one "application/dart" script tag per document is' | |
82 ' allowed. (web/test.html 1 0)', | |
83 ]); | |
84 }); | 67 }); |
85 | 68 |
86 group('doctype warning', () { | 69 group('doctype warning', () { |
87 _testLinter('in web', { | 70 _testLinter('in web', { |
88 'a|web/test.html': '<html></html>', | 71 'a|web/test.html': '<html></html>', |
89 }, [ | 72 }, [ |
90 'warning: Unexpected start tag (html). Expected DOCTYPE. ' | 73 'warning: Unexpected start tag (html). Expected DOCTYPE. ' |
91 '(web/test.html 0 0)', | 74 '(web/test.html 0 0)', |
92 'error: $USE_INIT_DART', | 75 'warning: $USE_POLYMER_HTML', |
93 ]); | 76 ]); |
94 | 77 |
95 _testLinter('in lib', { | 78 _testLinter('in lib', { |
96 'a|lib/test.html': '<html></html>', | 79 'a|lib/test.html': '<html></html>', |
97 }, []); | 80 }, []); |
98 }); | 81 }); |
99 | 82 |
100 group('duplicate polymer-elements,', () { | 83 group('duplicate polymer-elements,', () { |
101 _testLinter('same file', { | 84 _testLinter('same file', { |
102 'a|lib/test.html': '''<html> | 85 'a|lib/test.html': '''<html> |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 'warning: custom element with name "x-b" not found. (lib/test.html 1 0)' | 203 'warning: custom element with name "x-b" not found. (lib/test.html 1 0)' |
221 ]); | 204 ]); |
222 | 205 |
223 | 206 |
224 group('script type matches code', () { | 207 group('script type matches code', () { |
225 _testLinter('top-level, .dart url', { | 208 _testLinter('top-level, .dart url', { |
226 'a|lib/test.html': '''<html> | 209 'a|lib/test.html': '''<html> |
227 <script src="foo.dart"></script> | 210 <script src="foo.dart"></script> |
228 </html>'''.replaceAll(' ', ''), | 211 </html>'''.replaceAll(' ', ''), |
229 }, [ | 212 }, [ |
230 'warning: Wrong script type, expected type="application/dart".' | 213 'warning: Wrong script type, expected type="application/dart" or' |
231 ' (lib/test.html 1 0)' | 214 ' type="application/dart;component=1". (lib/test.html 1 0)' |
232 ]); | 215 ]); |
233 | 216 |
234 _testLinter('in polymer-element, .dart url', { | 217 _testLinter('in polymer-element, .dart url', { |
235 'a|lib/test.html': '''<html> | 218 'a|lib/test.html': '''<html> |
236 <polymer-element name="x-a"> | 219 <polymer-element name="x-a"> |
237 <script src="foo.dart"></script> | 220 <script src="foo.dart"></script> |
238 </polymer-element> | 221 </polymer-element> |
239 </html>'''.replaceAll(' ', ''), | 222 </html>'''.replaceAll(' ', ''), |
240 }, [ | 223 }, [ |
241 'warning: Wrong script type, expected type="application/dart".' | 224 'warning: Wrong script type, expected type="application/dart" or' |
242 ' (lib/test.html 2 0)' | 225 ' type="application/dart;component=1". (lib/test.html 2 0)' |
243 ]); | 226 ]); |
244 | 227 |
245 _testLinter('in polymer-element, .js url', { | 228 _testLinter('in polymer-element, .js url', { |
246 'a|lib/test.html': '''<html> | 229 'a|lib/test.html': '''<html> |
247 <polymer-element name="x-a"> | 230 <polymer-element name="x-a"> |
248 <script src="foo.js"></script> | 231 <script src="foo.js"></script> |
249 </polymer-element> | 232 </polymer-element> |
250 </html>'''.replaceAll(' ', ''), | 233 </html>'''.replaceAll(' ', ''), |
251 }, []); | 234 }, []); |
252 | 235 |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 }); | 433 }); |
451 | 434 |
452 _testLinter("namespaced attributes don't cause an internal error", { | 435 _testLinter("namespaced attributes don't cause an internal error", { |
453 'a|lib/test.html': '''<html><body> | 436 'a|lib/test.html': '''<html><body> |
454 <svg xmlns="http://www.w3.org/2000/svg" width="520" height="350"> | 437 <svg xmlns="http://www.w3.org/2000/svg" width="520" height="350"> |
455 </svg> | 438 </svg> |
456 '''.replaceAll(' ', ''), | 439 '''.replaceAll(' ', ''), |
457 }, []); | 440 }, []); |
458 } | 441 } |
459 | 442 |
460 _testLinter(String name, Map inputFiles, List outputMessages) { | 443 _testLinter(String name, Map inputFiles, List outputMessages, |
| 444 [bool solo = false]) { |
461 var linter = new Linter(new TransformOptions()); | 445 var linter = new Linter(new TransformOptions()); |
462 var outputFiles = {}; | 446 var outputFiles = {}; |
463 if (outputMessages.every((m) => m.startsWith('warning:'))) { | 447 if (outputMessages.every((m) => m.startsWith('warning:'))) { |
464 inputFiles.forEach((k, v) => outputFiles[k] = v); | 448 inputFiles.forEach((k, v) => outputFiles[k] = v); |
465 } | 449 } |
466 testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages); | 450 testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages, solo); |
467 } | 451 } |
OLD | NEW |