v8/test/unittests/char-predicates-unittest.cc
yangguo a5dfa06213 [unibrow] remove mongolian vowel separator as white space.
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}
2017-02-28 13:42:29 +00:00

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