Index: test/mjsunit/regexp.js |
diff --git a/test/mjsunit/regexp.js b/test/mjsunit/regexp.js |
index 4c1d2e315f856ed9e241d52eb2cbcf98e987e2c4..59c3ba8d2874f08dff99445f2de61257a80b4add 100644 |
--- a/test/mjsunit/regexp.js |
+++ b/test/mjsunit/regexp.js |
@@ -110,44 +110,6 @@ assertFalse(re.test("\\]")); |
assertFalse(re.test("\x03]")); // I.e., read as \cc |
-// Test that we handle \s and \S correctly inside some bizarre |
-// character classes. |
-re = /[\s-:]/; |
-assertTrue(re.test('-')); |
-assertTrue(re.test(':')); |
-assertTrue(re.test(' ')); |
-assertTrue(re.test('\t')); |
-assertTrue(re.test('\n')); |
-assertFalse(re.test('a')); |
-assertFalse(re.test('Z')); |
- |
-re = /[\S-:]/; |
-assertTrue(re.test('-')); |
-assertTrue(re.test(':')); |
-assertFalse(re.test(' ')); |
-assertFalse(re.test('\t')); |
-assertFalse(re.test('\n')); |
-assertTrue(re.test('a')); |
-assertTrue(re.test('Z')); |
- |
-re = /[^\s-:]/; |
-assertFalse(re.test('-')); |
-assertFalse(re.test(':')); |
-assertFalse(re.test(' ')); |
-assertFalse(re.test('\t')); |
-assertFalse(re.test('\n')); |
-assertTrue(re.test('a')); |
-assertTrue(re.test('Z')); |
- |
-re = /[^\S-:]/; |
-assertFalse(re.test('-')); |
-assertFalse(re.test(':')); |
-assertTrue(re.test(' ')); |
-assertTrue(re.test('\t')); |
-assertTrue(re.test('\n')); |
-assertFalse(re.test('a')); |
-assertFalse(re.test('Z')); |
- |
re = /[\s]/; |
assertFalse(re.test('-')); |
assertFalse(re.test(':')); |
@@ -202,17 +164,6 @@ assertFalse(re.test('\n')); |
assertFalse(re.test('a')); |
assertFalse(re.test('Z')); |
-// First - is treated as range operator, second as literal minus. |
-// This follows the specification in parsing, but doesn't throw on |
-// the \s at the beginning of the range. |
-re = /[\s-0-9]/; |
-assertTrue(re.test(' ')); |
-assertTrue(re.test('\xA0')); |
-assertTrue(re.test('-')); |
-assertTrue(re.test('0')); |
-assertTrue(re.test('9')); |
-assertFalse(re.test('1')); |
- |
// Test beginning and end of line assertions with or without the |
// multiline flag. |
re = /^\d+/; |
@@ -659,3 +610,46 @@ assertEquals(["bc"], re.exec("zimzomzumbc")); |
assertFalse(re.test("c")); |
assertFalse(re.test("")); |
+ |
+function testInvalidRange(str) { |
+ try { |
+ RegExp(str).test("x"); |
+ } catch (e) { |
+ return; |
+ } |
+ assetUnreachable("Allowed invalid range in " + str); |
+} |
+ |
+function testValidRange(str) { |
+ try { |
+ RegExp(str).test("x"); |
+ } catch (e) { |
+ assertUnreachable("Shouldn't fail parsing: " + str + ", was: " + e); |
+ } |
+} |
+ |
+testInvalidRange("[\\d-z]"); |
+testInvalidRange("[z-\\d]"); |
+testInvalidRange("[\\d-\\d]"); |
+testInvalidRange("[z-x]"); // Larger value first. |
+testInvalidRange("[x-\\d-\\d]"); |
+ |
+testValidRange("[x-z]"); |
+testValidRange("[!--\d]"); // Second "-" is end of range. |
+testValidRange("[\d-]"); |
+testValidRange("[-\d]"); |
+testValidRange("[-\d-]"); |
+testValidRange("[^-\d-]"); |
+testValidRange("[^-\d-]"); |
+testValidRange("[0-9-\w]"); |
+ |
+// Escaped dashes do not count as range operators. |
+testValidRange("[\\d\\-z]"); |
+testValidRange("[z\\-\\d]"); |
+testValidRange("[\\d\\-\\d]"); |
+testValidRange("[z\\-x]"); |
+testValidRange("[x\\-\\d\\-\\d]"); |
+ |
+ |
+ |
+ |