| Index: test/mjsunit/cyrillic.js
|
| ===================================================================
|
| --- test/mjsunit/cyrillic.js (revision 3237)
|
| +++ test/mjsunit/cyrillic.js (working copy)
|
| @@ -60,6 +60,7 @@
|
| return new RegExp("[" + from + "-" + to + "]", flags);
|
| }
|
|
|
| +// Test Cyrillic and Greek separately.
|
| for (var lang = 0; lang < 2; lang++) {
|
| var chars = (lang == 0) ? cyrillic : greek;
|
|
|
| @@ -99,6 +100,7 @@
|
| }
|
| }
|
|
|
| +// Test range that covers both greek and cyrillic characters.
|
| for (key in greek) {
|
| assertTrue(Range(greek.FIRST, cyrillic.last).test(greek[key]), 17 + key);
|
| if (cyrillic[key]) {
|
| @@ -106,7 +108,6 @@
|
| }
|
| }
|
|
|
| -
|
| for (var i = 0; i < 2; i++) {
|
| var ignore_case = (i == 0);
|
| var flag = ignore_case ? "i" : "";
|
| @@ -118,6 +119,8 @@
|
| assertTrue(Range(greek.first, cyrillic.LAST, flag).test(cyrillic.MIDDLE), 23);
|
| assertTrue(Range(greek.first, cyrillic.LAST, flag).test(cyrillic.LAST), 24);
|
|
|
| + // A range that covers the lower case greek letters and the upper case cyrillic
|
| + // letters.
|
| assertEquals(ignore_case, Range(greek.first, cyrillic.LAST, flag).test(greek.FIRST), 25);
|
| assertEquals(ignore_case, Range(greek.first, cyrillic.LAST, flag).test(greek.MIDDLE), 26);
|
| assertEquals(ignore_case, Range(greek.first, cyrillic.LAST, flag).test(greek.LAST), 27);
|
| @@ -128,6 +131,10 @@
|
| }
|
|
|
|
|
| +// Sigma is special because there are two lower case versions of the same upper
|
| +// case character. JS requires that case independece means that you should
|
| +// convert everything to upper case, so the two sigma variants are equal to each
|
| +// other in a case independt comparison.
|
| for (var i = 0; i < 2; i++) {
|
| var simple = (i != 0);
|
| var name = simple ? "" : "[]";
|
| @@ -166,4 +173,36 @@
|
| assertTrue(new RegExp(regex, "i").test(SIGMA), 56 + name);
|
| }
|
|
|
| -print("ok");
|
| +
|
| +// Test all non-ASCII characters individually to ensure that our optimizations
|
| +// didn't break anything.
|
| +for (var i = 0x80; i <= 0xfffe; i++) {
|
| + var c = String.fromCharCode(i);
|
| + var c2 = String.fromCharCode(i + 1);
|
| + var re = new RegExp("[" + c + "-" + c2 + "]", "i");
|
| + assertTrue(re.test(c), 57);
|
| +}
|
| +
|
| +for (var add_non_ascii_character_to_subject = 0;
|
| + add_non_ascii_character_to_subject < 2;
|
| + add_non_ascii_character_to_subject++) {
|
| + var suffix = add_non_ascii_character_to_subject ? "\ufffe" : "";
|
| + // A range that covers both ASCII and non-ASCII.
|
| + for (var i = 0; i < 2; i++) {
|
| + var full = (i != 0);
|
| + var mixed = full ? "[a-\uffff]" : "[a-" + cyrillic.LAST + "]";
|
| + var f = full ? "f" : "c";
|
| + for (var j = 0; j < 2; j++) {
|
| + var ignore_case = (j == 0);
|
| + var flag = ignore_case ? "i" : "";
|
| + var re = new RegExp(mixed, flag);
|
| + assertEquals(ignore_case || (full && add_non_ascii_character_to_subject),
|
| + re.test("A" + suffix),
|
| + 58 + flag + f);
|
| + assertTrue(re.test("a" + suffix), 59 + flag + f);
|
| + assertTrue(re.test("~" + suffix), 60 + flag + f);
|
| + assertTrue(re.test(cyrillic.MIDDLE), 61 + flag + f);
|
| + assertEquals(ignore_case || full, re.test(cyrillic.middle), 62 + flag + f);
|
| + }
|
| + }
|
| +}
|
|
|