Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Unified Diff: third_party/WebKit/Source/platform/fonts/shaping/ShapingLineBreakerTest.cpp

Issue 2875933006: [LayoutNG] Misc fixes in ShapingLineBreaker (Closed)
Patch Set: eae review + RTL snapping fixes Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/fonts/shaping/ShapingLineBreaker.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/fonts/shaping/ShapingLineBreakerTest.cpp
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/ShapingLineBreakerTest.cpp b/third_party/WebKit/Source/platform/fonts/shaping/ShapingLineBreakerTest.cpp
index 73c5f81119a6d10e75a22741f097c6ac26a28433..b70b4ed9a240085812c2393aba213b65a764e181 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/ShapingLineBreakerTest.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/ShapingLineBreakerTest.cpp
@@ -44,9 +44,8 @@ TEST_F(ShapingLineBreakerTest, ShapeLineLatin) {
"Test run with multiple words and breaking "
"opportunities.",
56);
- const AtomicString locale = "en-US";
+ LazyLineBreakIterator break_iterator(string, "en-US", LineBreakType::kNormal);
TextDirection direction = TextDirection::kLtr;
- LineBreakType break_type = LineBreakType::kNormal;
HarfBuzzShaper shaper(string.Characters16(), 56);
RefPtr<ShapeResult> result = shaper.Shape(&font, direction);
@@ -67,7 +66,7 @@ TEST_F(ShapingLineBreakerTest, ShapeLineLatin) {
RefPtr<ShapeResult> first1 = shaper.Shape(&font, direction, 0, 4);
ASSERT_LT(first1->SnappedWidth(), first2->SnappedWidth());
- ShapingLineBreaker breaker(&shaper, &font, result.Get(), locale, break_type);
+ ShapingLineBreaker breaker(&shaper, &font, result.Get(), &break_iterator);
RefPtr<ShapeResult> line;
unsigned break_offset = 0;
@@ -117,16 +116,15 @@ TEST_F(ShapingLineBreakerTest, ShapeLineLatin) {
TEST_F(ShapingLineBreakerTest, ShapeLineLatinMultiLine) {
String string = To16Bit("Line breaking test case.", 24);
- const AtomicString locale = "en-US";
+ LazyLineBreakIterator break_iterator(string, "en-US", LineBreakType::kNormal);
TextDirection direction = TextDirection::kLtr;
- LineBreakType break_type = LineBreakType::kNormal;
HarfBuzzShaper shaper(string.Characters16(), 24);
RefPtr<ShapeResult> result = shaper.Shape(&font, direction);
RefPtr<ShapeResult> first = shaper.Shape(&font, direction, 0, 4);
RefPtr<ShapeResult> mid_third = shaper.Shape(&font, direction, 0, 16);
- ShapingLineBreaker breaker(&shaper, &font, result.Get(), locale, break_type);
+ ShapingLineBreaker breaker(&shaper, &font, result.Get(), &break_iterator);
unsigned break_offset = 0;
breaker.ShapeLine(0, result->SnappedWidth() - 1, &break_offset);
@@ -144,15 +142,15 @@ TEST_F(ShapingLineBreakerTest, ShapeLineLatinMultiLine) {
TEST_F(ShapingLineBreakerTest, ShapeLineLatinBreakAll) {
String string = To16Bit("Testing break type-break all.", 29);
- const AtomicString locale = "en-US";
+ LazyLineBreakIterator break_iterator(string, "en-US",
+ LineBreakType::kBreakAll);
TextDirection direction = TextDirection::kLtr;
- LineBreakType break_type = LineBreakType::kBreakAll;
HarfBuzzShaper shaper(string.Characters16(), 29);
RefPtr<ShapeResult> result = shaper.Shape(&font, direction);
RefPtr<ShapeResult> midpoint = shaper.Shape(&font, direction, 0, 16);
- ShapingLineBreaker breaker(&shaper, &font, result.Get(), locale, break_type);
+ ShapingLineBreaker breaker(&shaper, &font, result.Get(), &break_iterator);
RefPtr<ShapeResult> line;
unsigned break_offset = 0;
@@ -165,18 +163,87 @@ TEST_F(ShapingLineBreakerTest, ShapeLineLatinBreakAll) {
EXPECT_GE(midpoint->SnappedWidth(), line->SnappedWidth());
}
-TEST_F(ShapingLineBreakerTest, ShapeLineArabicThaiHanLatinBreakAll) {
- UChar mixed_string[] = {0x628, 0x20, 0x64A, 0x629, 0x20, 0xE20, 0x65E5, 0x62};
- const AtomicString locale = "ar_AE";
+TEST_F(ShapingLineBreakerTest, ShapeLineZeroAvailableWidth) {
+ String string(u"Testing overflow line break.");
+ LazyLineBreakIterator break_iterator(string, "en-US", LineBreakType::kNormal);
+ TextDirection direction = TextDirection::kLtr;
+
+ HarfBuzzShaper shaper(string.Characters16(), string.length());
+ RefPtr<ShapeResult> result = shaper.Shape(&font, direction);
+
+ ShapingLineBreaker breaker(&shaper, &font, result.Get(), &break_iterator);
+ RefPtr<ShapeResult> line;
+ unsigned break_offset = 0;
+ LayoutUnit zero(0);
+
+ line = breaker.ShapeLine(0, zero, &break_offset);
+ EXPECT_EQ(7u, break_offset);
+
+ line = breaker.ShapeLine(7, zero, &break_offset);
+ EXPECT_EQ(16u, break_offset);
+
+ line = breaker.ShapeLine(16, zero, &break_offset);
+ EXPECT_EQ(21u, break_offset);
+
+ line = breaker.ShapeLine(21, zero, &break_offset);
+ EXPECT_EQ(28u, break_offset);
+}
+
+TEST_F(ShapingLineBreakerTest, ShapeLineArabicThaiHanLatin) {
+ UChar mixed_string[] = {0x628, 0x20, 0x64A, 0x629, 0x20,
+ 0xE20, 0x65E5, 0x62, 0};
+ LazyLineBreakIterator break_iterator(mixed_string, "ar_AE",
+ LineBreakType::kNormal);
TextDirection direction = TextDirection::kRtl;
- LineBreakType break_type = LineBreakType::kBreakAll;
HarfBuzzShaper shaper(mixed_string, 8);
RefPtr<ShapeResult> result = shaper.Shape(&font, direction);
-
- ShapingLineBreaker breaker(&shaper, &font, result.Get(), locale, break_type);
+ RefPtr<ShapeResult> words[] = {shaper.Shape(&font, direction, 0, 1),
+ shaper.Shape(&font, direction, 2, 4),
+ shaper.Shape(&font, direction, 5, 6),
+ shaper.Shape(&font, direction, 6, 7),
+ shaper.Shape(&font, direction, 7, 8)};
+ const auto& longest_word = std::max_element(
+ std::begin(words), std::end(words),
+ [](const RefPtr<ShapeResult>& a, const RefPtr<ShapeResult>& b) {
+ return a->SnappedWidth() < b->SnappedWidth();
+ });
+ LayoutUnit longest_word_width = (*longest_word)->SnappedWidth();
+
+ ShapingLineBreaker breaker(&shaper, &font, result.Get(), &break_iterator);
+ RefPtr<ShapeResult> line;
unsigned break_offset = 0;
- breaker.ShapeLine(3, result->SnappedWidth() / LayoutUnit(2), &break_offset);
+
+ breaker.ShapeLine(0, longest_word_width, &break_offset);
+ EXPECT_EQ(1u, break_offset);
+
+ breaker.ShapeLine(1, longest_word_width, &break_offset);
+ EXPECT_EQ(4u, break_offset);
+
+ breaker.ShapeLine(4, longest_word_width, &break_offset);
+ EXPECT_EQ(6u, break_offset);
+
+ breaker.ShapeLine(6, longest_word_width, &break_offset);
+ EXPECT_EQ(7u, break_offset);
+
+ breaker.ShapeLine(7, longest_word_width, &break_offset);
+ EXPECT_EQ(8u, break_offset);
}
+TEST_F(ShapingLineBreakerTest, ShapeLineRangeEndMidWord) {
+ String string(u"Mid word");
+ LazyLineBreakIterator break_iterator(string, "en-US", LineBreakType::kNormal);
+ TextDirection direction = TextDirection::kLtr;
+
+ HarfBuzzShaper shaper(string.Characters16(), string.length());
+ RefPtr<ShapeResult> result = shaper.Shape(&font, direction, 0, 2);
+
+ ShapingLineBreaker breaker(&shaper, &font, result.Get(), &break_iterator);
+ RefPtr<ShapeResult> line;
+ unsigned break_offset = 0;
+
+ line = breaker.ShapeLine(0, LayoutUnit::Max(), &break_offset);
+ EXPECT_EQ(3u, break_offset);
+ EXPECT_EQ(result->Width(), line->Width());
+}
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/platform/fonts/shaping/ShapingLineBreaker.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698