Index: third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaperTest.cpp |
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaperTest.cpp b/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaperTest.cpp |
index 198e599fed66a07c6ca0545d453b9f34baea21db..bf2a529d6b7af5c04644e7e77b265bfd2614d6bf 100644 |
--- a/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaperTest.cpp |
+++ b/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaperTest.cpp |
@@ -180,6 +180,143 @@ TEST_F(CachingWordShaperTest, SubRunWithZeroGlyphs) |
shaper.selectionRect(&font, textRun, point, height, 0, 8); |
} |
+TEST_F(CachingWordShaperTest, SegmentCJKByCharacter) |
+{ |
+ const UChar str[] = { |
+ 0x56FD, 0x56FD, // CJK Unified Ideograph |
+ 'a', 'b', |
+ 0x56FD, // CJK Unified Ideograph |
+ 'x', 'y', 'z', |
+ 0x3042, // HIRAGANA LETTER A |
+ 0x56FD, // CJK Unified Ideograph |
+ 0x0 |
+ }; |
+ TextRun textRun(str, 10); |
+ |
+ RefPtr<ShapeResult> wordResult; |
+ CachingWordShapeIterator iterator(cache.get(), textRun, &font); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(2u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(3u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ |
+ ASSERT_FALSE(iterator.next(&wordResult)); |
+} |
+ |
+TEST_F(CachingWordShaperTest, SegmentCJKAndCommon) |
+{ |
+ const UChar str[] = { |
+ 'a', 'b', |
+ 0xFF08, // FULLWIDTH LEFT PARENTHESIS (script=common) |
+ 0x56FD, // CJK Unified Ideograph |
+ 0x56FD, // CJK Unified Ideograph |
+ 0x56FD, // CJK Unified Ideograph |
+ 0x3002, // IDEOGRAPHIC FULL STOP (script=common) |
+ 0x0 |
+ }; |
+ TextRun textRun(str, 7); |
+ |
+ RefPtr<ShapeResult> wordResult; |
+ CachingWordShapeIterator iterator(cache.get(), textRun, &font); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(2u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(2u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(2u, wordResult->numCharacters()); |
+ |
+ ASSERT_FALSE(iterator.next(&wordResult)); |
+} |
+ |
+TEST_F(CachingWordShaperTest, SegmentCJKAndInherit) |
+{ |
+ const UChar str[] = { |
+ 0x304B, // HIRAGANA LETTER KA |
+ 0x304B, // HIRAGANA LETTER KA |
+ 0x3009, // COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK |
+ 0x304B, // HIRAGANA LETTER KA |
+ 0x0 |
+ }; |
+ TextRun textRun(str, 4); |
+ |
+ RefPtr<ShapeResult> wordResult; |
+ CachingWordShapeIterator iterator(cache.get(), textRun, &font); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(2u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ |
+ ASSERT_FALSE(iterator.next(&wordResult)); |
+} |
+ |
+TEST_F(CachingWordShaperTest, SegmentCJKAndNonCJKCommon) |
+{ |
+ const UChar str[] = { |
+ 0x56FD, // CJK Unified Ideograph |
+ ' ', |
+ 0x0 |
+ }; |
+ TextRun textRun(str, 2); |
+ |
+ RefPtr<ShapeResult> wordResult; |
+ CachingWordShapeIterator iterator(cache.get(), textRun, &font); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ |
+ ASSERT_FALSE(iterator.next(&wordResult)); |
+} |
+ |
+TEST_F(CachingWordShaperTest, SegmentCJKCommonAndNonCJK) |
drott
2015/12/21 14:57:41
Could you add one test with only COMMON, no actual
kojii
2015/12/21 15:34:53
Done.
|
+{ |
+ const UChar str[] = { |
+ 0xFF08, // FULLWIDTH LEFT PARENTHESIS (script=common) |
+ 'a', 'b', |
+ 0x0 |
+ }; |
+ TextRun textRun(str, 3); |
+ |
+ RefPtr<ShapeResult> wordResult; |
+ CachingWordShapeIterator iterator(cache.get(), textRun, &font); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(1u, wordResult->numCharacters()); |
+ |
+ ASSERT_TRUE(iterator.next(&wordResult)); |
+ EXPECT_EQ(2u, wordResult->numCharacters()); |
+ |
+ ASSERT_FALSE(iterator.next(&wordResult)); |
+} |
+ |
TEST_F(CachingWordShaperTest, TextOrientationFallbackShouldNotInFallbackList) |
{ |
const UChar str[] = { |