/
react-in-jsx-scope.js
85 lines (77 loc) · 2.45 KB
/
react-in-jsx-scope.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**
* @fileoverview Tests for react-in-jsx-scope
* @author Glen Mailer
*/
'use strict';
// -----------------------------------------------------------------------------
// Requirements
// -----------------------------------------------------------------------------
const RuleTester = require('eslint').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: [
{code: 'var React, App; <App />;'},
{code: 'var React; <img />;'},
{code: 'var React; <>fragment</>;', parser: parsers.BABEL_ESLINT},
{code: 'var React; <x-gif />;'},
{code: 'var React, App, a=1; <App attr={a} />;'},
{code: 'var React, App, a=1; function elem() { return <App attr={a} />; }'},
{code: '/** @jsx Foo */ var Foo, App; <App />;'},
{code: '/** @jsx Foo.Bar */ var Foo, App; <App />;'},
{
code: `
import React from 'react/addons';
const Button = createReactClass({
render() {
return (
<button {...this.props}>{this.props.children}</button>
)
}
});
export default Button;
`
},
{code: 'var Foo, App; <App />;', settings}
],
invalid: [{
code: 'var App, a = <App />;',
errors: [{message: '\'React\' must be in scope when using JSX'}]
}, {
code: 'var a = <App />;',
errors: [{message: '\'React\' must be in scope when using JSX'}]
}, {
code: 'var a = <img />;',
errors: [{message: '\'React\' must be in scope when using JSX'}]
}, {
code: 'var a = <>fragment</>;',
parser: parsers.BABEL_ESLINT,
errors: [{message: '\'React\' must be in scope when using JSX'}]
}, {
code: '/** @jsx React.DOM */ var a = <img />;',
errors: [{message: '\'React\' must be in scope when using JSX'}]
}, {
code: '/** @jsx Foo.bar */ var React, a = <img />;',
errors: [{message: '\'Foo\' must be in scope when using JSX'}]
}, {
code: 'var React, a = <img />;',
errors: [{message: '\'Foo\' must be in scope when using JSX'}],
settings
}]
});