Add embedder tests for mixed-direction live editing

Introduce FormTextFieldBiDiLiveEdit and FormComboBoxBiDiLiveEdit in
fpdfsdk/fpdf_formfill_embeddertest.cpp to verify bidirectional text
rendering during active text entry. Include baseline PNGs that
intentionally capture the current bug where trailing left-to-right text
visually overlaps preceding right-to-left Hebrew words. This broken
state establishes a baseline before landing the upcoming fix in
https://pdfium-review.googlesource.com/c/152290 for CPWL_EditImpl.

Bug: 535730401
Change-Id: Iffe3428e39bd042b089913743668a8adcda3416b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/153010
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Seung Hyun Jin <seunghyunjin@google.com>
diff --git a/fpdfsdk/fpdf_formfill_embeddertest.cpp b/fpdfsdk/fpdf_formfill_embeddertest.cpp
index a7325a8..88a19de 100644
--- a/fpdfsdk/fpdf_formfill_embeddertest.cpp
+++ b/fpdfsdk/fpdf_formfill_embeddertest.cpp
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <array>
 #include <string>
 #include <vector>
 
@@ -12,6 +13,7 @@
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
+#include "core/fxcrt/span.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "public/cpp/fpdf_scopers.h"
 #include "public/fpdf_formfill.h"
@@ -101,6 +103,16 @@
     }
   }
 
+  void TypeCharactersIntoTextField(pdfium::span<const uint32_t> characters,
+                                   const CFX_PointF& point) {
+    EXPECT_EQ(GetFormType(), GetFormTypeAtPoint(point));
+    ClickOnFormFieldAtPoint(point);
+
+    for (uint32_t c : characters) {
+      FORM_OnChar(form_handle(), page_, c, 0);
+    }
+  }
+
   // Navigates to text field using the mouse and then selects text via the
   // shift and specfied left or right arrow key.
   void SelectTextWithKeyboard(int num_chars,
@@ -1652,6 +1664,16 @@
   EXPECT_EQ("Hello", GetPlatformString(buffer));
 }
 
+TEST_F(FPDFFormFillTextFormEmbedderTest, FormTextFieldBiDiLiveEdit) {
+  constexpr auto kInput =
+      std::to_array<uint32_t>({'A', ' ', 0x05E9, ' ', 0x05DE, ' ', 'B'});
+  TypeCharactersIntoTextField(kInput, RegularFormBegin());
+
+  ScopedFPDFBitmap bitmap = RenderLoadedPage(page());
+  // TODO(crbug.com/535730401): Fix the overlapping text issue.
+  CompareBitmapWithExpectationSuffix(bitmap.get(), "bug_535730401");
+}
+
 TEST_F(FPDFFormFillTextFormEmbedderTest, GetSelectedTextEmptyAndBasicKeyboard) {
   // Test empty selection.
   EXPECT_EQ(FocusedFieldText(), "");
@@ -1726,6 +1748,16 @@
   EXPECT_EQ(Selection(), "L");
 }
 
+TEST_F(FPDFFormFillComboBoxFormEmbedderTest, FormComboBoxBiDiLiveEdit) {
+  constexpr auto kInput =
+      std::to_array<uint32_t>({'A', ' ', 0x05E9, ' ', 0x05DE, ' ', 'B'});
+  TypeCharactersIntoTextField(kInput, EditableFormBegin());
+
+  ScopedFPDFBitmap bitmap = RenderLoadedPage(page());
+  // TODO(crbug.com/535730401): Fix the overlapping text issue.
+  CompareBitmapWithExpectationSuffix(bitmap.get(), "bug_535730401_combobox");
+}
+
 TEST_F(FPDFFormFillComboBoxFormEmbedderTest,
        GetSelectedTextEmptyAndBasicNormalComboBox) {
   // Test empty selection.
diff --git a/testing/resources/embedder_tests/bug_535730401.png b/testing/resources/embedder_tests/bug_535730401.png
new file mode 100644
index 0000000..fa1e567
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_agg_mac.png b/testing/resources/embedder_tests/bug_535730401_agg_mac.png
new file mode 100644
index 0000000..cf3e073
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_agg_mac.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_combobox.png b/testing/resources/embedder_tests/bug_535730401_combobox.png
new file mode 100644
index 0000000..b3721b7
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_combobox.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_combobox_agg_mac.png b/testing/resources/embedder_tests/bug_535730401_combobox_agg_mac.png
new file mode 100644
index 0000000..58c5e37
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_combobox_agg_mac.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_combobox_mac.png b/testing/resources/embedder_tests/bug_535730401_combobox_mac.png
new file mode 100644
index 0000000..c332b82
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_combobox_mac.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_combobox_skia_linux.png b/testing/resources/embedder_tests/bug_535730401_combobox_skia_linux.png
new file mode 100644
index 0000000..c83c859
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_combobox_skia_linux.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_combobox_skia_mac.png b/testing/resources/embedder_tests/bug_535730401_combobox_skia_mac.png
new file mode 100644
index 0000000..c758c92
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_combobox_skia_mac.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_combobox_skia_win.png b/testing/resources/embedder_tests/bug_535730401_combobox_skia_win.png
new file mode 100644
index 0000000..ffd089c
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_combobox_skia_win.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_combobox_win.png b/testing/resources/embedder_tests/bug_535730401_combobox_win.png
new file mode 100644
index 0000000..b3721b7
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_combobox_win.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_mac.png b/testing/resources/embedder_tests/bug_535730401_mac.png
new file mode 100644
index 0000000..2657f29
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_mac.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_skia_linux.png b/testing/resources/embedder_tests/bug_535730401_skia_linux.png
new file mode 100644
index 0000000..888a294
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_skia_linux.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_skia_mac.png b/testing/resources/embedder_tests/bug_535730401_skia_mac.png
new file mode 100644
index 0000000..3438878
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_skia_mac.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_skia_win.png b/testing/resources/embedder_tests/bug_535730401_skia_win.png
new file mode 100644
index 0000000..9524ef3
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_skia_win.png
Binary files differ
diff --git a/testing/resources/embedder_tests/bug_535730401_win.png b/testing/resources/embedder_tests/bug_535730401_win.png
new file mode 100644
index 0000000..fa1e567
--- /dev/null
+++ b/testing/resources/embedder_tests/bug_535730401_win.png
Binary files differ