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 'dart:convert'; | 7 import 'dart:convert'; |
8 | 8 |
9 import 'package:polymer/src/build/common.dart'; | 9 import 'package:polymer/src/build/common.dart'; |
10 import 'package:polymer/src/build/linter.dart'; | 10 import 'package:polymer/src/build/linter.dart'; |
| 11 import 'package:polymer/src/build/messages.dart'; |
11 import 'package:unittest/unittest.dart'; | 12 import 'package:unittest/unittest.dart'; |
12 | 13 |
13 import 'common.dart'; | 14 import 'common.dart'; |
14 | 15 |
15 void main() { | 16 void main() { |
16 _testLinter('nothing to report', { | 17 _testLinter('nothing to report', { |
17 'a|lib/test.html': '<!DOCTYPE html><html></html>', | 18 'a|lib/test.html': '<!DOCTYPE html><html></html>', |
18 }, []); | 19 }, []); |
19 | 20 |
20 group('must have proper initialization imports', () { | 21 group('must have proper initialization imports', () { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 '<link rel="import" href="packages/a/lib.html">' | 53 '<link rel="import" href="packages/a/lib.html">' |
53 '<polymer-element name="x-a"></polymer-element>' | 54 '<polymer-element name="x-a"></polymer-element>' |
54 '<script type="application/dart" src="foo.dart">' | 55 '<script type="application/dart" src="foo.dart">' |
55 '</script>' | 56 '</script>' |
56 '<script src="packages/browser/dart.js"></script>' | 57 '<script src="packages/browser/dart.js"></script>' |
57 '</html>', | 58 '</html>', |
58 }, []); | 59 }, []); |
59 | 60 |
60 test('usePolymerHtmlMessage looks right', () { | 61 test('usePolymerHtmlMessage looks right', () { |
61 _check(int i, String url) { | 62 _check(int i, String url) { |
62 expect(usePolymerHtmlMessage(i), | 63 expect(_usePolymerHtmlMessage(i), |
63 contains('<link rel="import" href="$url">')); | 64 contains('<link rel="import" href="$url">')); |
64 } | 65 } |
65 _check(0, 'packages/polymer/polymer.html'); | 66 _check(0, 'packages/polymer/polymer.html'); |
66 _check(1, '../packages/polymer/polymer.html'); | 67 _check(1, '../packages/polymer/polymer.html'); |
67 _check(2, '../../packages/polymer/polymer.html'); | 68 _check(2, '../../packages/polymer/polymer.html'); |
68 _check(3, '../../../packages/polymer/polymer.html'); | 69 _check(3, '../../../packages/polymer/polymer.html'); |
69 }); | 70 }); |
70 | 71 |
71 _testLinter('missing polymer.html in web', { | 72 _testLinter('missing polymer.html in web', { |
72 'a|web/test.html': '<!DOCTYPE html><html>\n' | 73 'a|web/test.html': '<!DOCTYPE html><html>\n' |
73 '<polymer-element name="x-a"></polymer-element>' | 74 '<polymer-element name="x-a"></polymer-element>' |
74 '<script type="application/dart" src="foo.dart">' | 75 '<script type="application/dart" src="foo.dart">' |
75 '</script>' | 76 '</script>' |
76 '<script src="packages/browser/dart.js"></script>' | 77 '<script src="packages/browser/dart.js"></script>' |
77 '</html>', | 78 '</html>', |
78 }, [ | 79 }, [ |
79 'warning: ${usePolymerHtmlMessage(0)} (web/test.html 1 0)', | 80 'warning: ${_usePolymerHtmlMessage(0)} ' |
| 81 '(web/test.html 1 0)', |
80 ]); | 82 ]); |
81 | 83 |
82 _testLinter('missing polymer.html in web/foo', { | 84 _testLinter('missing polymer.html in web/foo', { |
83 'a|web/foo/test.html': '<!DOCTYPE html><html>\n' | 85 'a|web/foo/test.html': '<!DOCTYPE html><html>\n' |
84 '<polymer-element name="x-a"></polymer-element>' | 86 '<polymer-element name="x-a"></polymer-element>' |
85 '<script type="application/dart" src="foo.dart">' | 87 '<script type="application/dart" src="foo.dart">' |
86 '</script>' | 88 '</script>' |
87 '<script src="packages/browser/dart.js"></script>' | 89 '<script src="packages/browser/dart.js"></script>' |
88 '</html>', | 90 '</html>', |
89 }, [ | 91 }, [ |
90 'warning: ${usePolymerHtmlMessage(1)} (web/foo/test.html 1 0)', | 92 'warning: ${_usePolymerHtmlMessage(1)} ' |
| 93 '(web/foo/test.html 1 0)', |
91 ]); | 94 ]); |
92 | 95 |
93 _testLinter('missing polymer.html in lib', { | 96 _testLinter('missing polymer.html in lib', { |
94 'a|lib/test.html': '<!DOCTYPE html><html>\n' | 97 'a|lib/test.html': '<!DOCTYPE html><html>\n' |
95 '<polymer-element name="x-a"></polymer-element>' | 98 '<polymer-element name="x-a"></polymer-element>' |
96 '<script type="application/dart" src="foo.dart">' | 99 '<script type="application/dart" src="foo.dart">' |
97 '</script>' | 100 '</script>' |
98 '<script src="packages/browser/dart.js"></script>' | 101 '<script src="packages/browser/dart.js"></script>' |
99 '</html>', | 102 '</html>', |
100 }, [ | 103 }, [ |
101 'warning: ${usePolymerHtmlMessage(2)} (lib/test.html 1 0)', | 104 'warning: ${_usePolymerHtmlMessage(2)} ' |
| 105 '(lib/test.html 1 0)', |
102 ]); | 106 ]); |
103 | 107 |
104 _testLinter('missing polymer.html in lib/foo/bar', { | 108 _testLinter('missing polymer.html in lib/foo/bar', { |
105 'a|lib/foo/bar/test.html': '<!DOCTYPE html><html>\n' | 109 'a|lib/foo/bar/test.html': '<!DOCTYPE html><html>\n' |
106 '<polymer-element name="x-a"></polymer-element>' | 110 '<polymer-element name="x-a"></polymer-element>' |
107 '<script type="application/dart" src="foo.dart">' | 111 '<script type="application/dart" src="foo.dart">' |
108 '</script>' | 112 '</script>' |
109 '<script src="packages/browser/dart.js"></script>' | 113 '<script src="packages/browser/dart.js"></script>' |
110 '</html>', | 114 '</html>', |
111 }, [ | 115 }, [ |
112 'warning: ${usePolymerHtmlMessage(4)} (lib/foo/bar/test.html 1 0)', | 116 'warning: ${_usePolymerHtmlMessage(4)} ' |
| 117 '(lib/foo/bar/test.html 1 0)', |
113 ]); | 118 ]); |
114 | 119 |
115 _testLinter('missing Dart code', { | 120 _testLinter('missing Dart code', { |
116 'a|web/test.html': '<!DOCTYPE html><html>' | 121 'a|web/test.html': '<!DOCTYPE html><html>' |
117 '<link rel="import" href="packages/polymer/polymer.html">' | 122 '<link rel="import" href="packages/polymer/polymer.html">' |
118 '<script src="packages/browser/dart.js"></script>' | 123 '<script src="packages/browser/dart.js"></script>' |
119 '</html>', | 124 '</html>', |
120 }, [ | 125 }, [ |
121 'warning: $USE_INIT_DART', | 126 'warning: ${useInitDart.snippet}', |
122 ]); | 127 ]); |
123 | 128 |
124 _testLinter('nothing to report, experimental with no Dart code', { | 129 _testLinter('nothing to report, experimental with no Dart code', { |
125 'a|web/test.html': '<!DOCTYPE html><html>' | 130 'a|web/test.html': '<!DOCTYPE html><html>' |
126 '<link rel="import" ' | 131 '<link rel="import" ' |
127 'href="packages/polymer/polymer_experimental.html">' | 132 'href="packages/polymer/polymer_experimental.html">' |
128 '<script src="packages/browser/dart.js"></script>' | 133 '<script src="packages/browser/dart.js"></script>' |
129 '</html>', | 134 '</html>', |
130 }, []); | 135 }, []); |
131 | 136 |
132 _testLinter('experimental cannot have Dart code in main document', { | 137 _testLinter('experimental cannot have Dart code in main document', { |
133 'a|web/test.html': '<!DOCTYPE html><html>' | 138 'a|web/test.html': '<!DOCTYPE html><html>' |
134 '<link rel="import" ' | 139 '<link rel="import" ' |
135 'href="packages/polymer/polymer_experimental.html">\n' | 140 'href="packages/polymer/polymer_experimental.html">\n' |
136 '<script type="application/dart" src="foo.dart">' | 141 '<script type="application/dart" src="foo.dart">' |
137 '</script>' | 142 '</script>' |
138 '<script src="packages/browser/dart.js"></script>' | 143 '<script src="packages/browser/dart.js"></script>' |
139 '</html>', | 144 '</html>', |
140 }, [ | 145 }, [ |
141 'warning: $NO_DART_SCRIPT_AND_EXPERIMENTAL (web/test.html 1 0)', | 146 'warning: ${noDartScriptAndExperimental.snippet} (web/test.html 1 0)', |
142 ]); | 147 ]); |
143 | 148 |
144 _testLinter('missing Dart code and polymer.html', { | 149 _testLinter('missing Dart code and polymer.html', { |
145 'a|web/test.html': '<!DOCTYPE html><html></html>', | 150 'a|web/test.html': '<!DOCTYPE html><html></html>', |
146 }, [ | 151 }, [ |
147 'warning: $USE_INIT_DART', | 152 'warning: ${useInitDart.snippet}', |
148 ]); | 153 ]); |
149 }); | 154 }); |
150 | 155 |
151 group('single script tag per document', () { | 156 group('single script tag per document', () { |
152 _testLinter('two top-level tags', { | 157 _testLinter('two top-level tags', { |
153 'a|web/test.html': '<!DOCTYPE html><html>' | 158 'a|web/test.html': '<!DOCTYPE html><html>' |
154 '<link rel="import" href="packages/polymer/polymer.html">' | 159 '<link rel="import" href="packages/polymer/polymer.html">' |
155 '<script type="application/dart" src="a.dart">' | 160 '<script type="application/dart" src="a.dart">' |
156 '</script>\n' | 161 '</script>\n' |
157 '<script type="application/dart" src="b.dart">' | 162 '<script type="application/dart" src="b.dart">' |
(...skipping 29 matching lines...) Expand all Loading... |
187 }, [ | 192 }, [ |
188 'warning: Only one "application/dart" script tag per document is' | 193 'warning: Only one "application/dart" script tag per document is' |
189 ' allowed. (web/test.html 1 0)', | 194 ' allowed. (web/test.html 1 0)', |
190 ]); | 195 ]); |
191 }); | 196 }); |
192 | 197 |
193 group('doctype warning', () { | 198 group('doctype warning', () { |
194 _testLinter('in web', { | 199 _testLinter('in web', { |
195 'a|web/test.html': '<html></html>', | 200 'a|web/test.html': '<html></html>', |
196 }, [ | 201 }, [ |
197 'warning: Unexpected start tag (html). Expected DOCTYPE. ' | 202 'warning: (from html5lib) Unexpected start tag (html). ' |
198 '(web/test.html 0 0)', | 203 'Expected DOCTYPE. (web/test.html 0 0)', |
199 'warning: $USE_INIT_DART', | 204 'warning: ${useInitDart.snippet}', |
200 ]); | 205 ]); |
201 | 206 |
202 _testLinter('in lib', { | 207 _testLinter('in lib', { |
203 'a|lib/test.html': '<html></html>', | 208 'a|lib/test.html': '<html></html>', |
204 }, []); | 209 }, []); |
205 }); | 210 }); |
206 | 211 |
207 group('duplicate polymer-elements,', () { | 212 group('duplicate polymer-elements,', () { |
208 _testLinter('same file', { | 213 _testLinter('same file', { |
209 'a|lib/test.html': '''<html> | 214 'a|lib/test.html': '''<html> |
210 <link rel="import" href="../../packages/polymer/polymer.html"> | 215 <link rel="import" href="../../packages/polymer/polymer.html"> |
211 <polymer-element name="x-a"></polymer-element> | 216 <polymer-element name="x-a"></polymer-element> |
212 <polymer-element name="x-a"></polymer-element> | 217 <polymer-element name="x-a"></polymer-element> |
213 </html>'''.replaceAll(' ', ''), | 218 </html>'''.replaceAll(' ', ''), |
214 }, [ | 219 }, [ |
215 'warning: duplicate definition for custom tag "x-a". ' | 220 'warning: duplicate definition for custom tag "x-a". ' |
216 '(lib/test.html 2 0)', | 221 '(lib/test.html 2 0)', |
217 'warning: duplicate definition for custom tag "x-a" ' | 222 'warning: duplicate definition for custom tag "x-a". ' |
218 '(second definition). (lib/test.html 3 0)' | 223 '(second definition). (lib/test.html 3 0)' |
219 ]); | 224 ]); |
220 | 225 |
221 _testLinter('other file', { | 226 _testLinter('other file', { |
222 'a|lib/b.html': '''<html> | 227 'a|lib/b.html': '''<html> |
223 <link rel="import" href="../../packages/polymer/polymer.html"> | 228 <link rel="import" href="../../packages/polymer/polymer.html"> |
224 <polymer-element name="x-a"></polymer-element> | 229 <polymer-element name="x-a"></polymer-element> |
225 </html>'''.replaceAll(' ', ''), | 230 </html>'''.replaceAll(' ', ''), |
226 'a|lib/test.html': '''<html> | 231 'a|lib/test.html': '''<html> |
227 <link rel="import" href="b.html"> | 232 <link rel="import" href="b.html"> |
228 <polymer-element name="x-a"></polymer-element> | 233 <polymer-element name="x-a"></polymer-element> |
229 </html>'''.replaceAll(' ', ''), | 234 </html>'''.replaceAll(' ', ''), |
230 }, [ | 235 }, [ |
231 'warning: duplicate definition for custom tag "x-a". ' | 236 'warning: duplicate definition for custom tag "x-a". ' |
232 '(lib/b.html 2 0)', | 237 '(lib/b.html 2 0)', |
233 'warning: duplicate definition for custom tag "x-a" ' | 238 'warning: duplicate definition for custom tag "x-a". ' |
234 '(second definition). (lib/test.html 2 0)' | 239 '(second definition). (lib/test.html 2 0)' |
235 ]); | 240 ]); |
236 | 241 |
237 _testLinter('non existing file', { | 242 _testLinter('non existing file', { |
238 'a|lib/test.html': '''<html> | 243 'a|lib/test.html': '''<html> |
239 <link rel="import" href="../../packages/polymer/polymer.html"> | 244 <link rel="import" href="../../packages/polymer/polymer.html"> |
240 <link rel="import" href="b.html"> | 245 <link rel="import" href="b.html"> |
241 <polymer-element name="x-a"></polymer-element> | 246 <polymer-element name="x-a"></polymer-element> |
242 </html>'''.replaceAll(' ', ''), | 247 </html>'''.replaceAll(' ', ''), |
243 }, [ | 248 }, [ |
244 'warning: couldn\'t find imported asset "lib/b.html" in package ' | 249 'warning: couldn\'t find imported asset "lib/b.html" in package ' |
245 '"a". (lib/test.html 2 0)' | 250 '"a". (lib/test.html 2 0)' |
246 ]); | 251 ]); |
247 | 252 |
248 _testLinter('other package', { | 253 _testLinter('other package', { |
249 'b|lib/b.html': '''<html> | 254 'b|lib/b.html': '''<html> |
250 <link rel="import" href="../../packages/polymer/polymer.html"> | 255 <link rel="import" href="../../packages/polymer/polymer.html"> |
251 <polymer-element name="x-a"></polymer-element> | 256 <polymer-element name="x-a"></polymer-element> |
252 </html>'''.replaceAll(' ', ''), | 257 </html>'''.replaceAll(' ', ''), |
253 'a|lib/test.html': '''<html> | 258 'a|lib/test.html': '''<html> |
254 <link rel="import" href="../../packages/b/b.html"> | 259 <link rel="import" href="../../packages/b/b.html"> |
255 <polymer-element name="x-a"></polymer-element> | 260 <polymer-element name="x-a"></polymer-element> |
256 </html>'''.replaceAll(' ', ''), | 261 </html>'''.replaceAll(' ', ''), |
257 }, [ | 262 }, [ |
258 'warning: duplicate definition for custom tag "x-a". ' | 263 'warning: duplicate definition for custom tag "x-a". ' |
259 '(package:b/b.html 2 0)', | 264 '(package:b/b.html 2 0)', |
260 'warning: duplicate definition for custom tag "x-a" ' | 265 'warning: duplicate definition for custom tag "x-a". ' |
261 '(second definition). (lib/test.html 2 0)' | 266 '(second definition). (lib/test.html 2 0)' |
262 ]); | 267 ]); |
263 }); | 268 }); |
264 | 269 |
265 _testLinter('bad link-rel tag (href missing)', { | 270 _testLinter('bad link-rel tag (href missing)', { |
266 'a|lib/test.html': '''<html> | 271 'a|lib/test.html': '''<html> |
267 <link rel="import"> | 272 <link rel="import"> |
268 <link rel="stylesheet"> | 273 <link rel="stylesheet"> |
269 <link rel="foo"> | 274 <link rel="foo"> |
270 <link rel="import" href=""> | 275 <link rel="import" href=""> |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 'a|lib/b.html': '<html></html>', | 307 'a|lib/b.html': '<html></html>', |
303 'a|lib/test.html': '''<html> | 308 'a|lib/test.html': '''<html> |
304 <link rel="import" href="../../packages/polymer/polymer.html"> | 309 <link rel="import" href="../../packages/polymer/polymer.html"> |
305 <polymer-element name="x-a"> | 310 <polymer-element name="x-a"> |
306 <link rel="import" href="b.html"> | 311 <link rel="import" href="b.html"> |
307 <template><div> | 312 <template><div> |
308 </div></template> | 313 </div></template> |
309 </polymer-element> | 314 </polymer-element> |
310 </html>'''.replaceAll(' ', ''), | 315 </html>'''.replaceAll(' ', ''), |
311 }, [ | 316 }, [ |
312 'error: $NO_IMPORT_WITHIN_ELEMENT (lib/test.html 3 2)' | 317 'error: ${noImportWithinElement.snippet} (lib/test.html 3 2)' |
313 ]); | 318 ]); |
314 | 319 |
315 _testLinter('need a name for <polymer-element>', { | 320 _testLinter('need a name for <polymer-element>', { |
316 'a|lib/test.html': '''<html> | 321 'a|lib/test.html': '''<html> |
317 <link rel="import" href="../../packages/polymer/polymer.html"> | 322 <link rel="import" href="../../packages/polymer/polymer.html"> |
318 <polymer-element></polymer-element> | 323 <polymer-element></polymer-element> |
319 </html>'''.replaceAll(' ', ''), | 324 </html>'''.replaceAll(' ', ''), |
320 }, [ | 325 }, [ |
321 'error: Missing tag name of the custom element. Please include an ' | 326 'error: Missing tag name of the custom element. Please include an ' |
322 'attribute like \'name="your-tag-name"\'. (lib/test.html 2 0)' | 327 'attribute like \'name="your-tag-name"\'. (lib/test.html 2 0)' |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 <polymer-element name="x-a"><div on-foo-bar="{{quux}}"></div> | 505 <polymer-element name="x-a"><div on-foo-bar="{{quux}}"></div> |
501 </polymer-element> | 506 </polymer-element> |
502 '''.replaceAll(' ', ''), | 507 '''.replaceAll(' ', ''), |
503 }, []); | 508 }, []); |
504 }); | 509 }); |
505 | 510 |
506 group('using custom tags', () { | 511 group('using custom tags', () { |
507 _testLinter('tag exists (x-tag)', { | 512 _testLinter('tag exists (x-tag)', { |
508 'a|lib/test.html': '<x-foo></x-foo>', | 513 'a|lib/test.html': '<x-foo></x-foo>', |
509 }, [ | 514 }, [ |
510 'warning: definition for Polymer element with tag name "x-foo" not ' | 515 'warning: custom element with name "x-foo" not found. ' |
511 'found. (lib/test.html 0 0)' | 516 '(lib/test.html 0 0)' |
512 ]); | 517 ]); |
513 | 518 |
514 _testLinter('tag exists (type extension)', { | 519 _testLinter('tag exists (type extension)', { |
515 'a|lib/test.html': '<div is="x-foo"></div>', | 520 'a|lib/test.html': '<div is="x-foo"></div>', |
516 }, [ | 521 }, [ |
517 'warning: definition for Polymer element with tag name "x-foo" not ' | 522 'warning: custom element with name "x-foo" not found. ' |
518 'found. (lib/test.html 0 0)' | 523 '(lib/test.html 0 0)' |
519 ]); | 524 ]); |
520 | 525 |
521 _testLinter('tag exists (internally defined in code)', { | 526 _testLinter('tag exists (internally defined in code)', { |
522 'a|lib/test.html': '<div is="auto-binding-dart"></div>', | 527 'a|lib/test.html': '<div is="auto-binding-dart"></div>', |
523 }, []); | 528 }, []); |
524 | 529 |
525 _testLinter('used correctly (no base tag)', { | 530 _testLinter('used correctly (no base tag)', { |
526 'a|lib/test.html': ''' | 531 'a|lib/test.html': ''' |
527 <link rel="import" href="../../packages/polymer/polymer.html"> | 532 <link rel="import" href="../../packages/polymer/polymer.html"> |
528 <polymer-element name="x-a"></polymer-element> | 533 <polymer-element name="x-a"></polymer-element> |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 | 660 |
656 testPhases("logs are output to file", outputLogsPhases, { | 661 testPhases("logs are output to file", outputLogsPhases, { |
657 'a|web/test.html': '<!DOCTYPE html><html>\n' | 662 'a|web/test.html': '<!DOCTYPE html><html>\n' |
658 '<polymer-element name="x-a"></polymer-element>' | 663 '<polymer-element name="x-a"></polymer-element>' |
659 '<script type="application/dart" src="foo.dart">' | 664 '<script type="application/dart" src="foo.dart">' |
660 '</script>' | 665 '</script>' |
661 '<script src="packages/browser/dart.js"></script>' | 666 '<script src="packages/browser/dart.js"></script>' |
662 '</html>', | 667 '</html>', |
663 }, { | 668 }, { |
664 'a|web/test.html._buildLogs.1': | 669 'a|web/test.html._buildLogs.1': |
665 '[{' | 670 '{"polymer_3":[{' |
666 '"level":"Warning",' | 671 '"level":"Warning",' |
667 '"message":${JSON.encode(const HtmlEscape().convert( | 672 '"message":{' |
668 usePolymerHtmlMessage(0)))},' | 673 '"id":"polymer_3",' |
| 674 '"snippet":"${_usePolymerHtmlMessage(0).replaceAll('"','\\"')}"' |
| 675 '},' |
669 '"span":{' | 676 '"span":{' |
670 '"location":"web/test.html:2:1",' | 677 '"start":{' |
671 '"text":' | 678 '"url":"web/test.html",' |
672 '"${const HtmlEscape().convert('<polymer-element name="x-a">')}"
' | 679 '"offset":22,' |
| 680 '"line":1,' |
| 681 '"column":0' |
| 682 '},' |
| 683 '"end":{' |
| 684 '"url":"web/test.html",' |
| 685 '"offset":50,' |
| 686 '"line":1,' |
| 687 '"column":28' |
| 688 '},' |
| 689 '"text":"<polymer-element name=\\"x-a\\">"' |
673 '}' | 690 '}' |
674 '}]', | 691 '}]}', |
675 }, [ | 692 }, [ |
676 // Logs should still make it to barback too. | 693 // Logs should still make it to barback too. |
677 'warning: ${usePolymerHtmlMessage(0)} (web/test.html 1 0)', | 694 'warning: ${_usePolymerHtmlMessage(0)} (web/test.html 1 0)', |
678 ]); | 695 ]); |
679 }); | 696 }); |
680 } | 697 } |
681 | 698 |
| 699 _usePolymerHtmlMessage(int i) { |
| 700 var prefix = '../' * i; |
| 701 return usePolymerHtmlMessage.create({'reachOutPrefix': prefix}).snippet; |
| 702 } |
| 703 |
682 _testLinter(String name, Map inputFiles, List outputMessages, | 704 _testLinter(String name, Map inputFiles, List outputMessages, |
683 [bool solo = false]) { | 705 [bool solo = false]) { |
684 var outputFiles = {}; | 706 var outputFiles = {}; |
685 if (outputMessages.every((m) => m.startsWith('warning:'))) { | 707 if (outputMessages.every((m) => m.startsWith('warning:'))) { |
686 inputFiles.forEach((k, v) => outputFiles[k] = v); | 708 inputFiles.forEach((k, v) => outputFiles[k] = v); |
687 } | 709 } |
688 if (outputMessages.isEmpty) { | 710 if (outputMessages.isEmpty) { |
689 var linter = new Linter(new TransformOptions()); | 711 var linter = new Linter(new TransformOptions()); |
690 testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages, solo); | 712 testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages, solo); |
691 } else { | 713 } else { |
692 testLogOutput( | 714 testLogOutput( |
693 (options) => new Linter(options), name, inputFiles, outputFiles, | 715 (options) => new Linter(options), name, inputFiles, outputFiles, |
694 outputMessages, solo); | 716 outputMessages, solo); |
695 } | 717 } |
696 } | 718 } |
OLD | NEW |