-
Notifications
You must be signed in to change notification settings - Fork 21
/
require-object-in-propequal.js
102 lines (87 loc) · 3.78 KB
/
require-object-in-propequal.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
/**
* @fileoverview Enforce use of objects as expected values in `assert.propEqual`
* @author Kevin Partington
*/
"use strict";
//------------------------------------------------------------------------------
// Requirements
//------------------------------------------------------------------------------
const rule = require("../../../lib/rules/require-object-in-propequal"),
RuleTester = require("eslint").RuleTester;
//------------------------------------------------------------------------------
// Helpers
//------------------------------------------------------------------------------
function wrap(assertionCode, testName) {
testName = testName || "Name";
return `QUnit.test('${testName}', function (assert) { ${assertionCode} });`;
}
function createInvalid(assertionCode, invalidValue) {
return {
code: wrap(assertionCode),
errors: [{
messageId: "useObject",
data: {
value: invalidValue
}
}]
};
}
//------------------------------------------------------------------------------
// Tests
//------------------------------------------------------------------------------
const ruleTester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaFeatures: { jsx: true }
}
});
ruleTester.run("require-object-in-propequal", rule, {
valid: [
// Object expressions/array expressions
wrap("assert.propEqual(actual, { foo: 'bar' });"),
wrap("assert.propEqual(actual, ['string']);"),
// Identifiers, member expressions, calls, and new expressions are fine
wrap("assert.propEqual(actual, someVar);"),
wrap("assert.propEqual(actual, obj.prop);"),
wrap("assert.propEqual(actual, func());"),
wrap("assert.propEqual(actual, new Foo());"),
// this is fine
wrap("assert.propEqual(actual, this);"),
// Global assertion
wrap("propEqual(actual, { foo: 'bar' });"),
// Not propEqual
wrap("assert.deepEqual(actual, { foo: 'bar' });"),
wrap("assert.deepEqual(actual, 0);"),
wrap("assert.deepEqual(actual, -1);"),
wrap("assert.deepEqual(actual, 'string');"),
wrap("assert.deepEqual(actual, `template`);"),
wrap("assert.deepEqual(actual, true);"),
wrap("assert.deepEqual(actual, false);"),
wrap("assert.deepEqual(actual, null);"),
wrap("assert.deepEqual(actual, /regex/);"),
wrap("assert.deepEqual(actual, ++foo);"),
wrap("assert.deepEqual(actual, foo++);"),
wrap("assert.deepEqual(actual, --foo);"),
wrap("assert.deepEqual(actual, foo--);"),
wrap("assert.deepEqual(actual, <JSX />);"),
wrap("assert.deepEqual(actual, 0n);"),
wrap("assert.propEqual(actual, foo?.bar);"),
wrap("assert.propEqual(actual, foo?.bar?.());")
],
invalid: [
createInvalid("assert.propEqual(actual, 0);", "0"),
createInvalid("assert.propEqual(actual, -1);", "-1"),
createInvalid("assert.propEqual(actual, 'string');", "'string'"),
createInvalid("assert.propEqual(actual, `template`);", "`template`"),
createInvalid("assert.propEqual(actual, true);", "true"),
createInvalid("assert.propEqual(actual, false);", "false"),
createInvalid("assert.propEqual(actual, null);", "null"),
createInvalid("assert.propEqual(actual, /regex/);", "/regex/"),
createInvalid("assert.propEqual(actual, ++foo);", "++foo"),
createInvalid("assert.propEqual(actual, foo++);", "foo++"),
createInvalid("assert.propEqual(actual, --foo);", "--foo"),
createInvalid("assert.propEqual(actual, foo--);", "foo--"),
createInvalid("assert.propEqual(actual, <JSX />)", "<JSX />"),
createInvalid("assert.propEqual(actual, 0n);", "0n")
]
});