| Index: pkg/polymer/test/build/linter_test.dart
|
| diff --git a/pkg/polymer/test/build/linter_test.dart b/pkg/polymer/test/build/linter_test.dart
|
| index 46964bed745a847cf4e66b2a4fcdb16dc1552667..22328fe0370601370dfd747d066f61c39bbc40a2 100644
|
| --- a/pkg/polymer/test/build/linter_test.dart
|
| +++ b/pkg/polymer/test/build/linter_test.dart
|
| @@ -16,9 +16,7 @@ void main() {
|
| useCompactVMConfiguration();
|
| _testLinter('nothing to report', {
|
| 'a|lib/test.html': '<!DOCTYPE html><html></html>',
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - });
|
| + }, []);
|
|
|
| group('must have Dart code to invoke initPolymer, dart.js, not boot.js', () {
|
| _testLinter('nothing to report', {
|
| @@ -27,15 +25,13 @@ void main() {
|
| '</script>'
|
| '<script src="packages/browser/dart.js"></script>'
|
| '</html>',
|
| - }, {
|
| - 'a|web/test.html.messages': '',
|
| - });
|
| + }, []);
|
|
|
| _testLinter('missing Dart code and dart.js', {
|
| 'a|web/test.html': '<!DOCTYPE html><html></html>',
|
| - }, {
|
| - 'a|web/test.html.messages': 'error: $USE_INIT_DART',
|
| - });
|
| + }, [
|
| + 'error: $USE_INIT_DART',
|
| + ]);
|
|
|
| _testLinter('using deprecated boot.js', {
|
| 'a|web/test.html': '<!DOCTYPE html><html>\n'
|
| @@ -44,10 +40,9 @@ void main() {
|
| '</script>'
|
| '<script src="packages/browser/dart.js"></script>'
|
| '</html>',
|
| - }, {
|
| - 'a|web/test.html.messages': 'warning: $BOOT_JS_DEPRECATED '
|
| - '(web/test.html 1 0)',
|
| - });
|
| + }, [
|
| + 'warning: $BOOT_JS_DEPRECATED (web/test.html 1 0)',
|
| + ]);
|
| });
|
| group('single script tag per document', () {
|
| _testLinter('two top-level tags', {
|
| @@ -57,11 +52,10 @@ void main() {
|
| '<script type="application/dart" src="b.dart">'
|
| '</script>'
|
| '<script src="packages/browser/dart.js"></script>'
|
| - }, {
|
| - 'a|web/test.html.messages':
|
| - 'warning: Only one "application/dart" script tag per document is'
|
| - ' allowed. (web/test.html 1 0)',
|
| - });
|
| + }, [
|
| + 'warning: Only one "application/dart" script tag per document is'
|
| + ' allowed. (web/test.html 1 0)',
|
| + ]);
|
|
|
| _testLinter('two top-level tags, non entrypoint', {
|
| 'a|lib/test.html': '<!DOCTYPE html><html>'
|
| @@ -70,11 +64,10 @@ void main() {
|
| '<script type="application/dart" src="b.dart">'
|
| '</script>'
|
| '<script src="packages/browser/dart.js"></script>'
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: Only one "application/dart" script tag per document is'
|
| - ' allowed. (lib/test.html 1 0)',
|
| - });
|
| + }, [
|
| + 'warning: Only one "application/dart" script tag per document is'
|
| + ' allowed. (lib/test.html 1 0)',
|
| + ]);
|
|
|
| _testLinter('tags inside elements', {
|
| 'a|web/test.html': '<!DOCTYPE html><html>'
|
| @@ -85,28 +78,24 @@ void main() {
|
| '<script type="application/dart" src="b.dart">'
|
| '</script>'
|
| '<script src="packages/browser/dart.js"></script>'
|
| - }, {
|
| - 'a|web/test.html.messages':
|
| - 'warning: Only one "application/dart" script tag per document is'
|
| - ' allowed. (web/test.html 1 0)',
|
| - });
|
| + }, [
|
| + 'warning: Only one "application/dart" script tag per document is'
|
| + ' allowed. (web/test.html 1 0)',
|
| + ]);
|
| });
|
|
|
| group('doctype warning', () {
|
| _testLinter('in web', {
|
| 'a|web/test.html': '<html></html>',
|
| - }, {
|
| - 'a|web/test.html.messages':
|
| - 'warning: Unexpected start tag (html). Expected DOCTYPE. '
|
| - '(web/test.html 0 0)\n'
|
| - 'error: $USE_INIT_DART',
|
| - });
|
| + }, [
|
| + 'warning: Unexpected start tag (html). Expected DOCTYPE. '
|
| + '(web/test.html 0 0)',
|
| + 'error: $USE_INIT_DART',
|
| + ]);
|
|
|
| _testLinter('in lib', {
|
| 'a|lib/test.html': '<html></html>',
|
| - }, {
|
| - 'a|lib/test.html.messages': '',
|
| - });
|
| + }, []);
|
| });
|
|
|
| group('duplicate polymer-elements,', () {
|
| @@ -115,13 +104,12 @@ void main() {
|
| <polymer-element name="x-a"></polymer-element>
|
| <polymer-element name="x-a"></polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: duplicate definition for custom tag "x-a". '
|
| - '(lib/test.html 1 0)\n'
|
| - 'warning: duplicate definition for custom tag "x-a" '
|
| - '(second definition). (lib/test.html 2 0)'
|
| - });
|
| + }, [
|
| + 'warning: duplicate definition for custom tag "x-a". '
|
| + '(lib/test.html 1 0)',
|
| + 'warning: duplicate definition for custom tag "x-a" '
|
| + '(second definition). (lib/test.html 2 0)'
|
| + ]);
|
|
|
| _testLinter('other file', {
|
| 'a|lib/b.html': '''<html>
|
| @@ -131,24 +119,22 @@ void main() {
|
| <link rel="import" href="b.html">
|
| <polymer-element name="x-a"></polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: duplicate definition for custom tag "x-a". '
|
| - '(lib/b.html 1 0)\n'
|
| - 'warning: duplicate definition for custom tag "x-a" '
|
| - '(second definition). (lib/test.html 2 0)'
|
| - });
|
| + }, [
|
| + 'warning: duplicate definition for custom tag "x-a". '
|
| + '(lib/b.html 1 0)',
|
| + 'warning: duplicate definition for custom tag "x-a" '
|
| + '(second definition). (lib/test.html 2 0)'
|
| + ]);
|
|
|
| _testLinter('non existing file', {
|
| 'a|lib/test.html': '''<html>
|
| <link rel="import" href="b.html">
|
| <polymer-element name="x-a"></polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'error: couldn\'t find imported asset "lib/b.html" in package '
|
| - '"a". (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'error: couldn\'t find imported asset "lib/b.html" in package '
|
| + '"a". (lib/test.html 1 0)'
|
| + ]);
|
|
|
| _testLinter('other package', {
|
| 'b|lib/b.html': '''<html>
|
| @@ -158,13 +144,12 @@ void main() {
|
| <link rel="import" href="../../packages/b/b.html">
|
| <polymer-element name="x-a"></polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: duplicate definition for custom tag "x-a". '
|
| - '(package:b/b.html 1 0)\n'
|
| - 'warning: duplicate definition for custom tag "x-a" '
|
| - '(second definition). (lib/test.html 2 0)'
|
| - });
|
| + }, [
|
| + 'warning: duplicate definition for custom tag "x-a". '
|
| + '(package:b/b.html 1 0)',
|
| + 'warning: duplicate definition for custom tag "x-a" '
|
| + '(second definition). (lib/test.html 2 0)'
|
| + ]);
|
| });
|
|
|
| _testLinter('bad link-rel tag (href missing)', {
|
| @@ -174,22 +159,20 @@ void main() {
|
| <link rel="foo">
|
| <link rel="import" href="">
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: link rel="import" missing href. (lib/test.html 1 0)\n'
|
| - 'warning: link rel="stylesheet" missing href. (lib/test.html 2 0)\n'
|
| - 'warning: link rel="import" missing href. (lib/test.html 4 0)'
|
| - });
|
| + }, [
|
| + 'warning: link rel="import" missing href. (lib/test.html 1 0)',
|
| + 'warning: link rel="stylesheet" missing href. (lib/test.html 2 0)',
|
| + 'warning: link rel="import" missing href. (lib/test.html 4 0)'
|
| + ]);
|
|
|
| _testLinter('<element> is not supported', {
|
| 'a|lib/test.html': '''<html>
|
| <element name="x-a"></element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: <element> elements are not supported, use <polymer-element>'
|
| - ' instead (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: <element> elements are not supported, use <polymer-element>'
|
| + ' instead (lib/test.html 1 0)'
|
| + ]);
|
|
|
| _testLinter('do not nest <polymer-element>', {
|
| 'a|lib/test.html': '''<html>
|
| @@ -199,51 +182,44 @@ void main() {
|
| </div></template>
|
| </polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'error: Nested polymer element definitions are not allowed.'
|
| - ' (lib/test.html 3 4)'
|
| - });
|
| + }, [
|
| + 'error: Nested polymer element definitions are not allowed.'
|
| + ' (lib/test.html 3 4)'
|
| + ]);
|
|
|
| _testLinter('need a name for <polymer-element>', {
|
| 'a|lib/test.html': '''<html>
|
| <polymer-element></polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'error: Missing tag name of the custom element. Please include an '
|
| - 'attribute like \'name="your-tag-name"\'. (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'error: Missing tag name of the custom element. Please include an '
|
| + 'attribute like \'name="your-tag-name"\'. (lib/test.html 1 0)'
|
| + ]);
|
|
|
| _testLinter('name for <polymer-element> should have dashes', {
|
| 'a|lib/test.html': '''<html>
|
| <polymer-element name="a"></polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'error: Invalid name "a". Custom element names must have at least one'
|
| - ' dash and can\'t be any of the following names: annotation-xml, '
|
| - 'color-profile, font-face, font-face-src, font-face-uri, '
|
| - 'font-face-format, font-face-name, missing-glyph. (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'error: Invalid name "a". Custom element names must have at least one'
|
| + ' dash and can\'t be any of the following names: annotation-xml, '
|
| + 'color-profile, font-face, font-face-src, font-face-uri, '
|
| + 'font-face-format, font-face-name, missing-glyph. (lib/test.html 1 0)'
|
| + ]);
|
|
|
| _testLinter('extend is a valid element or existing tag', {
|
| 'a|lib/test.html': '''<html>
|
| <polymer-element name="x-a" extends="li"></polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - });
|
| + }, []);
|
|
|
| _testLinter('extend is a valid element or existing tag', {
|
| 'a|lib/test.html': '''<html>
|
| <polymer-element name="x-a" extends="x-b"></polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - 'warning: custom element with name "x-b" not found. '
|
| - '(lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: custom element with name "x-b" not found. (lib/test.html 1 0)'
|
| + ]);
|
|
|
|
|
| group('script type matches code', () {
|
| @@ -251,11 +227,10 @@ void main() {
|
| 'a|lib/test.html': '''<html>
|
| <script src="foo.dart"></script>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: Wrong script type, expected type="application/dart".'
|
| - ' (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: Wrong script type, expected type="application/dart".'
|
| + ' (lib/test.html 1 0)'
|
| + ]);
|
|
|
| _testLinter('in polymer-element, .dart url', {
|
| 'a|lib/test.html': '''<html>
|
| @@ -263,11 +238,10 @@ void main() {
|
| <script src="foo.dart"></script>
|
| </polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: Wrong script type, expected type="application/dart".'
|
| - ' (lib/test.html 2 0)'
|
| - });
|
| + }, [
|
| + 'warning: Wrong script type, expected type="application/dart".'
|
| + ' (lib/test.html 2 0)'
|
| + ]);
|
|
|
| _testLinter('in polymer-element, .js url', {
|
| 'a|lib/test.html': '''<html>
|
| @@ -275,9 +249,7 @@ void main() {
|
| <script src="foo.js"></script>
|
| </polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - });
|
| + }, []);
|
|
|
| _testLinter('in polymer-element, inlined', {
|
| 'a|lib/test.html': '''<html>
|
| @@ -285,126 +257,113 @@ void main() {
|
| <script>foo...</script>
|
| </polymer-element>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: script tag in polymer element with no type will '
|
| - 'be treated as JavaScript. Did you forget type="application/dart"?'
|
| - ' (lib/test.html 2 0)'
|
| - });
|
| + }, [
|
| + 'warning: script tag in polymer element with no type will '
|
| + 'be treated as JavaScript. Did you forget type="application/dart"?'
|
| + ' (lib/test.html 2 0)'
|
| + ]);
|
|
|
| _testLinter('top-level, dart type & .dart url', {
|
| 'a|lib/test.html': '''<html>
|
| <script type="application/dart" src="foo.dart"></script>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - });
|
| + }, []);
|
|
|
| _testLinter('top-level, dart type & .js url', {
|
| 'a|lib/test.html': '''<html>
|
| <script type="application/dart" src="foo.js"></script>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: "application/dart" scripts should use the .dart file '
|
| - 'extension. (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: "application/dart" scripts should use the .dart file '
|
| + 'extension. (lib/test.html 1 0)'
|
| + ]);
|
| });
|
|
|
| _testLinter('script tags should have only src url or inline code', {
|
| 'a|lib/test.html': '''<html>
|
| <script type="application/dart" src="foo.dart">more</script>
|
| </html>'''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: script tag has "src" attribute and also has script text. '
|
| - '(lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: script tag has "src" attribute and also has script text. '
|
| + '(lib/test.html 1 0)'
|
| + ]);
|
|
|
| group('event handlers', () {
|
| _testLinter('onfoo is not polymer', {
|
| 'a|lib/test.html': '''<html><body>
|
| <div onfoo="something"></div>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: Event handler "onfoo" will be interpreted as an inline '
|
| - 'JavaScript event handler. Use the form '
|
| - 'on-event-name="handlerName" if you want a Dart handler '
|
| - 'that will automatically update the UI based on model changes. '
|
| - '(lib/test.html 1 5)'
|
| - });
|
| + }, [
|
| + 'warning: Event handler "onfoo" will be interpreted as an inline '
|
| + 'JavaScript event handler. Use the form '
|
| + 'on-event-name="handlerName" if you want a Dart handler '
|
| + 'that will automatically update the UI based on model changes. '
|
| + '(lib/test.html 1 5)'
|
| + ]);
|
|
|
| _testLinter('on-foo is only supported in polymer elements', {
|
| 'a|lib/test.html': '''<html><body>
|
| <div on-foo="something"></div>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: Inline event handlers are only supported inside '
|
| - 'declarations of <polymer-element>. '
|
| - '(lib/test.html 1 5)'
|
| - });
|
| + }, [
|
| + 'warning: Inline event handlers are only supported inside '
|
| + 'declarations of <polymer-element>. '
|
| + '(lib/test.html 1 5)'
|
| + ]);
|
|
|
| _testLinter('on-foo is not an expression', {
|
| 'a|lib/test.html': '''<html><body>
|
| <polymer-element name="x-a"><div on-foo="bar()"></div>
|
| </polymer-element>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: Invalid event handler body "bar()". Declare a method '
|
| - 'in your custom element "void handlerName(event, detail, target)" '
|
| - 'and use the form on-foo="handlerName". '
|
| - '(lib/test.html 1 33)'
|
| - });
|
| + }, [
|
| + 'warning: Invalid event handler body "bar()". Declare a method '
|
| + 'in your custom element "void handlerName(event, detail, target)" '
|
| + 'and use the form on-foo="handlerName". '
|
| + '(lib/test.html 1 33)'
|
| + ]);
|
|
|
| _testLinter('on-foo-bar is supported as a custom event name', {
|
| 'a|lib/test.html': '''<html><body>
|
| <polymer-element name="x-a"><div on-foo-bar="quux"></div>
|
| </polymer-element>
|
| '''.replaceAll(' ', ''),
|
| - }, {});
|
| + }, []);
|
| });
|
|
|
| group('using custom tags', () {
|
| _testLinter('tag exists (x-tag)', {
|
| 'a|lib/test.html': '<x-foo></x-foo>',
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: definition for Polymer element with tag name "x-foo" not '
|
| - 'found. (lib/test.html 0 0)'
|
| - });
|
| + }, [
|
| + 'warning: definition for Polymer element with tag name "x-foo" not '
|
| + 'found. (lib/test.html 0 0)'
|
| + ]);
|
|
|
| _testLinter('tag exists (type extension)', {
|
| 'a|lib/test.html': '<div is="x-foo"></div>',
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: definition for Polymer element with tag name "x-foo" not '
|
| - 'found. (lib/test.html 0 0)'
|
| - });
|
| + }, [
|
| + 'warning: definition for Polymer element with tag name "x-foo" not '
|
| + 'found. (lib/test.html 0 0)'
|
| + ]);
|
|
|
| _testLinter('used correctly (no base tag)', {
|
| 'a|lib/test.html': '''
|
| <polymer-element name="x-a"></polymer-element>
|
| <x-a></x-a>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - });
|
| + }, []);
|
|
|
| _testLinter('used incorrectly (no base tag)', {
|
| 'a|lib/test.html': '''
|
| <polymer-element name="x-a"></polymer-element>
|
| <div is="x-a"></div>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: custom element "x-a" doesn\'t declare any type '
|
| - 'extensions. To fix this, either rewrite this tag as '
|
| - '<x-a> or add \'extends="div"\' to '
|
| - 'the custom element declaration. (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: custom element "x-a" doesn\'t declare any type '
|
| + 'extensions. To fix this, either rewrite this tag as '
|
| + '<x-a> or add \'extends="div"\' to '
|
| + 'the custom element declaration. (lib/test.html 1 0)'
|
| + ]);
|
|
|
| _testLinter('used incorrectly, imported def (no base tag)', {
|
| 'a|lib/b.html': '<polymer-element name="x-a"></polymer-element>',
|
| @@ -412,13 +371,12 @@ void main() {
|
| <link rel="import" href="b.html">
|
| <div is="x-a"></div>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: custom element "x-a" doesn\'t declare any type '
|
| - 'extensions. To fix this, either rewrite this tag as '
|
| - '<x-a> or add \'extends="div"\' to '
|
| - 'the custom element declaration. (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: custom element "x-a" doesn\'t declare any type '
|
| + 'extensions. To fix this, either rewrite this tag as '
|
| + '<x-a> or add \'extends="div"\' to '
|
| + 'the custom element declaration. (lib/test.html 1 0)'
|
| + ]);
|
|
|
| _testLinter('used correctly (base tag)', {
|
| 'a|lib/b.html': '''
|
| @@ -429,9 +387,7 @@ void main() {
|
| <link rel="import" href="b.html">
|
| <div is="x-a"></div>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - });
|
| + }, []);
|
|
|
| _testLinter('used incorrectly (missing base tag)', {
|
| 'a|lib/b.html': '''
|
| @@ -442,13 +398,12 @@ void main() {
|
| <link rel="import" href="b.html">
|
| <x-a></x-a>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - 'warning: custom element "x-a" extends from "div", but this tag '
|
| - 'will not include the default properties of "div". To fix this, '
|
| - 'either write this tag as <div is="x-a"> or remove the "extends" '
|
| - 'attribute from the custom element declaration. (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: custom element "x-a" extends from "div", but this tag '
|
| + 'will not include the default properties of "div". To fix this, '
|
| + 'either write this tag as <div is="x-a"> or remove the "extends" '
|
| + 'attribute from the custom element declaration. (lib/test.html 1 0)'
|
| + ]);
|
|
|
| _testLinter('used incorrectly (wrong base tag)', {
|
| 'a|lib/b.html': '''
|
| @@ -459,11 +414,10 @@ void main() {
|
| <link rel="import" href="b.html">
|
| <span is="x-a"></span>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - 'warning: custom element "x-a" extends from "div". Did you mean '
|
| - 'to write <div is="x-a">? (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: custom element "x-a" extends from "div". Did you mean '
|
| + 'to write <div is="x-a">? (lib/test.html 1 0)'
|
| + ]);
|
|
|
| _testLinter('used incorrectly (wrong base tag, transitive)', {
|
| 'a|lib/c.html': '''
|
| @@ -481,11 +435,10 @@ void main() {
|
| <link rel="import" href="b.html">
|
| <span is="x-a"></span>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages': ''
|
| - 'warning: custom element "x-a" extends from "li". Did you mean '
|
| - 'to write <li is="x-a">? (lib/test.html 1 0)'
|
| - });
|
| + }, [
|
| + 'warning: custom element "x-a" extends from "li". Did you mean '
|
| + 'to write <li is="x-a">? (lib/test.html 1 0)'
|
| + ]);
|
| });
|
|
|
| group('custom attributes', () {
|
| @@ -494,32 +447,17 @@ void main() {
|
| <polymer-element name="x-a" attributes="foo-bar">
|
| </polymer-element>
|
| '''.replaceAll(' ', ''),
|
| - }, {
|
| - 'a|lib/test.html.messages':
|
| - 'warning: PolymerElement no longer recognizes attribute names with '
|
| - 'dashes such as "foo-bar". Use "fooBar" or "foobar" instead (both '
|
| - 'forms are equivalent in HTML). (lib/test.html 1 28)'
|
| - });
|
| + }, [
|
| + 'warning: PolymerElement no longer recognizes attribute names with '
|
| + 'dashes such as "foo-bar". Use "fooBar" or "foobar" instead (both '
|
| + 'forms are equivalent in HTML). (lib/test.html 1 28)'
|
| + ]);
|
| });
|
| }
|
|
|
| -_testLinter(String name, Map inputFiles, Map outputMessages) {
|
| - var linter = new Linter(new TransformOptions(), _testFormatter);
|
| +_testLinter(String name, Map inputFiles, List outputMessages) {
|
| + var linter = new Linter(new TransformOptions());
|
| var outputFiles = {};
|
| inputFiles.forEach((k, v) => outputFiles[k] = v);
|
| - outputMessages.forEach((k, v) => outputFiles[k] = v);
|
| - var keys = inputFiles.keys.toSet();
|
| - keys.retainAll(outputMessages.keys);
|
| - expect(keys, isEmpty);
|
| - testPhases(name, [[linter]], inputFiles, outputFiles);
|
| -}
|
| -
|
| -
|
| -_testFormatter(String kind, String message, Span span) {
|
| - var formattedMessage = '$kind: $message';
|
| - if (span != null) {
|
| - formattedMessage = '$formattedMessage '
|
| - '(${span.sourceUrl} ${span.start.line} ${span.start.column})';
|
| - }
|
| - return formattedMessage;
|
| + testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages);
|
| }
|
|
|