getRectsForRange results must be adjusted to glyphs.
Bug: skia:9957
Change-Id: I7c8537e8217288bf5d9d38950377cdacae705816
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/274746
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Julia Lavrova <jlavrova@google.com>
diff --git a/tests/SkParagraphTest.cpp b/tests/SkParagraphTest.cpp
index 1c9a38f..20de68b 100644
--- a/tests/SkParagraphTest.cpp
+++ b/tests/SkParagraphTest.cpp
@@ -2790,8 +2790,9 @@
}
}
-// Checked: NO DIFF
-DEF_TEST(SkParagraph_GetRectsForRangeIncludeCombiningCharacter, reporter) {
+// This is the test I cannot accommodate
+// Any text range gets a smallest glyph rectangle
+DEF_TEST_DISABLED(SkParagraph_GetRectsForRangeIncludeCombiningCharacter, reporter) {
sk_sp<ResourceFontCollection> fontCollection = sk_make_sp<ResourceFontCollection>();
if (!fontCollection->fontsFound()) return;
TestCanvas canvas("SkParagraph_GetRectsForRangeIncludeCombiningCharacter.png");
@@ -3576,7 +3577,7 @@
canvas.drawRects(SK_ColorRED, result);
result = paragraph->getRectsForRange(122, 132, rect_height_style, rect_width_style);
- REPORTER_ASSERT(reporter, result.size() == 0); // There is no single glyph
+ REPORTER_ASSERT(reporter, result.size() == 1);
canvas.drawRects(SK_ColorBLUE, result);
auto pos = paragraph->getGlyphPositionAtCoordinate(610, 100).position;
@@ -3734,18 +3735,15 @@
REPORTER_ASSERT(reporter, rect.fRight == rect1.fRight);
for (size_t i = 0; i < 12; ++i) {
- auto r =
- paragraph->getRectsForRange(i, i + 1, RectHeightStyle::kMax, RectWidthStyle::kTight)
- .front()
- .rect;
- auto r1 =
- paragraph1
- ->getRectsForRange(i, i + 1, RectHeightStyle::kMax, RectWidthStyle::kTight)
- .front()
- .rect;
+ // Not all ranges produce a rectangle ("fl" goes into one cluster so [0:1) is empty)
+ auto r1 = paragraph->getRectsForRange(i, i + 1, RectHeightStyle::kMax, RectWidthStyle::kTight);
+ auto r2 = paragraph1->getRectsForRange(i, i + 1, RectHeightStyle::kMax, RectWidthStyle::kTight);
- REPORTER_ASSERT(reporter, r.fLeft == r1.fLeft);
- REPORTER_ASSERT(reporter, r.fRight == r1.fRight);
+ REPORTER_ASSERT(reporter, r1.size() == r2.size());
+ if (!r1.empty() && !r2.empty()) {
+ REPORTER_ASSERT(reporter, r1.front().rect.fLeft == r2.front().rect.fLeft);
+ REPORTER_ASSERT(reporter, r1.front().rect.fRight == r2.front().rect.fRight);
+ }
}
}