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