summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/annexB/built-ins/RegExp/RegExp-control-escape-russian-letter.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/annexB/built-ins/RegExp/RegExp-control-escape-russian-letter.js')
-rw-r--r--js/src/tests/test262/annexB/built-ins/RegExp/RegExp-control-escape-russian-letter.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/js/src/tests/test262/annexB/built-ins/RegExp/RegExp-control-escape-russian-letter.js b/js/src/tests/test262/annexB/built-ins/RegExp/RegExp-control-escape-russian-letter.js
new file mode 100644
index 0000000000..b7caeb42a5
--- /dev/null
+++ b/js/src/tests/test262/annexB/built-ins/RegExp/RegExp-control-escape-russian-letter.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "CharacterEscape :: c ControlLetter"
+es5id: 15.10.2.10_A2.1_T3
+es6id: B.1.4
+description: >
+ "ControlLetter :: RUSSIAN ALPHABET is incorrect"
+ Instead, fall back to semantics to match literal "\\c"
+features: [generators]
+---*/
+
+function* invalidControls() {
+ // Check upper case Cyrillic
+ for (var alpha = 0x0410; alpha <= 0x042F; alpha++) {
+ yield String.fromCharCode(alpha);
+ }
+
+ // Check lower case Cyrillic
+ for (alpha = 0x0430; alpha <= 0x044F; alpha++) {
+ yield String.fromCharCode(alpha);
+ }
+
+ // Check ASCII characters which are not in the extended range or syntax
+ // characters
+ for (alpha = 0x00; alpha <= 0x7F; alpha++) {
+ let letter = String.fromCharCode(alpha);
+ if (!letter.match(/[0-9A-Za-z_\$(|)\[\]\/\\^]/)) {
+ yield letter;
+ }
+ }
+
+ // Check for end of string
+ yield "";
+}
+
+for (let letter of invalidControls()) {
+ var source = "\\c" + letter;
+ var re = new RegExp(source);
+
+ if (letter.length > 0) {
+ var char = letter.charCodeAt(0);
+ var str = String.fromCharCode(char % 32);
+ var arr = re.exec(str);
+ assert.sameValue(arr, null, `Character ${letter} unreasonably wrapped around as a control character`);
+ }
+ arr = re.exec(source.substring(1));
+ assert.sameValue(arr, null, `invalid \\c escape matched c rather than \\c when followed by ${letter}`);
+
+ arr = re.exec(source);
+ assert.notSameValue(arr, null, `invalid \\c escape failed to match \\c when followed by ${letter}`);
+}
+
+reportCompare(0, 0);