1 /*
2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "gtest/gtest.h"
16 #include "test/unittest/core/event/focus_core/focus_test_base.h"
17
18 #define private public
19 #define protected public
20 #include "test/mock/core/common/mock_resource_adapter.h"
21 #include "test/mock/core/common/mock_theme_manager.h"
22 #include "test/mock/core/pipeline/mock_pipeline_context.h"
23 #include "test/mock/core/render/mock_render_context.h"
24 #include "test/unittest/core/pattern/test_ng.h"
25
26 #include "base/log/log_wrapper.h"
27 #include "core/components/container_modal/container_modal_constants.h"
28 #include "core/components/theme/theme_constants.h"
29 #include "core/components_ng/base/ui_node.h"
30 #include "core/components_ng/base/view_stack_processor.h"
31 #include "core/components_ng/pattern/button/button_pattern.h"
32 #include "core/components_ng/pattern/container_modal/container_modal_pattern.h"
33 #include "core/components_ng/pattern/container_modal/container_modal_theme.h"
34 #include "core/components_ng/pattern/container_modal/container_modal_view.h"
35 #include "core/components_ng/pattern/image/image_layout_property.h"
36 #include "core/components_ng/pattern/image/image_pattern.h"
37 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h"
38 #include "core/components_ng/pattern/pattern.h"
39 #include "core/pipeline_ng/pipeline_context.h"
40 #include "core/components_ng/pattern/root/root_pattern.h"
41
42 using namespace testing;
43 using namespace testing::ext;
44 namespace OHOS::Ace::NG {
45
CreateRootNode()46 RefPtr<FrameNode> FocusTestBaseNg::CreateRootNode()
47 {
48 auto rootNode = FrameNode::CreateFrameNodeWithTree(
49 V2::ROOT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<RootPattern>());
50 return rootNode;
51 }
52
CreateNode(const std::string & tag)53 RefPtr<FrameNode> FocusTestBaseNg::CreateNode(const std::string& tag)
54 {
55 auto node = FrameNode::CreateFrameNode(
56 tag, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<FocusTestPattern>());
57 return node;
58 }
59
CreateNodeWithFocusPattern(const std::string & tag,FocusType focusType,bool focusable)60 RefPtr<FrameNode> FocusTestBaseNg::CreateNodeWithFocusPattern(const std::string& tag,
61 FocusType focusType, bool focusable)
62 {
63 auto focusTestPattern = AceType::MakeRefPtr<FocusTestPattern>();
64 focusTestPattern->SetFocusPattern({focusType, focusable});
65 auto node = FrameNode::CreateFrameNode(
66 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
67 return node;
68 }
69
CreateNodeWithFocusPatternAndAlgorithm(const std::string & tag,FocusType focusType,bool focusable,ScopeFocusAlgorithm algorithm)70 RefPtr<FrameNode> FocusTestBaseNg::CreateNodeWithFocusPatternAndAlgorithm(const std::string& tag,
71 FocusType focusType, bool focusable, ScopeFocusAlgorithm algorithm)
72 {
73 auto focusTestPattern = AceType::MakeRefPtr<FocusTestPattern>();
74 focusTestPattern->SetFocusPattern({focusType, focusable});
75 focusTestPattern->SetScopeFocusAlgorithm(algorithm);
76 auto node = FrameNode::CreateFrameNode(
77 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
78 return node;
79 }
80
CreateNodeWithFocusPattern(const std::string & tag,FocusType focusType,bool focusable,FocusStyleType styleType)81 RefPtr<FrameNode> FocusTestBaseNg::CreateNodeWithFocusPattern(const std::string& tag,
82 FocusType focusType, bool focusable, FocusStyleType styleType)
83 {
84 auto focusTestPattern = AceType::MakeRefPtr<FocusTestPattern>();
85 focusTestPattern->SetFocusPattern({focusType, focusable, styleType});
86 auto node = FrameNode::CreateFrameNode(
87 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
88 return node;
89 }
90
CreateNodeWithFocusPatternAndAlgorithm(const std::string & tag,FocusType focusType,bool focusable,FocusStyleType styleType,ScopeFocusAlgorithm algorithm)91 RefPtr<FrameNode> FocusTestBaseNg::CreateNodeWithFocusPatternAndAlgorithm(const std::string& tag,
92 FocusType focusType, bool focusable, FocusStyleType styleType, ScopeFocusAlgorithm algorithm)
93 {
94 auto focusTestPattern = AceType::MakeRefPtr<FocusTestPattern>();
95 focusTestPattern->SetFocusPattern({focusType, focusable, styleType});
96 focusTestPattern->SetScopeFocusAlgorithm(algorithm);
97 auto node = FrameNode::CreateFrameNode(
98 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
99 return node;
100 }
101
CreateNodeWithFocusPattern(const std::string & tag,FocusType focusType,bool focusable,FocusStyleType styleType,const FocusPaintParam & paintParams)102 RefPtr<FrameNode> FocusTestBaseNg::CreateNodeWithFocusPattern(const std::string& tag,
103 FocusType focusType, bool focusable, FocusStyleType styleType, const FocusPaintParam& paintParams)
104 {
105 auto focusTestPattern = AceType::MakeRefPtr<FocusTestPattern>();
106 focusTestPattern->SetFocusPattern({focusType, focusable, styleType});
107 auto node = FrameNode::CreateFrameNode(
108 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
109 return node;
110 }
111
CreateNodeWithFocusPatternAndAlgorithm(const std::string & tag,FocusType focusType,bool focusable,FocusStyleType styleType,const FocusPaintParam & paintParams,ScopeFocusAlgorithm algorithm)112 RefPtr<FrameNode> FocusTestBaseNg::CreateNodeWithFocusPatternAndAlgorithm(const std::string& tag,
113 FocusType focusType, bool focusable, FocusStyleType styleType,
114 const FocusPaintParam& paintParams, ScopeFocusAlgorithm algorithm)
115 {
116 auto focusTestPattern = AceType::MakeRefPtr<FocusTestPattern>();
117 focusTestPattern->SetFocusPattern({focusType, focusable, styleType});
118 focusTestPattern->SetScopeFocusAlgorithm(algorithm);
119 auto node = FrameNode::CreateFrameNode(
120 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
121 return node;
122 }
123
CreateFocusViewWithFocusPattern(const std::string & tag,std::list<int32_t> & list,FocusType focusType,bool focusable)124 RefPtr<FrameNode> FocusTestBaseNg::CreateFocusViewWithFocusPattern(const std::string& tag,
125 std::list<int32_t>& list, FocusType focusType, bool focusable)
126 {
127 auto focusTestPattern = AceType::MakeRefPtr<FocusViewTestPattern>();
128 focusTestPattern->SetFocusPattern({focusType, focusable});
129 focusTestPattern->SetRouteOfFirstScope(list);
130 auto node = FrameNode::CreateFrameNode(
131 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
132 return node;
133 }
134
CreateFocusViewWithFocusPatternAndAlgorithm(const std::string & tag,std::list<int32_t> & list,FocusType focusType,bool focusable,ScopeFocusAlgorithm algorithm)135 RefPtr<FrameNode> FocusTestBaseNg::CreateFocusViewWithFocusPatternAndAlgorithm(const std::string& tag,
136 std::list<int32_t>& list, FocusType focusType, bool focusable, ScopeFocusAlgorithm algorithm)
137 {
138 auto focusTestPattern = AceType::MakeRefPtr<FocusViewTestPattern>();
139 focusTestPattern->SetFocusPattern({focusType, focusable});
140 focusTestPattern->SetScopeFocusAlgorithm(algorithm);
141 focusTestPattern->SetRouteOfFirstScope(list);
142 auto node = FrameNode::CreateFrameNode(
143 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
144 return node;
145 }
146
CreateFocusViewWithFocusPattern(const std::string & tag,std::list<int32_t> & list,FocusType focusType,bool focusable,FocusStyleType styleType)147 RefPtr<FrameNode> FocusTestBaseNg::CreateFocusViewWithFocusPattern(const std::string& tag,
148 std::list<int32_t>& list, FocusType focusType, bool focusable, FocusStyleType styleType)
149 {
150 auto focusTestPattern = AceType::MakeRefPtr<FocusViewTestPattern>();
151 focusTestPattern->SetFocusPattern({focusType, focusable, styleType});
152 focusTestPattern->SetRouteOfFirstScope(list);
153 auto node = FrameNode::CreateFrameNode(
154 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
155 return node;
156 }
157
CreateFocusViewWithFocusPatternAndAlgorithm(const std::string & tag,std::list<int32_t> & list,FocusType focusType,bool focusable,FocusStyleType styleType,ScopeFocusAlgorithm algorithm)158 RefPtr<FrameNode> FocusTestBaseNg::CreateFocusViewWithFocusPatternAndAlgorithm(const std::string& tag,
159 std::list<int32_t>& list, FocusType focusType, bool focusable,
160 FocusStyleType styleType, ScopeFocusAlgorithm algorithm)
161 {
162 auto focusTestPattern = AceType::MakeRefPtr<FocusViewTestPattern>();
163 focusTestPattern->SetFocusPattern({focusType, focusable, styleType});
164 focusTestPattern->SetScopeFocusAlgorithm(algorithm);
165 focusTestPattern->SetRouteOfFirstScope(list);
166 auto node = FrameNode::CreateFrameNode(
167 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
168 return node;
169 }
170
CreateFocusViewWithFocusPattern(const std::string & tag,std::list<int32_t> & list,FocusType focusType,bool focusable,FocusStyleType styleType,const FocusPaintParam & paintParams)171 RefPtr<FrameNode> FocusTestBaseNg::CreateFocusViewWithFocusPattern(const std::string& tag,
172 std::list<int32_t>& list, FocusType focusType, bool focusable,
173 FocusStyleType styleType, const FocusPaintParam& paintParams)
174 {
175 auto focusTestPattern = AceType::MakeRefPtr<FocusViewTestPattern>();
176 focusTestPattern->SetFocusPattern({focusType, focusable, styleType});
177 focusTestPattern->SetRouteOfFirstScope(list);
178 auto node = FrameNode::CreateFrameNode(
179 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
180 return node;
181 }
182
CreateFocusViewWithFocusPatternAndAlgorithm(const std::string & tag,std::list<int32_t> & list,FocusType focusType,bool focusable,FocusStyleType styleType,const FocusPaintParam & paintParams,ScopeFocusAlgorithm algorithm)183 RefPtr<FrameNode> FocusTestBaseNg::CreateFocusViewWithFocusPatternAndAlgorithm(const std::string& tag,
184 std::list<int32_t>& list, FocusType focusType, bool focusable, FocusStyleType styleType,
185 const FocusPaintParam& paintParams, ScopeFocusAlgorithm algorithm)
186 {
187 auto focusTestPattern = AceType::MakeRefPtr<FocusViewTestPattern>();
188 focusTestPattern->SetFocusPattern({focusType, focusable, styleType});
189 focusTestPattern->SetScopeFocusAlgorithm(algorithm);
190 focusTestPattern->SetRouteOfFirstScope(list);
191 auto node = FrameNode::CreateFrameNode(
192 tag, ElementRegister::GetInstance()->MakeUniqueId(), focusTestPattern);
193 return node;
194 }
195
InitFocusTestBaseNG()196 bool FocusTestBaseNg::InitFocusTestBaseNG()
197 {
198 auto context = PipelineContext::GetCurrentContext();
199 CHECK_NULL_RETURN(context, false);
200 focusManager_ = context->GetOrCreateFocusManager();
201 CHECK_NULL_RETURN(focusManager_, false);
202 return true;
203 }
204 } // namespace OHOS::Ace::NG
205