jsx-no-comment-textnodes.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /**
  2. * @fileoverview Tests for jsx-no-comment-textnodes
  3. * @author Ben Vinegar
  4. */
  5. 'use strict';
  6. // ------------------------------------------------------------------------------
  7. // Requirements
  8. // ------------------------------------------------------------------------------
  9. const rule = require('../../../lib/rules/jsx-no-comment-textnodes');
  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('jsx-no-comment-textnodes', rule, {
  23. valid: [
  24. {
  25. code: `
  26. class Comp1 extends Component {
  27. render() {
  28. return (
  29. <div>
  30. {/* valid */}
  31. </div>
  32. );
  33. }
  34. }
  35. `,
  36. parser: 'babel-eslint'
  37. }, {
  38. code: `
  39. class Comp1 extends Component {
  40. render() {
  41. return (<div>{/* valid */}</div>);
  42. }
  43. }
  44. `,
  45. parser: 'babel-eslint'
  46. }, {
  47. code: `
  48. class Comp1 extends Component {
  49. render() {
  50. const bar = (<div>{/* valid */}</div>);
  51. return bar;
  52. }
  53. }
  54. `,
  55. parser: 'babel-eslint'
  56. }, {
  57. code: `
  58. var Hello = createReactClass({
  59. foo: (<div>{/* valid */}</div>),
  60. render() {
  61. return this.foo;
  62. },
  63. });
  64. `,
  65. parser: 'babel-eslint'
  66. }, {
  67. code: `
  68. class Comp1 extends Component {
  69. render() {
  70. return (
  71. <div>
  72. {/* valid */}
  73. {/* valid 2 */}
  74. {/* valid 3 */}
  75. </div>
  76. );
  77. }
  78. }
  79. `,
  80. parser: 'babel-eslint'
  81. }, {
  82. code: `
  83. class Comp1 extends Component {
  84. render() {
  85. return (
  86. <div>
  87. </div>
  88. );
  89. }
  90. }
  91. `,
  92. parser: 'babel-eslint'
  93. }, {
  94. code: `
  95. var foo = require('foo');
  96. `,
  97. parser: 'babel-eslint'
  98. }, {
  99. code: `
  100. <Foo bar='test'>
  101. {/* valid */}
  102. </Foo>
  103. `,
  104. parser: 'babel-eslint'
  105. },
  106. {
  107. code: `
  108. <strong>
  109. &nbsp;https://www.example.com/attachment/download/1
  110. </strong>
  111. `,
  112. parser: 'babel-eslint'
  113. },
  114. // inside element declarations
  115. {
  116. code: `
  117. <Foo /* valid */ placeholder={'foo'}/>
  118. `,
  119. parser: 'babel-eslint'
  120. },
  121. {
  122. code: `
  123. <Foo title={'foo' /* valid */}/>
  124. `,
  125. parser: 'babel-eslint'
  126. },
  127. {
  128. code: '<pre>&#x2F;&#x2F; TODO: Write perfect code</pre>'
  129. },
  130. {
  131. code: '<pre>&#x2F;&#x2F; TODO: Write perfect code</pre>',
  132. parser: 'babel-eslint'
  133. },
  134. {
  135. code: '<pre>&#x2F;&#42; TODO: Write perfect code &#42;&#x2F;</pre>'
  136. },
  137. {
  138. code: '<pre>&#x2F;&#42; TODO: Write perfect code &#42;&#x2F;</pre>',
  139. parser: 'babel-eslint'
  140. }
  141. ],
  142. invalid: [
  143. {
  144. code: `
  145. class Comp1 extends Component {
  146. render() {
  147. return (<div>// invalid</div>);
  148. }
  149. }
  150. `,
  151. parser: 'babel-eslint',
  152. errors: [{message: 'Comments inside children section of tag should be placed inside braces'}]
  153. }, {
  154. code: `
  155. class Comp1 extends Component {
  156. render() {
  157. return (<div>/* invalid */</div>);
  158. }
  159. }
  160. `,
  161. parser: 'babel-eslint',
  162. errors: [{message: 'Comments inside children section of tag should be placed inside braces'}]
  163. }, {
  164. code: `
  165. class Comp1 extends Component {
  166. render() {
  167. return (
  168. <div>
  169. // invalid
  170. </div>
  171. );
  172. }
  173. }
  174. `,
  175. parser: 'babel-eslint',
  176. errors: [{message: 'Comments inside children section of tag should be placed inside braces'}]
  177. }, {
  178. code: `
  179. class Comp1 extends Component {
  180. render() {
  181. return (
  182. <div>
  183. asdjfl
  184. /* invalid */
  185. foo
  186. </div>
  187. );
  188. }
  189. }
  190. `,
  191. parser: 'babel-eslint',
  192. errors: [{message: 'Comments inside children section of tag should be placed inside braces'}]
  193. }, {
  194. code: `
  195. class Comp1 extends Component {
  196. render() {
  197. return (
  198. <div>
  199. {'asdjfl'}
  200. // invalid
  201. {'foo'}
  202. </div>
  203. );
  204. }
  205. }
  206. `,
  207. parser: 'babel-eslint',
  208. errors: [{message: 'Comments inside children section of tag should be placed inside braces'}]
  209. }
  210. ]
  211. });