summaryrefslogtreecommitdiff
path: root/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
diff options
context:
space:
mode:
authorDiana Gage <drgage@google.com>2017-07-28 17:07:39 -0700
committerChromium commit bot <commit-bot@chromium.org>2017-07-31 21:43:06 +0000
commitab3909796cf2e9fa192040bcd7cb9da7bb3328a5 (patch)
treec4b3d336aa8d3539794ec0a9740cb9d78a7b0af8 /fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
parent47c9e6d1a151c7c8b0649712a91e04f12177b7b9 (diff)
downloadpdfium-ab3909796cf2e9fa192040bcd7cb9da7bb3328a5.tar.xz
Add FORM_ReplaceSelection() and embedder tests.
This method replaces the selected text in a user-editable form text area with another text string (which can be empty or non-empty). If there is no selected text, FORM_ReplaceSelection() will append the replacement text after the current caret position. BUG=chromium:59266 Change-Id: I76448ef757d107888c33ebd5656457ebac93b952 Reviewed-on: https://pdfium-review.googlesource.com/8812 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Diana Gage <drgage@google.com>
Diffstat (limited to 'fpdfsdk/pwl/cpwl_edit_embeddertest.cpp')
-rw-r--r--fpdfsdk/pwl/cpwl_edit_embeddertest.cpp232
1 files changed, 210 insertions, 22 deletions
diff --git a/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp b/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
index 98cc44ab86..34569b2491 100644
--- a/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
@@ -24,35 +24,44 @@ class CPWLEditEmbeddertest : public EmbedderTest {
}
void CreateAndInitializeFormPDF() {
- EXPECT_TRUE(OpenDocument("text_form.pdf"));
+ EXPECT_TRUE(OpenDocument("text_form_multiple.pdf"));
m_page = LoadPage(0);
ASSERT_TRUE(m_page);
- CPDFSDK_FormFillEnvironment* pFormFillEnv =
- static_cast<CPDFSDK_FormFillEnvironment*>(form_handle());
-
- {
- CBA_AnnotIterator iter(pFormFillEnv->GetPageView(0),
- CPDF_Annot::Subtype::WIDGET);
- m_pAnnot = iter.GetFirstAnnot();
- CPDFSDK_Annot* pLastAnnot = iter.GetLastAnnot();
- ASSERT_EQ(m_pAnnot, pLastAnnot);
- ASSERT_TRUE(m_pAnnot);
- ASSERT_EQ(CPDF_Annot::Subtype::WIDGET, m_pAnnot->GetAnnotSubtype());
- }
+ m_pFormFillEnv = static_cast<CPDFSDK_FormFillEnvironment*>(form_handle());
+ CBA_AnnotIterator iter(m_pFormFillEnv->GetPageView(0),
+ CPDF_Annot::Subtype::WIDGET);
+ // Normal text field.
+ m_pAnnot = iter.GetFirstAnnot();
+ ASSERT_TRUE(m_pAnnot);
+ ASSERT_EQ(CPDF_Annot::Subtype::WIDGET, m_pAnnot->GetAnnotSubtype());
+
+ // Read-only text field.
+ CPDFSDK_Annot* pAnnotReadOnly = iter.GetNextAnnot(m_pAnnot);
+
+ // Pre-filled text field with char limit of 10.
+ m_pAnnotCharLimit = iter.GetNextAnnot(pAnnotReadOnly);
+ ASSERT_TRUE(m_pAnnotCharLimit);
+ ASSERT_EQ(CPDF_Annot::Subtype::WIDGET,
+ m_pAnnotCharLimit->GetAnnotSubtype());
+ CPDFSDK_Annot* pLastAnnot = iter.GetLastAnnot();
+ ASSERT_EQ(m_pAnnotCharLimit, pLastAnnot);
+ }
+ void FormFillerAndWindowSetup(CPDFSDK_Annot* pAnnotTextField) {
CFFL_InteractiveFormFiller* pInteractiveFormFiller =
- pFormFillEnv->GetInteractiveFormFiller();
+ m_pFormFillEnv->GetInteractiveFormFiller();
{
- CPDFSDK_Annot::ObservedPtr pObserved(m_pAnnot);
+ CPDFSDK_Annot::ObservedPtr pObserved(pAnnotTextField);
EXPECT_TRUE(pInteractiveFormFiller->OnSetFocus(&pObserved, 0));
}
- m_pFormFiller = pInteractiveFormFiller->GetFormFiller(m_pAnnot, false);
+ m_pFormFiller =
+ pInteractiveFormFiller->GetFormFiller(pAnnotTextField, false);
ASSERT_TRUE(m_pFormFiller);
CPWL_Wnd* pWindow =
- m_pFormFiller->GetPDFWindow(pFormFillEnv->GetPageView(0), false);
+ m_pFormFiller->GetPDFWindow(m_pFormFillEnv->GetPageView(0), false);
ASSERT_TRUE(pWindow);
ASSERT_EQ(PWL_CLASSNAME_EDIT, pWindow->GetClassName());
@@ -70,15 +79,19 @@ class CPWLEditEmbeddertest : public EmbedderTest {
CPWL_Edit* GetCPWLEdit() { return m_pEdit; }
CFFL_FormFiller* GetCFFLFormFiller() { return m_pFormFiller; }
CPDFSDK_Annot* GetCPDFSDKAnnot() { return m_pAnnot; }
+ CPDFSDK_Annot* GetCPDFSDKAnnotCharLimit() { return m_pAnnotCharLimit; }
private:
FPDF_PAGE m_page;
CPWL_Edit* m_pEdit;
CFFL_FormFiller* m_pFormFiller;
CPDFSDK_Annot* m_pAnnot;
+ CPDFSDK_Annot* m_pAnnotCharLimit;
+ CPDFSDK_FormFillEnvironment* m_pFormFillEnv;
};
TEST_F(CPWLEditEmbeddertest, TypeText) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
EXPECT_TRUE(GetCPWLEdit()->GetText().IsEmpty());
EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'a', 0));
EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'b', 0));
@@ -88,6 +101,7 @@ TEST_F(CPWLEditEmbeddertest, TypeText) {
}
TEST_F(CPWLEditEmbeddertest, GetSelectedTextEmptyAndBasic) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
// Attempt to set selection before text has been typed to test that
// selection is identified as empty.
//
@@ -104,6 +118,7 @@ TEST_F(CPWLEditEmbeddertest, GetSelectedTextEmptyAndBasic) {
}
TEST_F(CPWLEditEmbeddertest, GetSelectedTextFragments) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
TypeTextIntoTextField(50);
GetCPWLEdit()->SetSelection(0, 0);
@@ -133,53 +148,226 @@ TEST_F(CPWLEditEmbeddertest, GetSelectedTextFragments) {
}
TEST_F(CPWLEditEmbeddertest, DeleteEntireTextSelection) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
TypeTextIntoTextField(50);
GetCPWLEdit()->SetSelection(0, -1);
EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
GetCPWLEdit()->GetSelectedText().c_str());
- GetCPWLEdit()->DeleteSelectedText();
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString());
EXPECT_TRUE(GetCPWLEdit()->GetText().IsEmpty());
}
TEST_F(CPWLEditEmbeddertest, DeleteTextSelectionMiddle) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
TypeTextIntoTextField(50);
GetCPWLEdit()->SetSelection(12, 23);
EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText().c_str());
- GetCPWLEdit()->DeleteSelectedText();
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString());
EXPECT_STREQ(L"ABCDEFGHIJKLXYZ[\\]^_`abcdefghijklmnopqr",
GetCPWLEdit()->GetText().c_str());
}
TEST_F(CPWLEditEmbeddertest, DeleteTextSelectionLeft) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
TypeTextIntoTextField(50);
GetCPWLEdit()->SetSelection(0, 5);
EXPECT_STREQ(L"ABCDE", GetCPWLEdit()->GetSelectedText().c_str());
- GetCPWLEdit()->DeleteSelectedText();
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString());
EXPECT_STREQ(L"FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
GetCPWLEdit()->GetText().c_str());
}
TEST_F(CPWLEditEmbeddertest, DeleteTextSelectionRight) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
TypeTextIntoTextField(50);
GetCPWLEdit()->SetSelection(45, 50);
EXPECT_STREQ(L"nopqr", GetCPWLEdit()->GetSelectedText().c_str());
- GetCPWLEdit()->DeleteSelectedText();
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString());
EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklm",
GetCPWLEdit()->GetText().c_str());
}
TEST_F(CPWLEditEmbeddertest, DeleteEmptyTextSelection) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
TypeTextIntoTextField(50);
- GetCPWLEdit()->DeleteSelectedText();
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString());
EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
GetCPWLEdit()->GetText().c_str());
}
+
+TEST_F(CPWLEditEmbeddertest, InsertTextInEmptyTextField) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hello"));
+ EXPECT_STREQ(L"Hello", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest, InsertTextInPopulatedTextFieldLeft) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
+ TypeTextIntoTextField(10);
+
+ // Move cursor to beginning of text field.
+ EXPECT_TRUE(
+ GetCFFLFormFiller()->OnKeyDown(GetCPDFSDKAnnot(), FWL_VKEY_Home, 0));
+
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hello"));
+ EXPECT_STREQ(L"HelloABCDEFGHIJ", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest, InsertTextInPopulatedTextFieldMiddle) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
+ TypeTextIntoTextField(10);
+
+ // Move cursor to middle of text field.
+ for (int i = 0; i < 5; ++i) {
+ EXPECT_TRUE(
+ GetCFFLFormFiller()->OnKeyDown(GetCPDFSDKAnnot(), FWL_VKEY_Left, 0));
+ }
+
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hello"));
+ EXPECT_STREQ(L"ABCDEHelloFGHIJ", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest, InsertTextInPopulatedTextFieldRight) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
+ TypeTextIntoTextField(10);
+
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hello"));
+ EXPECT_STREQ(L"ABCDEFGHIJHello", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest,
+ InsertTextAndReplaceSelectionInPopulatedTextFieldWhole) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
+ TypeTextIntoTextField(10);
+
+ GetCPWLEdit()->SetSelection(0, -1);
+ EXPECT_STREQ(L"ABCDEFGHIJ", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hello"));
+ EXPECT_STREQ(L"Hello", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest,
+ InsertTextAndReplaceSelectionInPopulatedTextFieldLeft) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
+ TypeTextIntoTextField(10);
+
+ GetCPWLEdit()->SetSelection(0, 5);
+ EXPECT_STREQ(L"ABCDE", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hello"));
+ EXPECT_STREQ(L"HelloFGHIJ", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest,
+ InsertTextAndReplaceSelectionInPopulatedTextFieldMiddle) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
+ TypeTextIntoTextField(10);
+
+ GetCPWLEdit()->SetSelection(2, 7);
+ EXPECT_STREQ(L"CDEFG", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hello"));
+ EXPECT_STREQ(L"ABHelloHIJ", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest,
+ InsertTextAndReplaceSelectionInPopulatedTextFieldRight) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnot());
+ TypeTextIntoTextField(10);
+
+ GetCPWLEdit()->SetSelection(5, 10);
+ EXPECT_STREQ(L"FGHIJ", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hello"));
+ EXPECT_STREQ(L"ABCDEHello", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest, InsertTextInEmptyCharLimitTextFieldOverflow) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
+ GetCPWLEdit()->SetSelection(0, -1);
+ EXPECT_STREQ(L"Elephant", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString());
+
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hippopotamus"));
+ EXPECT_STREQ(L"Hippopotam", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest, InsertTextInEmptyCharLimitTextFieldFit) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
+ GetCPWLEdit()->SetSelection(0, -1);
+ EXPECT_STREQ(L"Elephant", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString());
+
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Zebra"));
+ EXPECT_STREQ(L"Zebra", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest, InsertTextInPopulatedCharLimitTextFieldLeft) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hippopotamus"));
+ EXPECT_STREQ(L"HiElephant", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest, InsertTextInPopulatedCharLimitTextFieldMiddle) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
+ // Move cursor to middle of text field.
+ for (int i = 0; i < 5; ++i) {
+ EXPECT_TRUE(GetCFFLFormFiller()->OnKeyDown(GetCPDFSDKAnnotCharLimit(),
+ FWL_VKEY_Right, 0));
+ }
+
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hippopotamus"));
+ EXPECT_STREQ(L"ElephHiant", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest, InsertTextInPopulatedCharLimitTextFieldRight) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
+ // Move cursor to end of text field.
+ EXPECT_TRUE(GetCFFLFormFiller()->OnKeyDown(GetCPDFSDKAnnotCharLimit(),
+ FWL_VKEY_End, 0));
+
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hippopotamus"));
+ EXPECT_STREQ(L"ElephantHi", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest,
+ InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldWhole) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
+ GetCPWLEdit()->SetSelection(0, -1);
+ EXPECT_STREQ(L"Elephant", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hippopotamus"));
+ EXPECT_STREQ(L"Hippopotam", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest,
+ InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldLeft) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
+ GetCPWLEdit()->SetSelection(0, 4);
+ EXPECT_STREQ(L"Elep", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hippopotamus"));
+ EXPECT_STREQ(L"Hippophant", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest,
+ InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldMiddle) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
+ GetCPWLEdit()->SetSelection(2, 6);
+ EXPECT_STREQ(L"epha", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hippopotamus"));
+ EXPECT_STREQ(L"ElHippopnt", GetCPWLEdit()->GetText().c_str());
+}
+
+TEST_F(CPWLEditEmbeddertest,
+ InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldRight) {
+ FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
+ GetCPWLEdit()->SetSelection(4, 8);
+ EXPECT_STREQ(L"hant", GetCPWLEdit()->GetSelectedText().c_str());
+ GetCPWLEdit()->ReplaceSelection(CFX_WideString(L"Hippopotamus"));
+ EXPECT_STREQ(L"ElepHippop", GetCPWLEdit()->GetText().c_str());
+}