/** * @fileoverview Tests for react-in-jsx-scope * @author Glen Mailer */ 'use strict'; // ----------------------------------------------------------------------------- // Requirements // ----------------------------------------------------------------------------- const RuleTester = require('../../helpers/ruleTester'); const rule = require('../../../lib/rules/react-in-jsx-scope'); const parsers = require('../../helpers/parsers'); const parserOptions = { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { jsx: true, }, }; const settings = { react: { pragma: 'Foo', }, }; // ----------------------------------------------------------------------------- // Tests // ----------------------------------------------------------------------------- const ruleTester = new RuleTester({ parserOptions }); ruleTester.run('react-in-jsx-scope', rule, { valid: parsers.all([ { code: 'var React, App; ;' }, { code: 'var React; ;' }, { code: 'var React; <>fragment;', features: ['fragment'], }, { code: 'var React; ;' }, { code: 'var React, App, a=1; ;' }, { code: 'var React, App, a=1; function elem() { return ; }' }, { code: '/** @jsx Foo */ var Foo, App; ;' }, { code: '/** @jsx Foo.Bar */ var Foo, App; ;' }, { code: ` import React from 'react/addons'; const Button = createReactClass({ render() { return ( ) } }); export default Button; `, }, { code: 'var Foo, App; ;', settings, }, ]), invalid: parsers.all([ { code: 'var App, a = ;', errors: [ { messageId: 'notInScope', data: { name: 'React' }, }, ], }, { code: 'var a = ;', errors: [ { messageId: 'notInScope', data: { name: 'React' }, }, ], }, { code: 'var a = ;', errors: [ { messageId: 'notInScope', data: { name: 'React' }, }, ], }, { code: 'var a = <>fragment;', features: ['fragment', 'no-ts-old'], // TODO: FIXME: remove no-ts-old and fix errors: [ { messageId: 'notInScope', data: { name: 'React' }, }, ], }, { code: '/** @jsx React.DOM */ var a = ;', errors: [ { messageId: 'notInScope', data: { name: 'React' }, }, ], }, { code: '/** @jsx Foo.bar */ var React, a = ;', errors: [ { messageId: 'notInScope', data: { name: 'Foo' }, }, ], }, { code: 'var React, a = ;', settings, errors: [ { messageId: 'notInScope', data: { name: 'Foo' }, }, ], }, ]), });