forked from jsx-eslint/eslint-plugin-react
/
version.js
108 lines (87 loc) · 4.31 KB
/
version.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
'use strict';
const path = require('path');
const assert = require('assert');
const sinon = require('sinon');
const versionUtil = require('../../lib/util/version');
describe('Version', () => {
const base = path.resolve(__dirname, '..', 'fixtures', 'version');
let cwd;
let expectedErrorArgs = [];
beforeEach(() => {
cwd = process.cwd();
process.chdir(base);
sinon.stub(console, 'error');
expectedErrorArgs = [];
versionUtil.resetWarningFlag();
});
afterEach(() => {
process.chdir(cwd);
const actualArgs = console.error.args; // eslint-disable-line no-console
console.error.restore(); // eslint-disable-line no-console
assert.deepEqual(actualArgs, expectedErrorArgs);
});
describe('Detect version', () => {
const context = {settings: {react: {version: 'detect', flowVersion: 'detect'}}};
it('matches detected version', () => {
process.chdir('detect-version');
assert.equal(versionUtil.testReactVersion(context, '1.2.3'), true);
assert.equal(versionUtil.testReactVersion(context, '1.2.4'), false);
assert.equal(versionUtil.testFlowVersion(context, '0.92.0'), true);
});
it('assumes latest version if react is not installed', () => {
assert.equal(versionUtil.testReactVersion(context, '999.999.999'), true);
expectedErrorArgs = [
['Warning: React version was set to "detect" in eslint-plugin-react settings, but the "react" package is not installed. Assuming latest React version for linting.']
];
});
it('warns only once for failure to detect react ', () => {
assert.equal(versionUtil.testReactVersion(context, '999.999.999'), true);
assert.equal(versionUtil.testReactVersion(context, '999.999.999'), true);
expectedErrorArgs = [
['Warning: React version was set to "detect" in eslint-plugin-react settings, but the "react" package is not installed. Assuming latest React version for linting.']
];
});
it('assumes latest version if flow-bin is not installed', () => {
assert.equal(versionUtil.testFlowVersion(context, '999.999.999'), true);
expectedErrorArgs = [
['Warning: Flow version was set to "detect" in eslint-plugin-react settings, but the "flow-bin" package is not installed. Assuming latest Flow version for linting.']
];
});
});
describe('string version', () => {
const context = {settings: {react: {version: '15.0', flowVersion: '1.2'}}};
it('works with react', () => {
assert.equal(versionUtil.testReactVersion(context, '0.14.0'), true);
assert.equal(versionUtil.testReactVersion(context, '15.0.0'), true);
assert.equal(versionUtil.testReactVersion(context, '16.0.0'), false);
});
it('works with flow', () => {
assert.equal(versionUtil.testFlowVersion(context, '1.1.0'), true);
assert.equal(versionUtil.testFlowVersion(context, '1.2.0'), true);
assert.equal(versionUtil.testFlowVersion(context, '1.3.0'), false);
});
});
describe('non-string version', () => {
const context = {settings: {react: {version: 15.0, flowVersion: 1.2}}};
it('works with react', () => {
assert.equal(versionUtil.testReactVersion(context, '0.14.0'), true);
assert.equal(versionUtil.testReactVersion(context, '15.0.0'), true);
assert.equal(versionUtil.testReactVersion(context, '16.0.0'), false);
expectedErrorArgs = [
['Warning: React version specified in eslint-plugin-react-settings must be a string; got “number”'],
['Warning: React version specified in eslint-plugin-react-settings must be a string; got “number”'],
['Warning: React version specified in eslint-plugin-react-settings must be a string; got “number”']
];
});
it('works with flow', () => {
assert.equal(versionUtil.testFlowVersion(context, '1.1.0'), true);
assert.equal(versionUtil.testFlowVersion(context, '1.2.0'), true);
assert.equal(versionUtil.testFlowVersion(context, '1.3.0'), false);
expectedErrorArgs = [
['Warning: Flow version specified in eslint-plugin-react-settings must be a string; got “number”'],
['Warning: Flow version specified in eslint-plugin-react-settings must be a string; got “number”'],
['Warning: Flow version specified in eslint-plugin-react-settings must be a string; got “number”']
];
});
});
});