Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpwl_special_button_embeddertest.cpp
Go to the documentation of this file.
1// Copyright 2020 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "fpdfsdk/cpdfsdk_annotiterator.h"
6#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
7#include "fpdfsdk/cpdfsdk_helpers.h"
8#include "fpdfsdk/cpdfsdk_widget.h"
9#include "fpdfsdk/formfiller/cffl_formfield.h"
10#include "fpdfsdk/pwl/cpwl_special_button.h"
11#include "fpdfsdk/pwl/cpwl_wnd.h"
12#include "testing/embedder_test.h"
13
15 protected:
20
22 UnloadPage(page_);
24 }
25
27 ASSERT_TRUE(OpenDocument("click_form.pdf"));
28
29 page_ = LoadPage(0);
30 ASSERT_TRUE(page_);
31
32 formfill_env_ = CPDFSDKFormFillEnvironmentFromFPDFFormHandle(form_handle());
35
36 // Read only check box.
37 widget_readonly_checkbox_ = ToCPDFSDKWidget(it.GetFirstAnnot());
38 ASSERT_TRUE(widget_readonly_checkbox_);
40 widget_readonly_checkbox_->GetAnnotSubtype());
41
42 // Check box.
43 widget_checkbox_ =
44 ToCPDFSDKWidget(it.GetNextAnnot(widget_readonly_checkbox_));
45 ASSERT_TRUE(widget_checkbox_);
46 ASSERT_EQ(CPDF_Annot::Subtype::WIDGET, widget_checkbox_->GetAnnotSubtype());
47
48 // Read only radio button.
49 widget_readonly_radiobutton_ =
50 ToCPDFSDKWidget(it.GetNextAnnot(widget_checkbox_));
51 ASSERT_TRUE(widget_readonly_radiobutton_);
53 widget_readonly_radiobutton_->GetAnnotSubtype());
54
55 // Tabbing three times from read only radio button to unselected normal
56 // radio button.
57 widget_radiobutton_ = widget_readonly_radiobutton_;
58 ASSERT_TRUE(widget_radiobutton_);
59 for (int i = 0; i < 3; i++) {
60 widget_radiobutton_ =
61 ToCPDFSDKWidget(it.GetNextAnnot(widget_radiobutton_));
62 ASSERT_TRUE(widget_radiobutton_);
63 }
64
66 widget_radiobutton_->GetAnnotSubtype());
67 }
68
69 void FormFillerAndWindowSetup(CPDFSDK_Widget* widget) {
70 CFFL_InteractiveFormFiller* interactive_formfiller =
72 {
73 ObservedPtr<CPDFSDK_Widget> observed(widget);
74 EXPECT_TRUE(interactive_formfiller->OnSetFocus(observed, {}));
75 }
76
77 form_filler_ = interactive_formfiller->GetFormFieldForTesting(widget);
78 ASSERT_TRUE(form_filler_);
79
80 window_ = form_filler_->CreateOrUpdatePWLWindow(
81 formfill_env_->GetPageViewAtIndex(0));
82 ASSERT_TRUE(window_);
83 }
84
85 CPDFSDK_Widget* GetCPDFSDKWidgetCheckBox() const { return widget_checkbox_; }
86 CPDFSDK_Widget* GetCPDFSDKWidgetReadOnlyCheckBox() const {
87 return widget_readonly_checkbox_;
88 }
89 CPDFSDK_Widget* GetCPDFSDKWidgetRadioButton() const {
90 return widget_radiobutton_;
91 }
92 CPDFSDK_Widget* GetCPDFSDKWidgetReadOnlyRadioButton() const {
93 return widget_readonly_radiobutton_;
94 }
95 CPDFSDK_FormFillEnvironment* GetCPDFSDKFormFillEnv() const {
96 return formfill_env_;
97 }
98 CPWL_Wnd* GetWindow() const { return window_; }
99
100 private:
101 FPDF_PAGE page_;
102 CFFL_FormField* form_filler_;
103 CPDFSDK_Widget* widget_checkbox_;
104 CPDFSDK_Widget* widget_readonly_checkbox_;
105 CPDFSDK_Widget* widget_radiobutton_;
106 CPDFSDK_Widget* widget_readonly_radiobutton_;
107 CPDFSDK_FormFillEnvironment* formfill_env_;
108 CPWL_Wnd* window_;
109};
110
112 FormFillerAndWindowSetup(GetCPDFSDKWidgetReadOnlyCheckBox());
113 CPWL_CheckBox* check_box = static_cast<CPWL_CheckBox*>(GetWindow());
114 EXPECT_TRUE(check_box->IsChecked());
115 EXPECT_TRUE(GetCPDFSDKFormFillEnv()->GetInteractiveFormFiller()->OnChar(
116 GetCPDFSDKWidgetReadOnlyCheckBox(), '\r', {}));
117 EXPECT_TRUE(check_box->IsChecked());
118}
119
121 FormFillerAndWindowSetup(GetCPDFSDKWidgetCheckBox());
122 CPWL_CheckBox* check_box = static_cast<CPWL_CheckBox*>(GetWindow());
123 EXPECT_TRUE(GetCPDFSDKFormFillEnv()->GetInteractiveFormFiller()->OnChar(
124 GetCPDFSDKWidgetCheckBox(), '\r', {}));
125 EXPECT_TRUE(check_box->IsChecked());
126
127 EXPECT_TRUE(GetCPDFSDKFormFillEnv()->GetInteractiveFormFiller()->OnChar(
128 GetCPDFSDKWidgetCheckBox(), '\r', {}));
129 EXPECT_FALSE(check_box->IsChecked());
130}
131
133 FormFillerAndWindowSetup(GetCPDFSDKWidgetReadOnlyRadioButton());
134 CPWL_RadioButton* radio_button = static_cast<CPWL_RadioButton*>(GetWindow());
135 EXPECT_FALSE(radio_button->IsChecked());
136 EXPECT_TRUE(GetCPDFSDKFormFillEnv()->GetInteractiveFormFiller()->OnChar(
137 GetCPDFSDKWidgetReadOnlyRadioButton(), '\r', {}));
138 EXPECT_FALSE(radio_button->IsChecked());
139}
140
142 FormFillerAndWindowSetup(GetCPDFSDKWidgetRadioButton());
143 CPWL_RadioButton* radio_button = static_cast<CPWL_RadioButton*>(GetWindow());
144 EXPECT_TRUE(GetCPDFSDKFormFillEnv()->GetInteractiveFormFiller()->OnChar(
145 GetCPDFSDKWidgetRadioButton(), '\r', {}));
146 EXPECT_TRUE(radio_button->IsChecked());
147}
CPWL_Wnd * CreateOrUpdatePWLWindow(const CPDFSDK_PageView *pPageView)
bool OnSetFocus(ObservedPtr< CPDFSDK_Widget > &pWidget, Mask< FWL_EVENTFLAG > nFlag)
CFFL_FormField * GetFormFieldForTesting(CPDFSDK_Widget *pAnnot)
CPDFSDK_Annot * GetNextAnnot(CPDFSDK_Annot *pAnnot)
CPDF_Annot::Subtype GetAnnotSubtype() const override
CPDFSDK_PageView * GetPageViewAtIndex(int nIndex)
CFFL_InteractiveFormFiller * GetInteractiveFormFiller()
CPDFSDK_FormFillEnvironment * GetCPDFSDKFormFillEnv() const
CPDFSDK_Widget * GetCPDFSDKWidgetReadOnlyCheckBox() const
void FormFillerAndWindowSetup(CPDFSDK_Widget *widget)
CPDFSDK_Widget * GetCPDFSDKWidgetReadOnlyRadioButton() const
bool IsChecked() const
void SetUp() override
void TearDown() override
void UnloadPage(FPDF_PAGE page)
FPDF_PAGE LoadPage(int page_number)
FPDF_FORMHANDLE form_handle() const
bool OpenDocument(const std::string &filename)
CPDFSDK_Widget * ToCPDFSDKWidget(CPDFSDK_Annot *pAnnot)
TEST_F(CPWLSpecialButtonEmbedderTest, EnterOnReadOnlyCheckBox)