]>
Commit | Line | Data |
---|---|---|
eb39fafa DC |
1 | /** |
2 | * @fileoverview Tests for no-control-regex rule. | |
3 | * @author Nicholas C. Zakas | |
4 | */ | |
5 | ||
6 | "use strict"; | |
7 | ||
8 | //------------------------------------------------------------------------------ | |
9 | // Requirements | |
10 | //------------------------------------------------------------------------------ | |
11 | ||
12 | const rule = require("../../../lib/rules/no-control-regex"), | |
13 | { RuleTester } = require("../../../lib/rule-tester"); | |
14 | ||
15 | //------------------------------------------------------------------------------ | |
16 | // Tests | |
17 | //------------------------------------------------------------------------------ | |
18 | ||
19 | const ruleTester = new RuleTester(); | |
20 | ||
21 | ruleTester.run("no-control-regex", rule, { | |
22 | valid: [ | |
23 | "var regex = /x1f/", | |
24 | String.raw`var regex = /\\x1f/`, | |
25 | "var regex = new RegExp('x1f')", | |
26 | "var regex = RegExp('x1f')", | |
27 | "new RegExp('[')", | |
28 | "RegExp('[')", | |
8f9d1d4d DC |
29 | "new (function foo(){})('\\x1f')", |
30 | { code: String.raw`/\u{20}/u`, parserOptions: { ecmaVersion: 2015 } }, | |
31 | String.raw`/\u{1F}/`, | |
32 | String.raw`/\u{1F}/g`, | |
33 | String.raw`new RegExp("\\u{20}", "u")`, | |
34 | String.raw`new RegExp("\\u{1F}")`, | |
35 | String.raw`new RegExp("\\u{1F}", "g")`, | |
36 | String.raw`new RegExp("\\u{1F}", flags)` // when flags are unknown, this rule assumes there's no `u` flag | |
eb39fafa DC |
37 | ], |
38 | invalid: [ | |
39 | { code: String.raw`var regex = /\x1f/`, errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] }, | |
40 | { code: String.raw`var regex = /\\\x1f\\x1e/`, errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] }, | |
41 | { code: String.raw`var regex = /\\\x1fFOO\\x00/`, errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] }, | |
42 | { code: String.raw`var regex = /FOO\\\x1fFOO\\x1f/`, errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] }, | |
43 | { code: "var regex = new RegExp('\\x1f\\x1e')", errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f, \\x1e" }, type: "Literal" }] }, | |
44 | { code: "var regex = new RegExp('\\x1fFOO\\x00')", errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f, \\x00" }, type: "Literal" }] }, | |
45 | { code: "var regex = new RegExp('FOO\\x1fFOO\\x1f')", errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f, \\x1f" }, type: "Literal" }] }, | |
46 | { code: "var regex = RegExp('\\x1f')", errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] }, | |
47 | { | |
48 | code: "var regex = /(?<a>\\x1f)/", | |
49 | parserOptions: { ecmaVersion: 2018 }, | |
50 | errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] | |
456be15e TL |
51 | }, |
52 | { | |
53 | code: String.raw`var regex = /(?<\u{1d49c}>.)\x1f/`, | |
54 | parserOptions: { ecmaVersion: 2020 }, | |
55 | errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] | |
8f9d1d4d DC |
56 | }, |
57 | { | |
58 | code: String.raw`new RegExp("\\u001F", flags)`, | |
59 | errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] | |
60 | }, | |
61 | { | |
62 | code: String.raw`/\u{1111}*\x1F/u`, | |
63 | parserOptions: { ecmaVersion: 2015 }, | |
64 | errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] | |
65 | }, | |
66 | { | |
67 | code: String.raw`new RegExp("\\u{1111}*\\x1F", "u")`, | |
68 | parserOptions: { ecmaVersion: 2015 }, | |
69 | errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] | |
70 | }, | |
71 | { | |
72 | code: String.raw`/\u{1F}/u`, | |
73 | parserOptions: { ecmaVersion: 2015 }, | |
74 | errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] | |
75 | }, | |
76 | { | |
77 | code: String.raw`/\u{1F}/gui`, | |
78 | parserOptions: { ecmaVersion: 2015 }, | |
79 | errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] | |
80 | }, | |
81 | { | |
82 | code: String.raw`new RegExp("\\u{1F}", "u")`, | |
83 | errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] | |
84 | }, | |
85 | { | |
86 | code: String.raw`new RegExp("\\u{1F}", "gui")`, | |
87 | errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] | |
eb39fafa DC |
88 | } |
89 | ] | |
90 | }); |