Add test case for dysfunctional FPDFTextObj_SetTextRenderMode()

FPDFTextObj_SetTextRenderMode() does not stick when the document is
saved. Add a test case exhibiting the dysfunctional behavior.

Bug: pdfium:1470
Change-Id: I5631e7495a02b582971fee31f107219603ec9f90
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/65890
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Daniel Hosseinian <dhoss@chromium.org>
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index b6cc84c..d2bdf3d 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -2089,52 +2089,79 @@
 }
 
 TEST_F(FPDFEditEmbedderTest, SetTextRenderMode) {
-  EXPECT_TRUE(OpenDocument("text_render_mode.pdf"));
-  FPDF_PAGE page = LoadPage(0);
-  ASSERT_TRUE(page);
-  ASSERT_EQ(2, FPDFPage_CountObjects(page));
-
-  // Check the bitmap
-  {
+// Platform specific original bitmaps
 #if defined(OS_MACOSX)
-    const char md5[] = "139846b4ffbd34b1fd67e3b82cf33b7e";
+  const char md5[] = "139846b4ffbd34b1fd67e3b82cf33b7e";
 #elif defined(OS_WIN)
-    const char md5[] = "de6e86bad3e9fda753a8471a45cfbb58";
+  const char md5[] = "de6e86bad3e9fda753a8471a45cfbb58";
 #else
-    const char md5[] = "5a012d2920ac075c39ffa9437ea42faa";
+  const char md5[] = "5a012d2920ac075c39ffa9437ea42faa";
 #endif
-    ScopedFPDFBitmap page_bitmap = RenderPage(page);
-    CompareBitmap(page_bitmap.get(), 612, 446, md5);
-  }
+  const char md5_stroke[] = "412e52e621b46bd77baf2162e1fb1a1d";
 
-  // Cannot set on a null object.
-  EXPECT_FALSE(
-      FPDFTextObj_SetTextRenderMode(nullptr, FPDF_TEXTRENDERMODE_UNKNOWN));
-  EXPECT_FALSE(
-      FPDFTextObj_SetTextRenderMode(nullptr, FPDF_TEXTRENDERMODE_INVISIBLE));
-
-  FPDF_PAGEOBJECT page_object = FPDFPage_GetObject(page, 0);
-  ASSERT_TRUE(page_object);
-  EXPECT_EQ(FPDF_TEXTRENDERMODE_FILL,
-            FPDFTextObj_GetTextRenderMode(page_object));
-
-  // Cannot set UNKNOWN as a render mode.
-  EXPECT_FALSE(
-      FPDFTextObj_SetTextRenderMode(page_object, FPDF_TEXTRENDERMODE_UNKNOWN));
-
-  EXPECT_TRUE(
-      FPDFTextObj_SetTextRenderMode(page_object, FPDF_TEXTRENDERMODE_STROKE));
-  EXPECT_EQ(FPDF_TEXTRENDERMODE_STROKE,
-            FPDFTextObj_GetTextRenderMode(page_object));
-
-  // Check that bitmap displays changed content
   {
-    const char md5[] = "412e52e621b46bd77baf2162e1fb1a1d";
-    ScopedFPDFBitmap page_bitmap = RenderPage(page);
-    CompareBitmap(page_bitmap.get(), 612, 446, md5);
+    EXPECT_TRUE(OpenDocument("text_render_mode.pdf"));
+    FPDF_PAGE page = LoadPage(0);
+    ASSERT_TRUE(page);
+    ASSERT_EQ(2, FPDFPage_CountObjects(page));
+
+    // Check the bitmap
+    {
+      ScopedFPDFBitmap page_bitmap = RenderPage(page);
+      CompareBitmap(page_bitmap.get(), 612, 446, md5);
+    }
+
+    // Cannot set on a null object.
+    EXPECT_FALSE(
+        FPDFTextObj_SetTextRenderMode(nullptr, FPDF_TEXTRENDERMODE_UNKNOWN));
+    EXPECT_FALSE(
+        FPDFTextObj_SetTextRenderMode(nullptr, FPDF_TEXTRENDERMODE_INVISIBLE));
+
+    FPDF_PAGEOBJECT page_object = FPDFPage_GetObject(page, 0);
+    ASSERT_TRUE(page_object);
+    EXPECT_EQ(FPDF_TEXTRENDERMODE_FILL,
+              FPDFTextObj_GetTextRenderMode(page_object));
+
+    // Cannot set UNKNOWN as a render mode.
+    EXPECT_FALSE(FPDFTextObj_SetTextRenderMode(page_object,
+                                               FPDF_TEXTRENDERMODE_UNKNOWN));
+
+    EXPECT_TRUE(
+        FPDFTextObj_SetTextRenderMode(page_object, FPDF_TEXTRENDERMODE_STROKE));
+    EXPECT_EQ(FPDF_TEXTRENDERMODE_STROKE,
+              FPDFTextObj_GetTextRenderMode(page_object));
+
+    // Check that bitmap displays changed content
+    {
+      ScopedFPDFBitmap page_bitmap = RenderPage(page);
+      CompareBitmap(page_bitmap.get(), 612, 446, md5_stroke);
+    }
+
+    UnloadPage(page);
   }
 
-  UnloadPage(page);
+  {
+    // Save a copy, open the copy, and render it.
+    // Note that the text render mode should be set to
+    // |FPDF_TEXTRENDERMODE_STROKE|, but isn't.
+    // TODO(crbug.com/pdfium/1470): Fix FPDFTextObj_SetTextRenderMode() to work
+    // on saved documents.
+    EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
+    ASSERT_TRUE(OpenSavedDocument());
+    FPDF_PAGE saved_page = LoadSavedPage(0);
+    ASSERT_TRUE(saved_page);
+
+    FPDF_PAGEOBJECT page_object = FPDFPage_GetObject(saved_page, 0);
+    EXPECT_TRUE(page_object);
+    EXPECT_EQ(FPDF_TEXTRENDERMODE_FILL,
+              FPDFTextObj_GetTextRenderMode(page_object));
+
+    ScopedFPDFBitmap bitmap = RenderSavedPage(saved_page);
+    CompareBitmap(bitmap.get(), 612, 446, md5);
+
+    CloseSavedPage(saved_page);
+    CloseSavedDocument();
+  }
 }
 
 TEST_F(FPDFEditEmbedderTest, TestGetTextFontName) {