Add a helper to FPDFTextEmbedderTest for use with rotated_text.pdf
Add GetRotatedTextFirstCharIndexForQuadrant() to abstract away the logic
that finds the first character in each quadrant in rotated_text.pdf. Add
some FPDFText_GetUnicode() calls to show the code does not actually get
the first character in each quadrant.
Change-Id: Id35b1b3039638455c2c7566fce6e740c15fd11cd
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/127992
Reviewed-by: Thomas Sepez <tsepez@google.com>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_text_embeddertest.cpp b/fpdfsdk/fpdf_text_embeddertest.cpp
index 815dd91..f2528d6 100644
--- a/fpdfsdk/fpdf_text_embeddertest.cpp
+++ b/fpdfsdk/fpdf_text_embeddertest.cpp
@@ -8,6 +8,7 @@
#include <vector>
#include "build/build_config.h"
+#include "core/fxcrt/notreached.h"
#include "core/fxcrt/stl_util.h"
#include "core/fxge/fx_font.h"
#include "public/cpp/fpdf_scopers.h"
@@ -28,6 +29,24 @@
constexpr char kHelloGoodbyeText[] = "Hello, world!\r\nGoodbye, world!";
constexpr int kHelloGoodbyeTextSize = std::size(kHelloGoodbyeText);
+// For use with rotated_text.pdf.
+int GetRotatedTextFirstCharIndexForQuadrant(int quadrant) {
+ static constexpr int kSubstringsSize[] = {
+ std::size("Hello,"), std::size(" world!\r\n"), std::size("Goodbye,")};
+ switch (quadrant) {
+ case 0:
+ return 0;
+ case 1:
+ return kSubstringsSize[0];
+ case 2:
+ return kSubstringsSize[0] + kSubstringsSize[1];
+ case 3:
+ return kSubstringsSize[0] + kSubstringsSize[1] + kSubstringsSize[2];
+ default:
+ NOTREACHED();
+ }
+}
+
} // namespace
class FPDFTextEmbedderTest : public EmbedderTest {};
@@ -1474,9 +1493,6 @@
ScopedFPDFTextPage text_page(FPDFText_LoadPage(page.get()));
ASSERT_TRUE(text_page);
- static constexpr int kSubstringsSize[] = {
- std::size("Hello,"), std::size(" world!\r\n"), std::size("Goodbye,")};
-
// -1 for CountChars not including the \0, but +1 for the extra control
// character.
EXPECT_EQ(kHelloGoodbyeTextSize, FPDFText_CountChars(text_page.get()));
@@ -1486,19 +1502,36 @@
EXPECT_FLOAT_EQ(
-1.0f, FPDFText_GetCharAngle(text_page.get(), kHelloGoodbyeTextSize + 1));
- // Test GetCharAngle for every quadrant
- EXPECT_NEAR(FXSYS_PI / 4.0, FPDFText_GetCharAngle(text_page.get(), 0), 0.001);
+ // Sanity check the characters.
+ EXPECT_EQ(static_cast<uint32_t>('H'),
+ FPDFText_GetUnicode(text_page.get(),
+ GetRotatedTextFirstCharIndexForQuadrant(0)));
+ EXPECT_EQ(static_cast<uint32_t>('w'),
+ FPDFText_GetUnicode(text_page.get(),
+ GetRotatedTextFirstCharIndexForQuadrant(1)));
+ EXPECT_EQ(static_cast<uint32_t>('o'),
+ FPDFText_GetUnicode(text_page.get(),
+ GetRotatedTextFirstCharIndexForQuadrant(2)));
+ EXPECT_EQ(static_cast<uint32_t>('o'),
+ FPDFText_GetUnicode(text_page.get(),
+ GetRotatedTextFirstCharIndexForQuadrant(3)));
+
+ // Test GetCharAngle for every quadrant.
+ EXPECT_NEAR(FXSYS_PI / 4.0,
+ FPDFText_GetCharAngle(text_page.get(),
+ GetRotatedTextFirstCharIndexForQuadrant(0)),
+ 0.001);
EXPECT_NEAR(3 * FXSYS_PI / 4.0,
- FPDFText_GetCharAngle(text_page.get(), kSubstringsSize[0]),
+ FPDFText_GetCharAngle(text_page.get(),
+ GetRotatedTextFirstCharIndexForQuadrant(1)),
0.001);
EXPECT_NEAR(5 * FXSYS_PI / 4.0,
FPDFText_GetCharAngle(text_page.get(),
- kSubstringsSize[0] + kSubstringsSize[1]),
+ GetRotatedTextFirstCharIndexForQuadrant(2)),
0.001);
EXPECT_NEAR(7 * FXSYS_PI / 4.0,
- FPDFText_GetCharAngle(
- text_page.get(),
- kSubstringsSize[0] + kSubstringsSize[1] + kSubstringsSize[2]),
+ FPDFText_GetCharAngle(text_page.get(),
+ GetRotatedTextFirstCharIndexForQuadrant(3)),
0.001);
}