a5dfa06213
Unibrow is currently at Unicode version 7.0.0, which does not include mongolian vowel separator (\u180E) as white space. In order to appease test262 at the time however we kept it as a whitespace. Test262 has since then been updated. And while this is not an update of unibrow, we are removing \u180E as white space here. R=jshin@chromium.org, littledan@chromium.org BUG=v8:5155 Review-Url: https://codereview.chromium.org/2720953003 Cr-Commit-Position: refs/heads/master@{#43485}
120 lines
4.2 KiB
C++
120 lines
4.2 KiB
C++
// 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(CharPredicatesTest, 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(0xFEFF));
|
|
}
|
|
|
|
|
|
TEST(CharPredicatesTest, 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(0xFEFF));
|
|
// Line terminators
|
|
EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000A));
|
|
EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000D));
|
|
EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x2028));
|
|
EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x2029));
|
|
}
|
|
|
|
|
|
TEST(CharPredicatesTest, 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(CharPredicatesTest, 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));
|
|
}
|
|
|
|
|
|
#ifdef V8_I18N_SUPPORT
|
|
TEST(CharPredicatesTest, SupplementaryPlaneIdentifiers) {
|
|
// Both ID_Start and ID_Continue.
|
|
EXPECT_TRUE(IdentifierStart::Is(0x10403)); // Category Lu
|
|
EXPECT_TRUE(IdentifierPart::Is(0x10403));
|
|
EXPECT_TRUE(IdentifierStart::Is(0x1043C)); // Category Ll
|
|
EXPECT_TRUE(IdentifierPart::Is(0x1043C));
|
|
EXPECT_TRUE(IdentifierStart::Is(0x16F9C)); // Category Lm
|
|
EXPECT_TRUE(IdentifierPart::Is(0x16F9C));
|
|
EXPECT_TRUE(IdentifierStart::Is(0x10048)); // Category Lo
|
|
EXPECT_TRUE(IdentifierPart::Is(0x10048));
|
|
EXPECT_TRUE(IdentifierStart::Is(0x1014D)); // Category Nl
|
|
EXPECT_TRUE(IdentifierPart::Is(0x1014D));
|
|
|
|
// Only ID_Continue.
|
|
EXPECT_FALSE(IdentifierStart::Is(0x101FD)); // Category Mn
|
|
EXPECT_TRUE(IdentifierPart::Is(0x101FD));
|
|
EXPECT_FALSE(IdentifierStart::Is(0x11002)); // Category Mc
|
|
EXPECT_TRUE(IdentifierPart::Is(0x11002));
|
|
EXPECT_FALSE(IdentifierStart::Is(0x104A9)); // Category Nd
|
|
EXPECT_TRUE(IdentifierPart::Is(0x104A9));
|
|
|
|
// Neither.
|
|
EXPECT_FALSE(IdentifierStart::Is(0x10111)); // Category No
|
|
EXPECT_FALSE(IdentifierPart::Is(0x10111));
|
|
EXPECT_FALSE(IdentifierStart::Is(0x1F4A9)); // Category So
|
|
EXPECT_FALSE(IdentifierPart::Is(0x1F4A9));
|
|
}
|
|
#endif // V8_I18N_SUPPORT
|
|
|
|
} // namespace internal
|
|
} // namespace v8
|