• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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