no-unknown-property.js 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /**
  2. * @fileoverview Tests for no-unknown-property
  3. * @author Yannick Croissant
  4. */
  5. 'use strict';
  6. // -----------------------------------------------------------------------------
  7. // Requirements
  8. // -----------------------------------------------------------------------------
  9. const rule = require('../../../lib/rules/no-unknown-property');
  10. const RuleTester = require('eslint').RuleTester;
  11. const parserOptions = {
  12. ecmaVersion: 2018,
  13. sourceType: 'module',
  14. ecmaFeatures: {
  15. jsx: true
  16. }
  17. };
  18. // -----------------------------------------------------------------------------
  19. // Tests
  20. // -----------------------------------------------------------------------------
  21. const ruleTester = new RuleTester({parserOptions});
  22. ruleTester.run('no-unknown-property', rule, {
  23. valid: [
  24. {code: '<App class="bar" />;'},
  25. {code: '<App for="bar" />;'},
  26. {code: '<App accept-charset="bar" />;'},
  27. {code: '<App http-equiv="bar" />;'},
  28. {code: '<App xlink:href="bar" />;'},
  29. {code: '<App clip-path="bar" />;'},
  30. {code: '<div className="bar"></div>;'},
  31. {code: '<div data-foo="bar"></div>;'},
  32. {code: '<div class="foo" is="my-elem"></div>;'},
  33. {code: '<div {...this.props} class="foo" is="my-elem"></div>;'},
  34. {code: '<atom-panel class="foo"></atom-panel>;'}, {
  35. code: '<div class="bar"></div>;',
  36. options: [{ignore: ['class']}]
  37. },
  38. {code: '<script crossOrigin />'},
  39. {code: '<audio crossOrigin />'}
  40. ],
  41. invalid: [{
  42. code: '<div class="bar"></div>;',
  43. output: '<div className="bar"></div>;',
  44. errors: [{message: 'Unknown property \'class\' found, use \'className\' instead'}]
  45. }, {
  46. code: '<div for="bar"></div>;',
  47. output: '<div htmlFor="bar"></div>;',
  48. errors: [{message: 'Unknown property \'for\' found, use \'htmlFor\' instead'}]
  49. }, {
  50. code: '<div accept-charset="bar"></div>;',
  51. output: '<div acceptCharset="bar"></div>;',
  52. errors: [{message: 'Unknown property \'accept-charset\' found, use \'acceptCharset\' instead'}]
  53. }, {
  54. code: '<div http-equiv="bar"></div>;',
  55. output: '<div httpEquiv="bar"></div>;',
  56. errors: [{message: 'Unknown property \'http-equiv\' found, use \'httpEquiv\' instead'}]
  57. }, {
  58. code: '<div accesskey="bar"></div>;',
  59. output: '<div accessKey="bar"></div>;',
  60. errors: [{message: 'Unknown property \'accesskey\' found, use \'accessKey\' instead'}]
  61. }, {
  62. code: '<div onclick="bar"></div>;',
  63. output: '<div onClick="bar"></div>;',
  64. errors: [{message: 'Unknown property \'onclick\' found, use \'onClick\' instead'}]
  65. }, {
  66. code: '<div onmousedown="bar"></div>;',
  67. output: '<div onMouseDown="bar"></div>;',
  68. errors: [{message: 'Unknown property \'onmousedown\' found, use \'onMouseDown\' instead'}]
  69. }, {
  70. code: '<use xlink:href="bar" />;',
  71. output: '<use xlinkHref="bar" />;',
  72. errors: [{message: 'Unknown property \'xlink:href\' found, use \'xlinkHref\' instead'}]
  73. }, {
  74. code: '<rect clip-path="bar" />;',
  75. output: '<rect clipPath="bar" />;',
  76. errors: [{message: 'Unknown property \'clip-path\' found, use \'clipPath\' instead'}]
  77. }, {
  78. code: '<script crossorigin />',
  79. errors: [{message: 'Unknown property \'crossorigin\' found, use \'crossOrigin\' instead'}]
  80. }, {
  81. code: '<div crossorigin />',
  82. errors: [{message: 'Unknown property \'crossorigin\' found, use \'crossOrigin\' instead'}]
  83. }, {
  84. code: '<div crossOrigin />',
  85. errors: [{message: 'Invalid property \'crossOrigin\' found on tag \'div\', but it is only allowed on: script, img, video, audio, link'}]
  86. }]
  87. });