Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: pkg/polymer/test/build/linter_test.dart

Issue 513023002: Step one towards stable error messages with details: (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698