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);
 }