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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
var BUGNUMBER = 1135377;
var summary = "Implement RegExp unicode flag -- disallow extended patterns.";
print(BUGNUMBER + ": " + summary);
// IdentityEscape
assertEqArray(/\^\$\\\.\*\+\?\(\)\[\]\{\}\|/u.exec("^$\\.*+?()[]{}|"),
["^$\\.*+?()[]{}|"]);
assertThrowsInstanceOf(() => eval(`/\\A/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\-/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\U{10}/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\U0000/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\uD83D\\U0000/u`), SyntaxError);
assertEqArray(/[\^\$\\\.\*\+\?\(\)\[\]\{\}\|]+/u.exec("^$\\.*+?()[]{}|"),
["^$\\.*+?()[]{}|"]);
assertThrowsInstanceOf(() => eval(`/[\\A]/u`), SyntaxError);
assertEqArray(/[A\-Z]+/u.exec("a-zABC"),
["-"]);
assertThrowsInstanceOf(() => eval(`/[\\U{10}]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\U0000]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\uD83D\\U0000]/u`), SyntaxError);
// PatternCharacter
assertThrowsInstanceOf(() => eval(`/{}/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/{/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/}/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/{0}/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/{1,}/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/{1,2}/u`), SyntaxError);
// QuantifiableAssertion
assertEqArray(/.B(?=A)/u.exec("cBaCBA"),
["CB"]);
assertEqArray(/.B(?!A)/u.exec("CBAcBa"),
["cB"]);
assertEqArray(/.B(?:A)/u.exec("cBaCBA"),
["CBA"]);
assertEqArray(/.B(A)/u.exec("cBaCBA"),
["CBA", "A"]);
assertThrowsInstanceOf(() => eval(`/.B(?=A)+/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/.B(?!A)+/u`), SyntaxError);
assertEqArray(/.B(?:A)+/u.exec("cBaCBA"),
["CBA"]);
assertEqArray(/.B(A)+/u.exec("cBaCBA"),
["CBA", "A"]);
// ControlLetter
assertEqArray(/\cA/u.exec("\u0001"),
["\u0001"]);
assertEqArray(/\cZ/u.exec("\u001a"),
["\u001a"]);
assertEqArray(/\ca/u.exec("\u0001"),
["\u0001"]);
assertEqArray(/\cz/u.exec("\u001a"),
["\u001a"]);
assertEqArray(/[\cA]/u.exec("\u0001"),
["\u0001"]);
assertEqArray(/[\cZ]/u.exec("\u001a"),
["\u001a"]);
assertEqArray(/[\ca]/u.exec("\u0001"),
["\u0001"]);
assertEqArray(/[\cz]/u.exec("\u001a"),
["\u001a"]);
assertThrowsInstanceOf(() => eval(`/\\c/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\c1/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\c_/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\c]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\c1]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\c_]/u`), SyntaxError);
// HexEscapeSequence
assertThrowsInstanceOf(() => eval(`/\\x/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\x0/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\x1/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\x1G/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\x]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\x0]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\x1]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\x1G]/u`), SyntaxError);
// LegacyOctalEscapeSequence
assertThrowsInstanceOf(() => eval(`/\\52/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\052/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\52]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\052]/u`), SyntaxError);
// DecimalEscape
assertEqArray(/\0/u.exec("\0"),
["\0"]);
assertEqArray(/[\0]/u.exec("\0"),
["\0"]);
assertEqArray(/\0A/u.exec("\0A"),
["\0A"]);
assertEqArray(/\0G/u.exec("\0G"),
["\0G"]);
assertEqArray(/(A.)\1/u.exec("ABACABAB"),
["ABAB", "AB"]);
assertEqArray(/(A.)(B.)(C.)(D.)(E.)(F.)(G.)(H.)(I.)(J.)(K.)\10/u.exec("A1B2C3D4E5F6G7H8I9JaKbJa"),
["A1B2C3D4E5F6G7H8I9JaKbJa", "A1", "B2", "C3", "D4", "E5", "F6", "G7", "H8", "I9", "Ja", "Kb"]);
assertThrowsInstanceOf(() => eval(`/\\00/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\01/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\09/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\1/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\2/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\3/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\4/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\5/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\6/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\7/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\8/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\9/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/\\10/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\00]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\01]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\09]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\1]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\2]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\3]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\4]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\5]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\6]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\7]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\8]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\9]/u`), SyntaxError);
assertThrowsInstanceOf(() => eval(`/[\\10]/u`), SyntaxError);
if (typeof reportCompare === "function")
reportCompare(true, true);
|