no-redundant-should-component-update.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /**
  2. * @fileoverview Tests for no-redundant-should-component-update
  3. */
  4. 'use strict';
  5. // -----------------------------------------------------------------------------
  6. // Requirements
  7. // -----------------------------------------------------------------------------
  8. const rule = require('../../../lib/rules/no-redundant-should-component-update');
  9. const RuleTester = require('eslint').RuleTester;
  10. const parserOptions = {
  11. ecmaVersion: 2018,
  12. ecmaFeatures: {
  13. jsx: true
  14. }
  15. };
  16. function errorMessage(node) {
  17. return `${node} does not need shouldComponentUpdate when extending React.PureComponent.`;
  18. }
  19. // -----------------------------------------------------------------------------
  20. // Tests
  21. // -----------------------------------------------------------------------------
  22. const ruleTester = new RuleTester();
  23. ruleTester.run('no-redundant-should-component-update', rule, {
  24. valid: [
  25. {
  26. code: `
  27. class Foo extends React.Component {
  28. shouldComponentUpdate() {
  29. return true;
  30. }
  31. }
  32. `,
  33. parserOptions: parserOptions
  34. },
  35. {
  36. code: `
  37. class Foo extends React.Component {
  38. shouldComponentUpdate = () => {
  39. return true;
  40. }
  41. }
  42. `,
  43. parser: 'babel-eslint',
  44. parserOptions: parserOptions
  45. },
  46. {
  47. code: `
  48. class Foo extends React.Component {
  49. shouldComponentUpdate() {
  50. return true;
  51. }
  52. }
  53. `,
  54. parserOptions: parserOptions
  55. },
  56. {
  57. code: `
  58. function Foo() {
  59. return class Bar extends React.Component {
  60. shouldComponentUpdate() {
  61. return true;
  62. }
  63. };
  64. }
  65. `,
  66. parserOptions: parserOptions
  67. }
  68. ],
  69. invalid: [
  70. {
  71. code: `
  72. class Foo extends React.PureComponent {
  73. shouldComponentUpdate() {
  74. return true;
  75. }
  76. }
  77. `,
  78. errors: [{message: errorMessage('Foo')}],
  79. parserOptions: parserOptions
  80. },
  81. {
  82. code: `
  83. class Foo extends PureComponent {
  84. shouldComponentUpdate() {
  85. return true;
  86. }
  87. }
  88. `,
  89. errors: [{message: errorMessage('Foo')}],
  90. parserOptions: parserOptions
  91. },
  92. {
  93. code: `
  94. class Foo extends React.PureComponent {
  95. shouldComponentUpdate = () => {
  96. return true;
  97. }
  98. }
  99. `,
  100. errors: [{message: errorMessage('Foo')}],
  101. parser: 'babel-eslint',
  102. parserOptions: parserOptions
  103. },
  104. {
  105. code: `
  106. function Foo() {
  107. return class Bar extends React.PureComponent {
  108. shouldComponentUpdate() {
  109. return true;
  110. }
  111. };
  112. }
  113. `,
  114. errors: [{message: errorMessage('Bar')}],
  115. parserOptions: parserOptions
  116. },
  117. {
  118. code: `
  119. function Foo() {
  120. return class Bar extends PureComponent {
  121. shouldComponentUpdate() {
  122. return true;
  123. }
  124. };
  125. }
  126. `,
  127. errors: [{message: errorMessage('Bar')}],
  128. parserOptions: parserOptions
  129. },
  130. {
  131. code: `
  132. var Foo = class extends PureComponent {
  133. shouldComponentUpdate() {
  134. return true;
  135. }
  136. }
  137. `,
  138. errors: [{message: errorMessage('Foo')}],
  139. parserOptions: parserOptions
  140. }
  141. ]
  142. });