| // 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', {})); | |
| } | |
| } |