1// Copyright 2013 the V8 project authors. All rights reserved. 2// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions 6// are met: 7// 1. Redistributions of source code must retain the above copyright 8// notice, this list of conditions and the following disclaimer. 9// 2. Redistributions in binary form must reproduce the above copyright 10// notice, this list of conditions and the following disclaimer in the 11// documentation and/or other materials provided with the distribution. 12// 13// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 20// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 24description( 25"This test checks Unicode in negative RegExp character classes." 26); 27 28function test(pattern, str, expected_length) { 29 var result = eval('"' + str + '"').replace(new RegExp(pattern, 'img'), ''); 30 31 if (result.length == expected_length) 32 testPassed('"' + pattern + '", ' + '"' + str + '".'); 33 else 34 testFailed('"' + pattern + '", ' + '"' + str + '". Was "' + result + '".'); 35} 36 37 38test("\\s", " \\t\\f\\v\\r\\n", 0); // ASCII whitespace. 39test("\\S", "Проверка", 0); // Cyrillic letters are non-whitespace... 40test("\\s", "Проверка", 8); // ...and they aren't whitespace. 41test("[\\s]", "Проверка", 8); 42test("[\\S]", "Проверка", 0); 43test("[^\\s]", "Проверка", 0); 44test("[^\\S]", "Проверка", 8); 45test("[\\s\\S]*", "\\u2002Проверка\\r\\n\\u00a0", 0); 46test("\\S\\S", "уф", 0); 47test("\\S{2}", "уф", 0); 48 49test("\\w", "Проверка", 8); // Alas, only ASCII characters count as word ones in JS. 50test("\\W", "Проверка", 0); 51test("[\\w]", "Проверка", 8); 52test("[\\W]", "Проверка", 0); 53test("[^\\w]", "Проверка", 0); 54test("[^\\W]", "Проверка", 8); 55test("\\W\\W", "уф", 0); 56test("\\W{2}", "уф", 0); 57 58test("\\d", "Проверка", 8); // Digit and non-digit. 59test("\\D", "Проверка", 0); 60test("[\\d]", "Проверка", 8); 61test("[\\D]", "Проверка", 0); 62test("[^\\d]", "Проверка", 0); 63test("[^\\D]", "Проверка", 8); 64test("\\D\\D", "уф", 0); 65test("\\D{2}", "уф", 0); 66 67test("[\\S\\d]", "Проверка123", 0); 68test("[\\d\\S]", "Проверка123", 0); 69test("[^\\S\\d]", "Проверка123", 11); 70test("[^\\d\\S]", "Проверка123", 11); 71 72test("[ \\S]", " Проверка ", 0); 73test("[\\S ]", " Проверка ", 0); 74test("[ф \\S]", " Проверка ", 0); 75test("[\\Sф ]", " Проверка ", 0); 76 77test("[^р\\S]", " Проверка ", 8); 78test("[^\\Sр]", " Проверка ", 8); 79test("[^р\\s]", " Проверка ", 4); 80test("[^\\sр]", " Проверка ", 4); 81 82test("[ф \\s\\S]", "Проверка \\r\\n", 0); 83test("[\\S\\sф ]", "Проверка \\r\\n", 0); 84 85test("[^z]", "Проверка \\r\\n", 0); 86test("[^ф]", "Проверка \\r\\n", 0); 87