blob: 299672f2811d506d0c5d2e80ba1ff32ebe4b4499 [file] [log] [blame] [edit]
// 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_annotiterator.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/gtest/include/gtest/gtest.h"
void CPWLComboBoxEmbedderTest::SetUp() {
EmbedderTest::SetUp();
CreateAndInitializeFormComboboxPDF();
}
void CPWLComboBoxEmbedderTest::TearDown() {
UnloadPage(GetPage());
EmbedderTest::TearDown();
}
void CPWLComboBoxEmbedderTest::CreateAndInitializeFormComboboxPDF() {
ASSERT_TRUE(OpenDocument("combobox_form.pdf"));
m_page = LoadPage(0);
ASSERT_TRUE(m_page);
m_pFormFillEnv = CPDFSDKFormFillEnvironmentFromFPDFFormHandle(form_handle());
m_pPageView = m_pFormFillEnv->GetPageViewAtIndex(0);
CPDFSDK_AnnotIterator iter(m_pPageView, {CPDF_Annot::Subtype::WIDGET});
// User editable combobox.
m_pAnnotEditable = ToCPDFSDKWidget(iter.GetFirstAnnot());
ASSERT_TRUE(m_pAnnotEditable);
// Normal combobox with pre-selected value.
m_pAnnotNormal = ToCPDFSDKWidget(iter.GetNextAnnot(m_pAnnotEditable));
ASSERT_TRUE(m_pAnnotNormal);
// Read-only combobox.
CPDFSDK_Annot* pAnnotReadOnly = iter.GetNextAnnot(m_pAnnotNormal);
CPDFSDK_Annot* pLastAnnot = iter.GetLastAnnot();
ASSERT_EQ(pAnnotReadOnly, pLastAnnot);
}
void CPWLComboBoxEmbedderTest::FormFillerAndWindowSetup(
CPDFSDK_Widget* pAnnotCombobox) {
CFFL_InteractiveFormFiller* pInteractiveFormFiller =
m_pFormFillEnv->GetInteractiveFormFiller();
{
ObservedPtr<CPDFSDK_Widget> pObserved(pAnnotCombobox);
EXPECT_TRUE(pInteractiveFormFiller->OnSetFocus(pObserved, {}));
}
m_pFormField = pInteractiveFormFiller->GetFormFieldForTesting(pAnnotCombobox);
ASSERT_TRUE(m_pFormField);
CPWL_Wnd* pWindow =
m_pFormField->GetPWLWindow(m_pFormFillEnv->GetPageViewAtIndex(0));
ASSERT_TRUE(pWindow);
m_pComboBox = static_cast<CPWL_ComboBox*>(pWindow);
}
void CPWLComboBoxEmbedderTest::TypeTextIntoTextField(int num_chars) {
// Type text starting with 'A' to as many chars as specified by |num_chars|.
for (int i = 0; i < num_chars; ++i) {
EXPECT_TRUE(
GetCFFLFormField()->OnChar(GetCPDFSDKAnnotUserEditable(), i + 'A', {}));
}
}