blob: 3a9d8efb018ef0237cbcac9dd054915f4f08785a [file] [log] [blame]
// Copyright 2017 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "fpdfsdk/pwl/cpwl_combo_box_embeddertest.h"
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
#include "fpdfsdk/cpdfsdk_helpers.h"
#include "fpdfsdk/cpdfsdk_widget.h"
#include "fpdfsdk/formfiller/cffl_formfield.h"
#include "fpdfsdk/formfiller/cffl_interactiveformfiller.h"
#include "fpdfsdk/pwl/cpwl_combo_box.h"
#include "fpdfsdk/pwl/cpwl_wnd.h"
#include "public/fpdf_fwlevent.h"
#include "testing/embedder_test.h"
#include "testing/gtest/include/gtest/gtest.h"
class CPWLComboBoxEditEmbedderTest : public CPWLComboBoxEmbedderTest {};
TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextEmptyAndBasicNormal) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotNormal());
// Automatically pre-filled with "Banana".
EXPECT_FALSE(GetCPWLComboBox()->GetText().IsEmpty());
EXPECT_STREQ(L"Banana", GetCPWLComboBox()->GetText().c_str());
// Check that selection is initially empty, then select entire word.
EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
GetCPWLComboBox()->SetSelectText();
EXPECT_STREQ(L"Banana", GetCPWLComboBox()->GetSelectedText().c_str());
// Select other options.
GetCPWLComboBox()->SetSelect(0);
EXPECT_STREQ(L"Apple", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetSelect(2);
EXPECT_STREQ(L"Cherry", GetCPWLComboBox()->GetSelectedText().c_str());
// Verify that combobox text cannot be edited.
EXPECT_FALSE(GetCFFLFormField()->OnChar(GetCPDFSDKAnnotNormal(), 'a', {}));
}
TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextFragmentsNormal) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotNormal());
EXPECT_STREQ(L"Banana", GetCPWLComboBox()->GetText().c_str());
GetCPWLComboBox()->SetEditSelection(0, 0);
EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
GetCPWLComboBox()->SetEditSelection(0, 1);
EXPECT_STREQ(L"B", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(0, -1);
EXPECT_STREQ(L"Banana", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(-8, -1);
EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
GetCPWLComboBox()->SetEditSelection(4, 1);
EXPECT_STREQ(L"ana", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(1, 4);
EXPECT_STREQ(L"ana", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(5, 6);
EXPECT_STREQ(L"a", GetCPWLComboBox()->GetSelectedText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextEmptyAndBasicEditable) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
EXPECT_TRUE(GetCPWLComboBox()->GetText().IsEmpty());
// Check selection is initially empty, then select a provided option.
EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
GetCPWLComboBox()->SetSelect(0);
GetCPWLComboBox()->SetSelectText();
EXPECT_STREQ(L"Foo", GetCPWLComboBox()->GetSelectedText().c_str());
// Select another option and then select last char of that option.
GetCPWLComboBox()->SetSelect(1);
EXPECT_STREQ(L"Bar", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(2, 3);
EXPECT_STREQ(L"r", GetCPWLComboBox()->GetSelectedText().c_str());
// Type into editable combobox text field and select new text.
EXPECT_TRUE(
GetCFFLFormField()->OnChar(GetCPDFSDKAnnotUserEditable(), 'a', {}));
EXPECT_TRUE(
GetCFFLFormField()->OnChar(GetCPDFSDKAnnotUserEditable(), 'b', {}));
EXPECT_TRUE(
GetCFFLFormField()->OnChar(GetCPDFSDKAnnotUserEditable(), 'c', {}));
EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
GetCPWLComboBox()->SetEditSelection(0, 5);
EXPECT_STREQ(L"Baabc", GetCPWLComboBox()->GetSelectedText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextFragmentsEditable) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(50);
GetCPWLComboBox()->SetEditSelection(0, 0);
EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
GetCPWLComboBox()->SetEditSelection(0, 1);
EXPECT_STREQ(L"A", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(0, -1);
EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(-8, -1);
EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
GetCPWLComboBox()->SetEditSelection(23, 12);
EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(12, 23);
EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(49, 50);
EXPECT_STREQ(L"r", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(49, 55);
EXPECT_STREQ(L"r", GetCPWLComboBox()->GetSelectedText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest, DeleteEntireTextSelection) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(50);
GetCPWLComboBox()->SetEditSelection(0, -1);
EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->ReplaceSelection(L"");
EXPECT_TRUE(GetCPWLComboBox()->GetText().IsEmpty());
}
TEST_F(CPWLComboBoxEditEmbedderTest, DeleteTextSelectionMiddle) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(50);
GetCPWLComboBox()->SetEditSelection(12, 23);
EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->ReplaceSelection(L"");
EXPECT_STREQ(L"ABCDEFGHIJKLXYZ[\\]^_`abcdefghijklmnopqr",
GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest, DeleteTextSelectionLeft) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(50);
GetCPWLComboBox()->SetEditSelection(0, 5);
EXPECT_STREQ(L"ABCDE", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->ReplaceSelection(L"");
EXPECT_STREQ(L"FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest, DeleteTextSelectionRight) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(50);
GetCPWLComboBox()->SetEditSelection(45, 50);
EXPECT_STREQ(L"nopqr", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->ReplaceSelection(L"");
EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklm",
GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest, DeleteEmptyTextSelection) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(50);
GetCPWLComboBox()->ReplaceSelection(L"");
EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest, InsertTextInEmptyEditableComboBox) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
GetCPWLComboBox()->ReplaceSelection(L"Hello");
EXPECT_STREQ(L"Hello", GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest,
InsertTextInPopulatedEditableComboBoxLeft) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(10);
// Move cursor to beginning of user-editable combobox text field.
EXPECT_TRUE(GetCFFLFormField()->OnKeyDown(FWL_VKEY_Home, {}));
GetCPWLComboBox()->ReplaceSelection(L"Hello");
EXPECT_STREQ(L"HelloABCDEFGHIJ", GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest,
InsertTextInPopulatedEditableComboBoxMiddle) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(10);
// Move cursor to middle of user-editable combobox text field.
for (int i = 0; i < 5; ++i) {
EXPECT_TRUE(GetCFFLFormField()->OnKeyDown(FWL_VKEY_Left, {}));
}
GetCPWLComboBox()->ReplaceSelection(L"Hello");
EXPECT_STREQ(L"ABCDEHelloFGHIJ", GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest,
InsertTextInPopulatedEditableComboBoxRight) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(10);
GetCPWLComboBox()->ReplaceSelection(L"Hello");
EXPECT_STREQ(L"ABCDEFGHIJHello", GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest,
InsertTextAndReplaceSelectionInPopulatedEditableComboBoxWhole) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(10);
GetCPWLComboBox()->SetEditSelection(0, -1);
EXPECT_STREQ(L"ABCDEFGHIJ", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->ReplaceSelection(L"Hello");
EXPECT_STREQ(L"Hello", GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest,
InsertTextAndReplaceSelectionInPopulatedEditableComboBoxLeft) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(10);
GetCPWLComboBox()->SetEditSelection(0, 5);
EXPECT_STREQ(L"ABCDE", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->ReplaceSelection(L"Hello");
EXPECT_STREQ(L"HelloFGHIJ", GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest,
InsertTextAndReplaceSelectionInPopulatedEditableComboBoxMiddle) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(10);
GetCPWLComboBox()->SetEditSelection(2, 7);
EXPECT_STREQ(L"CDEFG", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->ReplaceSelection(L"Hello");
EXPECT_STREQ(L"ABHelloHIJ", GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest,
InsertTextAndReplaceSelectionInPopulatedEditableComboBoxRight) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(10);
GetCPWLComboBox()->SetEditSelection(5, 10);
EXPECT_STREQ(L"FGHIJ", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->ReplaceSelection(L"Hello");
EXPECT_STREQ(L"ABCDEHello", GetCPWLComboBox()->GetText().c_str());
}
TEST_F(CPWLComboBoxEditEmbedderTest, ReplaceAndKeepSelection) {
FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
TypeTextIntoTextField(10);
GetCPWLComboBox()->SetEditSelection(1, 3);
EXPECT_STREQ(L"ABCDEFGHIJ", GetCPWLComboBox()->GetText().c_str());
GetCPWLComboBox()->ReplaceAndKeepSelection(L"xyz");
EXPECT_STREQ(L"AxyzDEFGHIJ", GetCPWLComboBox()->GetText().c_str());
EXPECT_STREQ(L"xyz", GetCPWLComboBox()->GetSelectedText().c_str());
GetCPWLComboBox()->SetEditSelection(4, 1);
GetCPWLComboBox()->ReplaceAndKeepSelection(L"12");
EXPECT_STREQ(L"A12DEFGHIJ", GetCPWLComboBox()->GetText().c_str());
EXPECT_STREQ(L"12", GetCPWLComboBox()->GetSelectedText().c_str());
}