| 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: ${MISSING_INIT_POLYMER.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: ${NO_DART_SCRIPT_AND_EXPERIMENTAL.snippet} ' |
| 147 '(web/test.html 1 0)', |
| 142 ]); | 148 ]); |
| 143 | 149 |
| 144 _testLinter('missing Dart code and polymer.html', { | 150 _testLinter('missing Dart code and polymer.html', { |
| 145 'a|web/test.html': '<!DOCTYPE html><html></html>', | 151 'a|web/test.html': '<!DOCTYPE html><html></html>', |
| 146 }, [ | 152 }, [ |
| 147 'warning: $USE_INIT_DART', | 153 'warning: ${MISSING_INIT_POLYMER.snippet}', |
| 148 ]); | 154 ]); |
| 149 }); | 155 }); |
| 150 | 156 |
| 151 group('single script tag per document', () { | 157 group('single script tag per document', () { |
| 152 _testLinter('two top-level tags', { | 158 _testLinter('two top-level tags', { |
| 153 'a|web/test.html': '<!DOCTYPE html><html>' | 159 'a|web/test.html': '<!DOCTYPE html><html>' |
| 154 '<link rel="import" href="packages/polymer/polymer.html">' | 160 '<link rel="import" href="packages/polymer/polymer.html">' |
| 155 '<script type="application/dart" src="a.dart">' | 161 '<script type="application/dart" src="a.dart">' |
| 156 '</script>\n' | 162 '</script>\n' |
| 157 '<script type="application/dart" src="b.dart">' | 163 '<script type="application/dart" src="b.dart">' |
| (...skipping 29 matching lines...) Expand all Loading... |
| 187 }, [ | 193 }, [ |
| 188 'warning: Only one "application/dart" script tag per document is' | 194 'warning: Only one "application/dart" script tag per document is' |
| 189 ' allowed. (web/test.html 1 0)', | 195 ' allowed. (web/test.html 1 0)', |
| 190 ]); | 196 ]); |
| 191 }); | 197 }); |
| 192 | 198 |
| 193 group('doctype warning', () { | 199 group('doctype warning', () { |
| 194 _testLinter('in web', { | 200 _testLinter('in web', { |
| 195 'a|web/test.html': '<html></html>', | 201 'a|web/test.html': '<html></html>', |
| 196 }, [ | 202 }, [ |
| 197 'warning: Unexpected start tag (html). Expected DOCTYPE. ' | 203 'warning: (from html5lib) Unexpected start tag (html). ' |
| 198 '(web/test.html 0 0)', | 204 'Expected DOCTYPE. (web/test.html 0 0)', |
| 199 'warning: $USE_INIT_DART', | 205 'warning: ${MISSING_INIT_POLYMER.snippet}', |
| 200 ]); | 206 ]); |
| 201 | 207 |
| 202 _testLinter('in lib', { | 208 _testLinter('in lib', { |
| 203 'a|lib/test.html': '<html></html>', | 209 'a|lib/test.html': '<html></html>', |
| 204 }, []); | 210 }, []); |
| 205 }); | 211 }); |
| 206 | 212 |
| 207 group('duplicate polymer-elements,', () { | 213 group('duplicate polymer-elements,', () { |
| 208 _testLinter('same file', { | 214 _testLinter('same file', { |
| 209 'a|lib/test.html': '''<html> | 215 'a|lib/test.html': '''<html> |
| 210 <link rel="import" href="../../packages/polymer/polymer.html"> | 216 <link rel="import" href="../../packages/polymer/polymer.html"> |
| 211 <polymer-element name="x-a"></polymer-element> | 217 <polymer-element name="x-a"></polymer-element> |
| 212 <polymer-element name="x-a"></polymer-element> | 218 <polymer-element name="x-a"></polymer-element> |
| 213 </html>'''.replaceAll(' ', ''), | 219 </html>'''.replaceAll(' ', ''), |
| 214 }, [ | 220 }, [ |
| 215 'warning: duplicate definition for custom tag "x-a". ' | 221 'warning: duplicate definition for custom tag "x-a". ' |
| 216 '(lib/test.html 2 0)', | 222 '(lib/test.html 2 0)', |
| 217 'warning: duplicate definition for custom tag "x-a" ' | 223 'warning: duplicate definition for custom tag "x-a". ' |
| 218 '(second definition). (lib/test.html 3 0)' | 224 '(second definition). (lib/test.html 3 0)' |
| 219 ]); | 225 ]); |
| 220 | 226 |
| 221 _testLinter('other file', { | 227 _testLinter('other file', { |
| 222 'a|lib/b.html': '''<html> | 228 'a|lib/b.html': '''<html> |
| 223 <link rel="import" href="../../packages/polymer/polymer.html"> | 229 <link rel="import" href="../../packages/polymer/polymer.html"> |
| 224 <polymer-element name="x-a"></polymer-element> | 230 <polymer-element name="x-a"></polymer-element> |
| 225 </html>'''.replaceAll(' ', ''), | 231 </html>'''.replaceAll(' ', ''), |
| 226 'a|lib/test.html': '''<html> | 232 'a|lib/test.html': '''<html> |
| 227 <link rel="import" href="b.html"> | 233 <link rel="import" href="b.html"> |
| 228 <polymer-element name="x-a"></polymer-element> | 234 <polymer-element name="x-a"></polymer-element> |
| 229 </html>'''.replaceAll(' ', ''), | 235 </html>'''.replaceAll(' ', ''), |
| 230 }, [ | 236 }, [ |
| 231 'warning: duplicate definition for custom tag "x-a". ' | 237 'warning: duplicate definition for custom tag "x-a". ' |
| 232 '(lib/b.html 2 0)', | 238 '(lib/b.html 2 0)', |
| 233 'warning: duplicate definition for custom tag "x-a" ' | 239 'warning: duplicate definition for custom tag "x-a". ' |
| 234 '(second definition). (lib/test.html 2 0)' | 240 '(second definition). (lib/test.html 2 0)' |
| 235 ]); | 241 ]); |
| 236 | 242 |
| 237 _testLinter('non existing file', { | 243 _testLinter('non existing file', { |
| 238 'a|lib/test.html': '''<html> | 244 'a|lib/test.html': '''<html> |
| 239 <link rel="import" href="../../packages/polymer/polymer.html"> | 245 <link rel="import" href="../../packages/polymer/polymer.html"> |
| 240 <link rel="import" href="b.html"> | 246 <link rel="import" href="b.html"> |
| 241 <polymer-element name="x-a"></polymer-element> | 247 <polymer-element name="x-a"></polymer-element> |
| 242 </html>'''.replaceAll(' ', ''), | 248 </html>'''.replaceAll(' ', ''), |
| 243 }, [ | 249 }, [ |
| 244 'warning: couldn\'t find imported asset "lib/b.html" in package ' | 250 'warning: couldn\'t find imported asset "lib/b.html" in package ' |
| 245 '"a". (lib/test.html 2 0)' | 251 '"a". (lib/test.html 2 0)' |
| 246 ]); | 252 ]); |
| 247 | 253 |
| 248 _testLinter('other package', { | 254 _testLinter('other package', { |
| 249 'b|lib/b.html': '''<html> | 255 'b|lib/b.html': '''<html> |
| 250 <link rel="import" href="../../packages/polymer/polymer.html"> | 256 <link rel="import" href="../../packages/polymer/polymer.html"> |
| 251 <polymer-element name="x-a"></polymer-element> | 257 <polymer-element name="x-a"></polymer-element> |
| 252 </html>'''.replaceAll(' ', ''), | 258 </html>'''.replaceAll(' ', ''), |
| 253 'a|lib/test.html': '''<html> | 259 'a|lib/test.html': '''<html> |
| 254 <link rel="import" href="../../packages/b/b.html"> | 260 <link rel="import" href="../../packages/b/b.html"> |
| 255 <polymer-element name="x-a"></polymer-element> | 261 <polymer-element name="x-a"></polymer-element> |
| 256 </html>'''.replaceAll(' ', ''), | 262 </html>'''.replaceAll(' ', ''), |
| 257 }, [ | 263 }, [ |
| 258 'warning: duplicate definition for custom tag "x-a". ' | 264 'warning: duplicate definition for custom tag "x-a". ' |
| 259 '(package:b/b.html 2 0)', | 265 '(package:b/b.html 2 0)', |
| 260 'warning: duplicate definition for custom tag "x-a" ' | 266 'warning: duplicate definition for custom tag "x-a". ' |
| 261 '(second definition). (lib/test.html 2 0)' | 267 '(second definition). (lib/test.html 2 0)' |
| 262 ]); | 268 ]); |
| 263 }); | 269 }); |
| 264 | 270 |
| 265 _testLinter('bad link-rel tag (href missing)', { | 271 _testLinter('bad link-rel tag (href missing)', { |
| 266 'a|lib/test.html': '''<html> | 272 'a|lib/test.html': '''<html> |
| 267 <link rel="import"> | 273 <link rel="import"> |
| 268 <link rel="stylesheet"> | 274 <link rel="stylesheet"> |
| 269 <link rel="foo"> | 275 <link rel="foo"> |
| 270 <link rel="import" href=""> | 276 <link rel="import" href=""> |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 'a|lib/b.html': '<html></html>', | 308 'a|lib/b.html': '<html></html>', |
| 303 'a|lib/test.html': '''<html> | 309 'a|lib/test.html': '''<html> |
| 304 <link rel="import" href="../../packages/polymer/polymer.html"> | 310 <link rel="import" href="../../packages/polymer/polymer.html"> |
| 305 <polymer-element name="x-a"> | 311 <polymer-element name="x-a"> |
| 306 <link rel="import" href="b.html"> | 312 <link rel="import" href="b.html"> |
| 307 <template><div> | 313 <template><div> |
| 308 </div></template> | 314 </div></template> |
| 309 </polymer-element> | 315 </polymer-element> |
| 310 </html>'''.replaceAll(' ', ''), | 316 </html>'''.replaceAll(' ', ''), |
| 311 }, [ | 317 }, [ |
| 312 'error: $NO_IMPORT_WITHIN_ELEMENT (lib/test.html 3 2)' | 318 'error: ${NO_IMPORT_WITHIN_ELEMENT.snippet} (lib/test.html 3 2)' |
| 313 ]); | 319 ]); |
| 314 | 320 |
| 315 _testLinter('need a name for <polymer-element>', { | 321 _testLinter('need a name for <polymer-element>', { |
| 316 'a|lib/test.html': '''<html> | 322 'a|lib/test.html': '''<html> |
| 317 <link rel="import" href="../../packages/polymer/polymer.html"> | 323 <link rel="import" href="../../packages/polymer/polymer.html"> |
| 318 <polymer-element></polymer-element> | 324 <polymer-element></polymer-element> |
| 319 </html>'''.replaceAll(' ', ''), | 325 </html>'''.replaceAll(' ', ''), |
| 320 }, [ | 326 }, [ |
| 321 'error: Missing tag name of the custom element. Please include an ' | 327 'error: Missing tag name of the custom element. Please include an ' |
| 322 'attribute like \'name="your-tag-name"\'. (lib/test.html 2 0)' | 328 'attribute like \'name="your-tag-name"\'. (lib/test.html 2 0)' |
| 323 ]); | 329 ]); |
| 324 | 330 |
| 325 _testLinter('name for <polymer-element> should have dashes', { | 331 _testLinter('name for <polymer-element> should have dashes', { |
| 326 'a|lib/test.html': '''<html> | 332 'a|lib/test.html': '''<html> |
| 327 <link rel="import" href="../../packages/polymer/polymer.html"> | 333 <link rel="import" href="../../packages/polymer/polymer.html"> |
| 328 <polymer-element name="a"></polymer-element> | 334 <polymer-element name="a"></polymer-element> |
| 329 </html>'''.replaceAll(' ', ''), | 335 </html>'''.replaceAll(' ', ''), |
| 330 }, [ | 336 }, [ |
| 331 'error: Invalid name "a". Custom element names must have at least one' | 337 'error: Invalid name "a". Custom element names must have at least one' |
| 332 ' dash and can\'t be any of the following names: annotation-xml, ' | 338 ' dash (-) and can\'t be any of the following names: annotation-xml, ' |
| 333 'color-profile, font-face, font-face-src, font-face-uri, ' | 339 'color-profile, font-face, font-face-src, font-face-uri, ' |
| 334 'font-face-format, font-face-name, missing-glyph. (lib/test.html 2 0)' | 340 'font-face-format, font-face-name, missing-glyph. (lib/test.html 2 0)' |
| 335 ]); | 341 ]); |
| 336 | 342 |
| 337 _testLinter('extend is a valid element or existing tag', { | 343 _testLinter('extend is a valid element or existing tag', { |
| 338 'a|lib/test.html': '''<html> | 344 'a|lib/test.html': '''<html> |
| 339 <link rel="import" href="../../packages/polymer/polymer.html"> | 345 <link rel="import" href="../../packages/polymer/polymer.html"> |
| 340 <polymer-element name="x-a" extends="li"></polymer-element> | 346 <polymer-element name="x-a" extends="li"></polymer-element> |
| 341 </html>'''.replaceAll(' ', ''), | 347 </html>'''.replaceAll(' ', ''), |
| 342 }, []); | 348 }, []); |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 <polymer-element name="x-a"><div on-foo-bar="{{quux}}"></div> | 506 <polymer-element name="x-a"><div on-foo-bar="{{quux}}"></div> |
| 501 </polymer-element> | 507 </polymer-element> |
| 502 '''.replaceAll(' ', ''), | 508 '''.replaceAll(' ', ''), |
| 503 }, []); | 509 }, []); |
| 504 }); | 510 }); |
| 505 | 511 |
| 506 group('using custom tags', () { | 512 group('using custom tags', () { |
| 507 _testLinter('tag exists (x-tag)', { | 513 _testLinter('tag exists (x-tag)', { |
| 508 'a|lib/test.html': '<x-foo></x-foo>', | 514 'a|lib/test.html': '<x-foo></x-foo>', |
| 509 }, [ | 515 }, [ |
| 510 'warning: definition for Polymer element with tag name "x-foo" not ' | 516 'warning: custom element with name "x-foo" not found. ' |
| 511 'found. (lib/test.html 0 0)' | 517 '(lib/test.html 0 0)' |
| 512 ]); | 518 ]); |
| 513 | 519 |
| 514 _testLinter('tag exists (type extension)', { | 520 _testLinter('tag exists (type extension)', { |
| 515 'a|lib/test.html': '<div is="x-foo"></div>', | 521 'a|lib/test.html': '<div is="x-foo"></div>', |
| 516 }, [ | 522 }, [ |
| 517 'warning: definition for Polymer element with tag name "x-foo" not ' | 523 'warning: custom element with name "x-foo" not found. ' |
| 518 'found. (lib/test.html 0 0)' | 524 '(lib/test.html 0 0)' |
| 519 ]); | 525 ]); |
| 520 | 526 |
| 521 _testLinter('tag exists (internally defined in code)', { | 527 _testLinter('tag exists (internally defined in code)', { |
| 522 'a|lib/test.html': '<div is="auto-binding-dart"></div>', | 528 'a|lib/test.html': '<div is="auto-binding-dart"></div>', |
| 523 }, []); | 529 }, []); |
| 524 | 530 |
| 525 _testLinter('used correctly (no base tag)', { | 531 _testLinter('used correctly (no base tag)', { |
| 526 'a|lib/test.html': ''' | 532 'a|lib/test.html': ''' |
| 527 <link rel="import" href="../../packages/polymer/polymer.html"> | 533 <link rel="import" href="../../packages/polymer/polymer.html"> |
| 528 <polymer-element name="x-a"></polymer-element> | 534 <polymer-element name="x-a"></polymer-element> |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 655 | 661 |
| 656 testPhases("logs are output to file", outputLogsPhases, { | 662 testPhases("logs are output to file", outputLogsPhases, { |
| 657 'a|web/test.html': '<!DOCTYPE html><html>\n' | 663 'a|web/test.html': '<!DOCTYPE html><html>\n' |
| 658 '<polymer-element name="x-a"></polymer-element>' | 664 '<polymer-element name="x-a"></polymer-element>' |
| 659 '<script type="application/dart" src="foo.dart">' | 665 '<script type="application/dart" src="foo.dart">' |
| 660 '</script>' | 666 '</script>' |
| 661 '<script src="packages/browser/dart.js"></script>' | 667 '<script src="packages/browser/dart.js"></script>' |
| 662 '</html>', | 668 '</html>', |
| 663 }, { | 669 }, { |
| 664 'a|web/test.html._buildLogs.1': | 670 'a|web/test.html._buildLogs.1': |
| 665 '[{' | 671 '{"polymer#3":[{' |
| 666 '"level":"Warning",' | 672 '"level":"Warning",' |
| 667 '"message":${JSON.encode(const HtmlEscape().convert( | 673 '"message":{' |
| 668 usePolymerHtmlMessage(0)))},' | 674 '"id":"polymer#3",' |
| 675 '"snippet":"${_usePolymerHtmlMessage(0).replaceAll('"','\\"')}"' |
| 676 '},' |
| 669 '"span":{' | 677 '"span":{' |
| 670 '"location":"web/test.html:2:1",' | 678 '"start":{' |
| 671 '"text":' | 679 '"url":"web/test.html",' |
| 672 '"${const HtmlEscape().convert('<polymer-element name="x-a">')}"
' | 680 '"offset":22,' |
| 681 '"line":1,' |
| 682 '"column":0' |
| 683 '},' |
| 684 '"end":{' |
| 685 '"url":"web/test.html",' |
| 686 '"offset":50,' |
| 687 '"line":1,' |
| 688 '"column":28' |
| 689 '},' |
| 690 '"text":"<polymer-element name=\\"x-a\\">"' |
| 673 '}' | 691 '}' |
| 674 '}]', | 692 '}]}', |
| 675 }, [ | 693 }, [ |
| 676 // Logs should still make it to barback too. | 694 // Logs should still make it to barback too. |
| 677 'warning: ${usePolymerHtmlMessage(0)} (web/test.html 1 0)', | 695 'warning: ${_usePolymerHtmlMessage(0)} (web/test.html 1 0)', |
| 678 ]); | 696 ]); |
| 679 }); | 697 }); |
| 680 } | 698 } |
| 681 | 699 |
| 700 _usePolymerHtmlMessage(int i) { |
| 701 var prefix = '../' * i; |
| 702 return USE_POLYMER_HTML.create({'reachOutPrefix': prefix}).snippet; |
| 703 } |
| 704 |
| 682 _testLinter(String name, Map inputFiles, List outputMessages, | 705 _testLinter(String name, Map inputFiles, List outputMessages, |
| 683 [bool solo = false]) { | 706 [bool solo = false]) { |
| 684 var outputFiles = {}; | 707 var outputFiles = {}; |
| 685 if (outputMessages.every((m) => m.startsWith('warning:'))) { | 708 if (outputMessages.every((m) => m.startsWith('warning:'))) { |
| 686 inputFiles.forEach((k, v) => outputFiles[k] = v); | 709 inputFiles.forEach((k, v) => outputFiles[k] = v); |
| 687 } | 710 } |
| 688 if (outputMessages.isEmpty) { | 711 if (outputMessages.isEmpty) { |
| 689 var linter = new Linter(new TransformOptions()); | 712 var linter = new Linter(new TransformOptions()); |
| 690 testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages, solo); | 713 testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages, solo); |
| 691 } else { | 714 } else { |
| 692 testLogOutput( | 715 testLogOutput( |
| 693 (options) => new Linter(options), name, inputFiles, outputFiles, | 716 (options) => new Linter(options), name, inputFiles, outputFiles, |
| 694 outputMessages, solo); | 717 outputMessages, solo); |
| 695 } | 718 } |
| 696 } | 719 } |
| OLD | NEW |