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