react-in-jsx-scope.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * @fileoverview Tests for react-in-jsx-scope
  3. * @author Glen Mailer
  4. */
  5. 'use strict';
  6. // -----------------------------------------------------------------------------
  7. // Requirements
  8. // -----------------------------------------------------------------------------
  9. const rule = require('../../../lib/rules/react-in-jsx-scope');
  10. const RuleTester = require('eslint').RuleTester;
  11. const parserOptions = {
  12. ecmaVersion: 2018,
  13. sourceType: 'module',
  14. ecmaFeatures: {
  15. jsx: true
  16. }
  17. };
  18. const settings = {
  19. react: {
  20. pragma: 'Foo'
  21. }
  22. };
  23. // -----------------------------------------------------------------------------
  24. // Tests
  25. // -----------------------------------------------------------------------------
  26. const ruleTester = new RuleTester({parserOptions});
  27. ruleTester.run('react-in-jsx-scope', rule, {
  28. valid: [
  29. {code: 'var React, App; <App />;'},
  30. {code: 'var React; <img />;'},
  31. {code: 'var React; <>fragment</>;', parser: 'babel-eslint'},
  32. {code: 'var React; <x-gif />;'},
  33. {code: 'var React, App, a=1; <App attr={a} />;'},
  34. {code: 'var React, App, a=1; function elem() { return <App attr={a} />; }'},
  35. {code: 'var React, App; <App />;'},
  36. {code: '/** @jsx Foo */ var Foo, App; <App />;'},
  37. {code: '/** @jsx Foo.Bar */ var Foo, App; <App />;'},
  38. {code: `
  39. import React from 'react/addons';
  40. const Button = createReactClass({
  41. render() {
  42. return (
  43. <button {...this.props}>{this.props.children}</button>
  44. )
  45. }
  46. });
  47. export default Button;
  48. `},
  49. {code: 'var Foo, App; <App />;', settings: settings}
  50. ],
  51. invalid: [{
  52. code: 'var App, a = <App />;',
  53. errors: [{message: '\'React\' must be in scope when using JSX'}]
  54. }, {
  55. code: 'var a = <App />;',
  56. errors: [{message: '\'React\' must be in scope when using JSX'}]
  57. }, {
  58. code: 'var a = <img />;',
  59. errors: [{message: '\'React\' must be in scope when using JSX'}]
  60. }, {
  61. code: 'var a = <>fragment</>;',
  62. parser: 'babel-eslint',
  63. errors: [{message: '\'React\' must be in scope when using JSX'}]
  64. }, {
  65. code: '/** @jsx React.DOM */ var a = <img />;',
  66. errors: [{message: '\'React\' must be in scope when using JSX'}]
  67. }, {
  68. code: '/** @jsx Foo.bar */ var React, a = <img />;',
  69. errors: [{message: '\'Foo\' must be in scope when using JSX'}]
  70. }, {
  71. code: 'var React, a = <img />;',
  72. errors: [{message: '\'Foo\' must be in scope when using JSX'}], settings: settings
  73. }]
  74. });