-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathno-eval.test.ts
114 lines (112 loc) · 3.88 KB
/
no-eval.test.ts
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
109
110
111
112
113
114
import rule from '../../src/rules/no-eval.js'
import { javascript, runRuleTester, test } from '../utils/rule-tester.js'
runRuleTester('no-eval', rule, {
invalid: [
{
code: test(
'const searchValue = await page.$eval("#search", el => el.value);',
),
errors: [{ column: 54, endColumn: 64, line: 1, messageId: 'noEval' }],
},
{
code: test(
'const searchValue = await this.page.$eval("#search", el => el.value);',
),
errors: [{ column: 54, endColumn: 69, line: 1, messageId: 'noEval' }],
},
{
code: test(
'const searchValue = await page["$eval"]("#search", el => el.value);',
),
errors: [{ column: 54, endColumn: 67, line: 1, messageId: 'noEval' }],
},
{
code: test(
'const searchValue = await page[`$eval`]("#search", el => el.value);',
),
errors: [{ column: 54, endColumn: 67, line: 1, messageId: 'noEval' }],
},
{
code: test('await page.$eval("#search", el => el.value);'),
errors: [{ column: 34, endColumn: 44, line: 1, messageId: 'noEval' }],
},
{
code: test('await this.page.$eval("#search", el => el.value);'),
errors: [{ column: 34, endColumn: 49, line: 1, messageId: 'noEval' }],
},
{
code: test('await page.$$eval("#search", el => el.value);'),
errors: [{ column: 34, endColumn: 45, line: 1, messageId: 'noEvalAll' }],
},
{
code: test('await this.page.$$eval("#search", el => el.value);'),
errors: [{ column: 34, endColumn: 50, line: 1, messageId: 'noEvalAll' }],
},
{
code: test('await page["$$eval"]("#search", el => el.value);'),
errors: [{ column: 34, endColumn: 48, line: 1, messageId: 'noEvalAll' }],
},
{
code: test('await page[`$$eval`]("#search", el => el.value);'),
errors: [{ column: 34, endColumn: 48, line: 1, messageId: 'noEvalAll' }],
},
{
code: test(
'const html = await page.$eval(".main-container", (e, suffix) => e.outerHTML + suffix, "hello");',
),
errors: [{ column: 47, endColumn: 57, line: 1, messageId: 'noEval' }],
},
{
code: test(
'const divCounts = await page.$$eval("div", (divs, min) => divs.length >= min, 10);',
),
errors: [{ column: 52, endColumn: 63, line: 1, messageId: 'noEvalAll' }],
},
// Custom messages
// Note: This is one of the only test in the project to tests custom
// messages since it's implementation is global in the `createRule` method.
{
code: javascript`
page.$eval("#search", el => el.value);
page.$$eval("#search", el => el.value);
`,
errors: [
{ column: 1, endColumn: 11, line: 1, message: 'no eval' },
{ column: 1, endColumn: 12, line: 2, message: 'no eval all' },
],
name: 'Custom messages',
settings: {
playwright: {
messages: {
noEval: 'no eval',
noEvalAll: 'no eval all',
},
},
},
},
],
valid: [
test('await page.locator(".tweet").evaluate(node => node.innerText)'),
test('await this.page.locator(".tweet").evaluate(node => node.innerText)'),
test('await page.locator(".tweet")["evaluate"](node => node.innerText)'),
test('await page.locator(".tweet")[`evaluate`](node => node.innerText)'),
test(
'await (await page.$(".tweet")).$eval(".like", node => node.innerText)',
),
test(
'await (await page.$(".tweet"))["$eval"](".like", node => node.innerText)',
),
test(
'await (await page.$(".tweet")).$$eval(".like", node => node.innerText)',
),
test(
'await (await page.$(".tweet"))[`$$eval`](".like", node => node.innerText)',
),
test(
'await page.locator("div").evaluateAll((divs, min) => divs.length >= min, 10);',
),
test(
'await this.page.locator("div").evaluateAll((divs, min) => divs.length >= min, 10);',
),
],
})