| 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 'package:polymer/src/build/common.dart'; | 7 import 'package:polymer/src/build/common.dart'; |
| 8 import 'package:polymer/src/build/linter.dart'; | 8 import 'package:polymer/src/build/linter.dart'; |
| 9 import 'package:unittest/unittest.dart'; | 9 import 'package:unittest/unittest.dart'; |
| 10 | 10 |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 ]); | 316 ]); |
| 317 | 317 |
| 318 group('event handlers', () { | 318 group('event handlers', () { |
| 319 _testLinter('onfoo is not polymer', { | 319 _testLinter('onfoo is not polymer', { |
| 320 'a|lib/test.html': '''<html><body> | 320 'a|lib/test.html': '''<html><body> |
| 321 <div onfoo="something"></div> | 321 <div onfoo="something"></div> |
| 322 '''.replaceAll(' ', ''), | 322 '''.replaceAll(' ', ''), |
| 323 }, [ | 323 }, [ |
| 324 'warning: Event handler "onfoo" will be interpreted as an inline ' | 324 'warning: Event handler "onfoo" will be interpreted as an inline ' |
| 325 'JavaScript event handler. Use the form ' | 325 'JavaScript event handler. Use the form ' |
| 326 'on-event-name="handlerName" if you want a Dart handler ' | 326 'on-event-name="{{handlerName}}" if you want a Dart handler ' |
| 327 'that will automatically update the UI based on model changes. ' | 327 'that will automatically update the UI based on model changes. ' |
| 328 '(lib/test.html 1 5)' | 328 '(lib/test.html 1 5)' |
| 329 ]); | 329 ]); |
| 330 | 330 |
| 331 _testLinter('on-foo is only supported in polymer elements', { | 331 _testLinter('on-foo is only supported in polymer elements', { |
| 332 'a|lib/test.html': '''<html><body> | 332 'a|lib/test.html': '''<html><body> |
| 333 <div on-foo="something"></div> | 333 <div on-foo="something"></div> |
| 334 '''.replaceAll(' ', ''), | 334 '''.replaceAll(' ', ''), |
| 335 }, [ | 335 }, [ |
| 336 'warning: Inline event handlers are only supported inside ' | 336 'warning: Inline event handlers are only supported inside ' |
| 337 'declarations of <polymer-element>. ' | 337 'declarations of <polymer-element>. ' |
| 338 '(lib/test.html 1 5)' | 338 '(lib/test.html 1 5)' |
| 339 ]); | 339 ]); |
| 340 | 340 |
| 341 _testLinter('on-foo is not an expression', { | 341 _testLinter('on-foo is not an expression', { |
| 342 'a|lib/test.html': '''<html><body> | 342 'a|lib/test.html': '''<html><body> |
| 343 <polymer-element name="x-a"><div on-foo="bar()"></div> | 343 <polymer-element name="x-a"><div on-foo="{{bar()}}"></div> |
| 344 </polymer-element> | 344 </polymer-element> |
| 345 '''.replaceAll(' ', ''), | 345 '''.replaceAll(' ', ''), |
| 346 }, [ | 346 }, [ |
| 347 'warning: Invalid event handler body "bar()". Declare a method ' | 347 'warning: Invalid event handler body "{{bar()}}". Declare a method ' |
| 348 'in your custom element "void handlerName(event, detail, target)" ' | 348 'in your custom element "void handlerName(event, detail, target)" ' |
| 349 'and use the form on-foo="handlerName". ' | 349 'and use the form on-foo="{{handlerName}}". ' |
| 350 '(lib/test.html 1 33)' |
| 351 ]); |
| 352 |
| 353 _testLinter('on-foo can\'t be empty', { |
| 354 'a|lib/test.html': '''<html><body> |
| 355 <polymer-element name="x-a"><div on-foo="{{}}"></div> |
| 356 </polymer-element> |
| 357 '''.replaceAll(' ', ''), |
| 358 }, [ |
| 359 'warning: Invalid event handler body "{{}}". Declare a method ' |
| 360 'in your custom element "void handlerName(event, detail, target)" ' |
| 361 'and use the form on-foo="{{handlerName}}". ' |
| 362 '(lib/test.html 1 33)' |
| 363 ]); |
| 364 |
| 365 _testLinter('on-foo can\'t be empty', { |
| 366 'a|lib/test.html': '''<html><body> |
| 367 <polymer-element name="x-a"><div on-foo="{{ }}"></div> |
| 368 </polymer-element> |
| 369 '''.replaceAll(' ', ''), |
| 370 }, [ |
| 371 'warning: Invalid event handler body "{{ }}". Declare a method ' |
| 372 'in your custom element "void handlerName(event, detail, target)" ' |
| 373 'and use the form on-foo="{{handlerName}}". ' |
| 350 '(lib/test.html 1 33)' | 374 '(lib/test.html 1 33)' |
| 351 ]); | 375 ]); |
| 352 | 376 |
| 353 _testLinter('on-foo-bar is supported as a custom event name', { | 377 _testLinter('on-foo-bar is supported as a custom event name', { |
| 354 'a|lib/test.html': '''<html><body> | 378 'a|lib/test.html': '''<html><body> |
| 355 <polymer-element name="x-a"><div on-foo-bar="quux"></div> | 379 <polymer-element name="x-a"><div on-foo-bar="{{quux}}"></div> |
| 356 </polymer-element> | 380 </polymer-element> |
| 357 '''.replaceAll(' ', ''), | 381 '''.replaceAll(' ', ''), |
| 358 }, []); | 382 }, []); |
| 359 }); | 383 }); |
| 360 | 384 |
| 361 group('using custom tags', () { | 385 group('using custom tags', () { |
| 362 _testLinter('tag exists (x-tag)', { | 386 _testLinter('tag exists (x-tag)', { |
| 363 'a|lib/test.html': '<x-foo></x-foo>', | 387 'a|lib/test.html': '<x-foo></x-foo>', |
| 364 }, [ | 388 }, [ |
| 365 'warning: definition for Polymer element with tag name "x-foo" not ' | 389 'warning: definition for Polymer element with tag name "x-foo" not ' |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 | 515 |
| 492 _testLinter(String name, Map inputFiles, List outputMessages, | 516 _testLinter(String name, Map inputFiles, List outputMessages, |
| 493 [bool solo = false]) { | 517 [bool solo = false]) { |
| 494 var linter = new Linter(new TransformOptions()); | 518 var linter = new Linter(new TransformOptions()); |
| 495 var outputFiles = {}; | 519 var outputFiles = {}; |
| 496 if (outputMessages.every((m) => m.startsWith('warning:'))) { | 520 if (outputMessages.every((m) => m.startsWith('warning:'))) { |
| 497 inputFiles.forEach((k, v) => outputFiles[k] = v); | 521 inputFiles.forEach((k, v) => outputFiles[k] = v); |
| 498 } | 522 } |
| 499 testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages, solo); | 523 testPhases(name, [[linter]], inputFiles, outputFiles, outputMessages, solo); |
| 500 } | 524 } |
| OLD | NEW |