Index: third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp |
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp |
index 7b43d4a5e349126d350bce9c17ee63acc964cefe..12f0c6e36bcb21aba4c017e61a2fd8e93fb241a5 100644 |
--- a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp |
+++ b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp |
@@ -265,4 +265,86 @@ TEST_F(HarfBuzzShaperTest, DISABLED_ShapeArabicWithContext) { |
ASSERT_NEAR(combined->width(), first->width() + second->width(), 0.1); |
} |
+TEST_F(HarfBuzzShaperTest, PositionForOffsetLatin) { |
+ String string = to16Bit("Hello World!", 12); |
+ TextDirection direction = TextDirection::kLtr; |
+ |
+ HarfBuzzShaper shaper(string.characters16(), 12); |
+ RefPtr<ShapeResult> result = shaper.shape(&font, direction); |
+ RefPtr<ShapeResult> first = shaper.shape(&font, direction, 0, 5); // Hello |
+ RefPtr<ShapeResult> second = shaper.shape(&font, direction, 6, 11); // World |
+ |
+ ASSERT_EQ(0.0f, result->positionForOffset(0)); |
+ ASSERT_NEAR(first->width(), result->positionForOffset(5), 1); |
+ ASSERT_NEAR(second->width(), |
+ result->positionForOffset(11) - result->positionForOffset(6), 1); |
+ ASSERT_NEAR(result->width(), result->positionForOffset(12), 0.1); |
+} |
+ |
+TEST_F(HarfBuzzShaperTest, PositionForOffsetArabic) { |
+ UChar arabicString[] = {0x628, 0x64A, 0x629}; |
+ TextDirection direction = TextDirection::kRtl; |
+ |
+ HarfBuzzShaper shaper(arabicString, 3); |
+ RefPtr<ShapeResult> result = shaper.shape(&font, direction); |
+ |
+ ASSERT_EQ(0.0f, result->positionForOffset(3)); |
+ ASSERT_NEAR(result->width(), result->positionForOffset(0), 0.1); |
+} |
+ |
+TEST_F(HarfBuzzShaperTest, OffsetForPositionMatchesPositionForOffsetLatin) { |
+ String string = to16Bit("Hello World!", 12); |
+ TextDirection direction = TextDirection::kLtr; |
+ |
+ HarfBuzzShaper shaper(string.characters16(), 12); |
+ RefPtr<ShapeResult> result = shaper.shape(&font, direction); |
+ |
+ // Last argument is includePartialGlyphs |
+ ASSERT_EQ(0u, result->offsetForPosition(result->positionForOffset(0), true)); |
+ ASSERT_EQ(1u, result->offsetForPosition(result->positionForOffset(1), true)); |
+ ASSERT_EQ(2u, result->offsetForPosition(result->positionForOffset(2), true)); |
+ ASSERT_EQ(3u, result->offsetForPosition(result->positionForOffset(3), true)); |
+ ASSERT_EQ(4u, result->offsetForPosition(result->positionForOffset(4), true)); |
+ ASSERT_EQ(5u, result->offsetForPosition(result->positionForOffset(5), true)); |
+ ASSERT_EQ(6u, result->offsetForPosition(result->positionForOffset(6), true)); |
+ ASSERT_EQ(7u, result->offsetForPosition(result->positionForOffset(7), true)); |
+ ASSERT_EQ(8u, result->offsetForPosition(result->positionForOffset(8), true)); |
+ ASSERT_EQ(9u, result->offsetForPosition(result->positionForOffset(9), true)); |
+ ASSERT_EQ(10u, |
+ result->offsetForPosition(result->positionForOffset(10), true)); |
+ ASSERT_EQ(11u, |
+ result->offsetForPosition(result->positionForOffset(11), true)); |
+ ASSERT_EQ(12u, |
+ result->offsetForPosition(result->positionForOffset(12), true)); |
+} |
+ |
+TEST_F(HarfBuzzShaperTest, OffsetForPositionMatchesPositionForOffsetArabic) { |
+ UChar arabicString[] = {0x628, 0x64A, 0x629}; |
+ TextDirection direction = TextDirection::kRtl; |
+ |
+ HarfBuzzShaper shaper(arabicString, 3); |
+ RefPtr<ShapeResult> result = shaper.shape(&font, direction); |
+ |
+ // Last argument is includePartialGlyphs |
+ ASSERT_EQ(0u, result->offsetForPosition(result->positionForOffset(0), true)); |
+ ASSERT_EQ(1u, result->offsetForPosition(result->positionForOffset(1), true)); |
+ ASSERT_EQ(2u, result->offsetForPosition(result->positionForOffset(2), true)); |
+ ASSERT_EQ(3u, result->offsetForPosition(result->positionForOffset(3), true)); |
+} |
+ |
+TEST_F(HarfBuzzShaperTest, OffsetForPositionMatchesPositionForOffsetMixed) { |
+ UChar mixedString[] = {0x628, 0x64A, 0x629, 0xE20, 0x65E5, 0x62}; |
+ HarfBuzzShaper shaper(mixedString, 6); |
+ RefPtr<ShapeResult> result = shaper.shape(&font, TextDirection::kLtr); |
+ |
+ // Last argument is includePartialGlyphs |
+ ASSERT_EQ(0u, result->offsetForPosition(result->positionForOffset(0), true)); |
+ ASSERT_EQ(1u, result->offsetForPosition(result->positionForOffset(1), true)); |
+ ASSERT_EQ(2u, result->offsetForPosition(result->positionForOffset(2), true)); |
+ ASSERT_EQ(3u, result->offsetForPosition(result->positionForOffset(3), true)); |
+ ASSERT_EQ(4u, result->offsetForPosition(result->positionForOffset(4), true)); |
+ ASSERT_EQ(5u, result->offsetForPosition(result->positionForOffset(5), true)); |
+ ASSERT_EQ(6u, result->offsetForPosition(result->positionForOffset(6), true)); |
+} |
+ |
} // namespace blink |