138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// Copyright 2009 the V8 project authors. All rights reserved. 238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// Redistribution and use in source and binary forms, with or without 338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// modification, are permitted provided that the following conditions are 438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// met: 538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// 638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// * Redistributions of source code must retain the above copyright 738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// notice, this list of conditions and the following disclaimer. 838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// * Redistributions in binary form must reproduce the above 938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// copyright notice, this list of conditions and the following 1038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// disclaimer in the documentation and/or other materials provided 1138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// with the distribution. 1238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// * Neither the name of Google Inc. nor the names of its 1338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// contributors may be used to endorse or promote products derived 1438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// from this software without specific prior written permission. 1538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// 1638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 2838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// Test Unicode character ranges in regexps. 2938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 3038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 3138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// Cyrillic. 3238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgvar cyrillic = { 3338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org FIRST: "\u0410", // A 3438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org first: "\u0430", // a 3538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org LAST: "\u042f", // YA 3638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org last: "\u044f", // ya 3738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org MIDDLE: "\u0427", // CHE 3838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org middle: "\u0447", // che 3938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // Actually no characters are between the cases in Cyrillic. 4038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org BetweenCases: false}; 4138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 4238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgvar SIGMA = "\u03a3"; 4338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgvar sigma = "\u03c3"; 4438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgvar alternative_sigma = "\u03c2"; 4538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 4638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// Greek. 4738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgvar greek = { 4838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org FIRST: "\u0391", // ALPHA 4938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org first: "\u03b1", // alpha 5038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org LAST: "\u03a9", // OMEGA 5138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org last: "\u03c9", // omega 5238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org MIDDLE: SIGMA, // SIGMA 5338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org middle: sigma, // sigma 5438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // Epsilon acute is between ALPHA-OMEGA and alpha-omega, ie it 5538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // is between OMEGA and alpha. 5638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org BetweenCases: "\u03ad"}; 5738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 5838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 5938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgfunction Range(from, to, flags) { 6038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org return new RegExp("[" + from + "-" + to + "]", flags); 6138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org} 6238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 6338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// Test Cyrillic and Greek separately. 6438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgfor (var lang = 0; lang < 2; lang++) { 6538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var chars = (lang == 0) ? cyrillic : greek; 6638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 6738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org for (var i = 0; i < 2; i++) { 6838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var lc = (i == 0); // Lower case. 6938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var first = lc ? chars.first : chars.FIRST; 7038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var middle = lc ? chars.middle : chars.MIDDLE; 7138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var last = lc ? chars.last : chars.LAST; 7238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var first_other_case = lc ? chars.FIRST : chars.first; 7338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var middle_other_case = lc ? chars.MIDDLE : chars.middle; 7438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var last_other_case = lc ? chars.LAST : chars.last; 7538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 7638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(first, last).test(first), 1); 7738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(first, last).test(middle), 2); 7838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(first, last).test(last), 3); 7938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 8038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(Range(first, last).test(first_other_case), 4); 8138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(Range(first, last).test(middle_other_case), 5); 8238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(Range(first, last).test(last_other_case), 6); 8338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 8438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(first, last, "i").test(first), 7); 8538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(first, last, "i").test(middle), 8); 8638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(first, last, "i").test(last), 9); 8738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 8838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(first, last, "i").test(first_other_case), 10); 8938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(first, last, "i").test(middle_other_case), 11); 9038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(first, last, "i").test(last_other_case), 12); 9138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 9238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org if (chars.BetweenCases) { 9338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(Range(first, last).test(chars.BetweenCases), 13); 9438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(Range(first, last, "i").test(chars.BetweenCases), 14); 9538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org } 9638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org } 9738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org if (chars.BetweenCases) { 9838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(chars.FIRST, chars.last).test(chars.BetweenCases), 15); 9938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(chars.FIRST, chars.last, "i").test(chars.BetweenCases), 16); 10038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org } 10138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org} 10238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 10338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// Test range that covers both greek and cyrillic characters. 10438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgfor (key in greek) { 10538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(greek.FIRST, cyrillic.last).test(greek[key]), 17 + key); 10638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org if (cyrillic[key]) { 10738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(greek.FIRST, cyrillic.last).test(cyrillic[key]), 18 + key); 10838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org } 10938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org} 11038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 11138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgfor (var i = 0; i < 2; i++) { 11238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var ignore_case = (i == 0); 11338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var flag = ignore_case ? "i" : ""; 11438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(greek.first, cyrillic.LAST, flag).test(greek.first), 19); 11538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(greek.first, cyrillic.LAST, flag).test(greek.middle), 20); 11638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(greek.first, cyrillic.LAST, flag).test(greek.last), 21); 11738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 11838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(greek.first, cyrillic.LAST, flag).test(cyrillic.FIRST), 22); 11938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(greek.first, cyrillic.LAST, flag).test(cyrillic.MIDDLE), 23); 12038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(Range(greek.first, cyrillic.LAST, flag).test(cyrillic.LAST), 24); 12138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 12238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // A range that covers the lower case greek letters and the upper case cyrillic 12338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // letters. 12438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertEquals(ignore_case, Range(greek.first, cyrillic.LAST, flag).test(greek.FIRST), 25); 12538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertEquals(ignore_case, Range(greek.first, cyrillic.LAST, flag).test(greek.MIDDLE), 26); 12638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertEquals(ignore_case, Range(greek.first, cyrillic.LAST, flag).test(greek.LAST), 27); 12738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 12838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertEquals(ignore_case, Range(greek.first, cyrillic.LAST, flag).test(cyrillic.first), 28); 12938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertEquals(ignore_case, Range(greek.first, cyrillic.LAST, flag).test(cyrillic.middle), 29); 13038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertEquals(ignore_case, Range(greek.first, cyrillic.LAST, flag).test(cyrillic.last), 30); 13138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org} 13238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 13338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 13438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// Sigma is special because there are two lower case versions of the same upper 13538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// case character. JS requires that case independece means that you should 13638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// convert everything to upper case, so the two sigma variants are equal to each 13738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org// other in a case independt comparison. 13838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgfor (var i = 0; i < 2; i++) { 13938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var simple = (i != 0); 14038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var name = simple ? "" : "[]"; 14138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var regex = simple ? SIGMA : "[" + SIGMA + "]"; 14238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 14338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(new RegExp(regex).test(sigma), 31 + name); 14438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(new RegExp(regex).test(alternative_sigma), 32 + name); 14538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex).test(SIGMA), 33 + name); 14638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 14738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex, "i").test(sigma), 34 + name); 14838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // JSC and Tracemonkey fail this one. 14938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex, "i").test(alternative_sigma), 35 + name); 15038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex, "i").test(SIGMA), 36 + name); 15138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 15238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org regex = simple ? sigma : "[" + sigma + "]"; 15338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 15438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex).test(sigma), 41 + name); 15538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(new RegExp(regex).test(alternative_sigma), 42 + name); 15638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(new RegExp(regex).test(SIGMA), 43 + name); 15738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 15838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex, "i").test(sigma), 44 + name); 15938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // JSC and Tracemonkey fail this one. 16038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex, "i").test(alternative_sigma), 45 + name); 16138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex, "i").test(SIGMA), 46 + name); 16238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 16338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org regex = simple ? alternative_sigma : "[" + alternative_sigma + "]"; 16438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 16538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(new RegExp(regex).test(sigma), 51 + name); 16638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex).test(alternative_sigma), 52 + name); 16738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertFalse(new RegExp(regex).test(SIGMA), 53 + name); 16838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 16938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // JSC and Tracemonkey fail this one. 17038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex, "i").test(sigma), 54 + name); 17138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex, "i").test(alternative_sigma), 55 + name); 17238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // JSC and Tracemonkey fail this one. 17338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(new RegExp(regex, "i").test(SIGMA), 56 + name); 17438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org} 17538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 17638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org 17738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.orgfor (var add_non_ascii_character_to_subject = 0; 17838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org add_non_ascii_character_to_subject < 2; 17938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org add_non_ascii_character_to_subject++) { 18038e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var suffix = add_non_ascii_character_to_subject ? "\ufffe" : ""; 18138e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org // A range that covers both ASCII and non-ASCII. 18238e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org for (var i = 0; i < 2; i++) { 18338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var full = (i != 0); 18438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var mixed = full ? "[a-\uffff]" : "[a-" + cyrillic.LAST + "]"; 18538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var f = full ? "f" : "c"; 18638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org for (var j = 0; j < 2; j++) { 18738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var ignore_case = (j == 0); 18838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var flag = ignore_case ? "i" : ""; 18938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org var re = new RegExp(mixed, flag); 190160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org var expected = 191160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org ignore_case || (full && !!add_non_ascii_character_to_subject); 192160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org assertEquals(expected, re.test("A" + suffix), 58 + flag + f); 19338e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(re.test("a" + suffix), 59 + flag + f); 19438e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(re.test("~" + suffix), 60 + flag + f); 19538e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertTrue(re.test(cyrillic.MIDDLE), 61 + flag + f); 19638e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org assertEquals(ignore_case || full, re.test(cyrillic.middle), 62 + flag + f); 19738e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org } 19838e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org } 19938e4c715e3a3df4ef11ccd3b86525be8f686ecb5ager@chromium.org} 200