| 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 |