Chromium Code Reviews| 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[] = { |