diff options
Diffstat (limited to 'tests/GlyphRunTest.cpp')
-rw-r--r-- | tests/GlyphRunTest.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/GlyphRunTest.cpp b/tests/GlyphRunTest.cpp index b87edc7731..49d7340aca 100644 --- a/tests/GlyphRunTest.cpp +++ b/tests/GlyphRunTest.cpp @@ -49,3 +49,57 @@ DEF_TEST(GlyphRunBasic, reporter) { SkGlyphRunBuilder builder; builder.drawText(paint, glyphs, count, SkPoint::Make(0, 0)); } + +DEF_TEST(GlyphRunBlob, reporter) { + constexpr uint16_t count = 5; + constexpr int runCount = 2; + + auto tf = SkTypeface::MakeFromName("monospace", SkFontStyle()); + + SkPaint font; + font.setTypeface(tf); + font.setTextEncoding(SkPaint::kGlyphID_TextEncoding); + font.setTextAlign(SkPaint::kLeft_Align); + font.setStyle(SkPaint::kFill_Style); + font.setHinting(SkPaint::kNormal_Hinting); + font.setTextSize(1u); + + SkTextBlobBuilder blobBuilder; + for (int runNum = 0; runNum < runCount; runNum++) { + const auto& runBuffer = blobBuilder.allocRunPosH(font, count, runNum); + SkASSERT(runBuffer.utf8text == nullptr); + SkASSERT(runBuffer.clusters == nullptr); + + for (int i = 0; i < count; i++) { + runBuffer.glyphs[i] = static_cast<SkGlyphID>(i + runNum * count); + runBuffer.pos[i] = SkIntToScalar(i + runNum * count); + } + } + + auto blob = blobBuilder.make(); + + SkPaint paint; + paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); + + SkGlyphRunBuilder runBuilder; + runBuilder.drawTextBlob(font, *blob, SkPoint::Make(0, 0)); + + auto runList = runBuilder.useGlyphRunList(); + + REPORTER_ASSERT(reporter, runList->size() == runCount); + int runIndex = 0; + for (auto& run : *runList) { + REPORTER_ASSERT(reporter, run.runSize() == count); + + int index = 0; + for (auto p : run.positions()) { + if (p.x() != runIndex * count + index) { + ERRORF(reporter, "x: %g != k: %d", p.x(), runIndex * count + index); + break; + } + index += 1; + } + + runIndex += 1; + } +} |