| Index: test/unittests/unicode/unicode-predicates-unittest.cc
|
| diff --git a/test/unittests/unicode/unicode-predicates-unittest.cc b/test/unittests/unicode/unicode-predicates-unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..88008d55bd22e81d33781c39ffe71b070fffe4e9
|
| --- /dev/null
|
| +++ b/test/unittests/unicode/unicode-predicates-unittest.cc
|
| @@ -0,0 +1,90 @@
|
| +// Copyright 2014 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "src/char-predicates.h"
|
| +#include "src/unicode.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace v8 {
|
| +namespace internal {
|
| +
|
| +TEST(UnicodePredicatesTest, WhiteSpace) {
|
| + // As of Unicode 6.3.0, \u180E is no longer a white space. We still consider
|
| + // it to be one though, since JS recognizes all white spaces in Unicode 5.1.
|
| + EXPECT_TRUE(WhiteSpace::Is(0x0009));
|
| + EXPECT_TRUE(WhiteSpace::Is(0x000B));
|
| + EXPECT_TRUE(WhiteSpace::Is(0x000C));
|
| + EXPECT_TRUE(WhiteSpace::Is(' '));
|
| + EXPECT_TRUE(WhiteSpace::Is(0x00A0));
|
| + EXPECT_TRUE(WhiteSpace::Is(0x180E));
|
| + EXPECT_TRUE(WhiteSpace::Is(0xFEFF));
|
| +}
|
| +
|
| +
|
| +TEST(UnicodePredicatesTest, WhiteSpaceOrLineTerminator) {
|
| + // As of Unicode 6.3.0, \u180E is no longer a white space. We still consider
|
| + // it to be one though, since JS recognizes all white spaces in Unicode 5.1.
|
| + // White spaces
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x0009));
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000B));
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000C));
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(' '));
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x00A0));
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x180E));
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0xFEFF));
|
| + // Line terminators
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000A));
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000D));
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x2028));
|
| + EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x2029));
|
| +}
|
| +
|
| +
|
| +TEST(UnicodePredicatesTest, IdentifierStart) {
|
| + EXPECT_TRUE(IdentifierStart::Is('$'));
|
| + EXPECT_TRUE(IdentifierStart::Is('_'));
|
| + EXPECT_TRUE(IdentifierStart::Is('\\'));
|
| +
|
| + // http://www.unicode.org/reports/tr31/
|
| + // Other_ID_Start
|
| + EXPECT_TRUE(IdentifierStart::Is(0x2118));
|
| + EXPECT_TRUE(IdentifierStart::Is(0x212E));
|
| + EXPECT_TRUE(IdentifierStart::Is(0x309B));
|
| + EXPECT_TRUE(IdentifierStart::Is(0x309C));
|
| +
|
| + // Issue 2892:
|
| + // \u2E2F has the Pattern_Syntax property, excluding it from ID_Start.
|
| + EXPECT_FALSE(unibrow::ID_Start::Is(0x2E2F));
|
| +}
|
| +
|
| +
|
| +TEST(UnicodePredicatesTest, IdentifierPart) {
|
| + EXPECT_TRUE(IdentifierPart::Is('$'));
|
| + EXPECT_TRUE(IdentifierPart::Is('_'));
|
| + EXPECT_TRUE(IdentifierPart::Is('\\'));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x200C));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x200D));
|
| +
|
| + // http://www.unicode.org/reports/tr31/
|
| + // Other_ID_Start
|
| + EXPECT_TRUE(IdentifierPart::Is(0x2118));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x212E));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x309B));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x309C));
|
| +
|
| + // Other_ID_Continue
|
| + EXPECT_TRUE(IdentifierPart::Is(0x00B7));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x0387));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x1369));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x1370));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x1371));
|
| + EXPECT_TRUE(IdentifierPart::Is(0x19DA));
|
| +
|
| + // Issue 2892:
|
| + // \u2E2F has the Pattern_Syntax property, excluding it from ID_Start.
|
| + EXPECT_FALSE(IdentifierPart::Is(0x2E2F));
|
| +}
|
| +
|
| +} // namespace internal
|
| +} // namespace v8
|
|
|