• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * SPDX-License-Identifier: Apache-2.0
3  * Copyright (c) 2025 Huawei Device Co., Ltd.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include "gtest/gtest.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/event/focus_core/focus_creatbox_test.h"
25 #include "test/unittest/core/pattern/test_ng.h"
26 
27 #include "base/log/log_wrapper.h"
28 #include "core/components/container_modal/container_modal_constants.h"
29 #include "core/components/theme/theme_constants.h"
30 #include "core/components_ng/base/ui_node.h"
31 #include "core/components_ng/base/view_stack_processor.h"
32 #include "core/components_ng/event/focus_box.h"
33 #include "core/components_ng/event/focus_hub.h"
34 #include "core/components_ng/manager/focus/focus_manager.h"
35 #include "core/components_ng/pattern/button/button_pattern.h"
36 #include "core/components_ng/pattern/container_modal/container_modal_pattern.h"
37 #include "core/components_ng/pattern/container_modal/container_modal_theme.h"
38 #include "core/components_ng/pattern/container_modal/container_modal_view.h"
39 #include "core/components_ng/pattern/image/image_layout_property.h"
40 #include "core/components_ng/pattern/image/image_pattern.h"
41 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h"
42 #include "core/components_ng/pattern/pattern.h"
43 #include "core/components_ng/pattern/root/root_pattern.h"
44 #include "core/components_ng/pattern/stack/stack_pattern.h"
45 #include "core/components_ng/pattern/text/text_pattern.h"
46 #include "core/components_ng/pattern/text_picker/textpicker_column_pattern.h"
47 #include "core/pipeline_ng/pipeline_context.h"
48 
49 using namespace testing;
50 using namespace testing::ext;
51 namespace OHOS::Ace::NG {
52 NG::FocusBoxStyle styleType;
53 
54 const std::vector<FocusCreatBoxTestCase> FOCUS_Creat_Box_CASES = {
55     // case1
56     FocusCreatBoxTestCase(FocusBoxPolyMorPhismStyle { true, true, true },
57         FocusBoxStyleType { FocusStyleType::NONE, FocusStyleType::NONE, FocusStyleType::NONE },
58         FocusBoxDependence { true, true }),
59     // case2
60     FocusCreatBoxTestCase(FocusBoxPolyMorPhismStyle { true, true, true },
61         FocusBoxStyleType { FocusStyleType::NONE, FocusStyleType::NONE, FocusStyleType::NONE },
62         FocusBoxDependence { true, false }),
63     // case3
64     FocusCreatBoxTestCase(FocusBoxPolyMorPhismStyle { true, true, true },
65         FocusBoxStyleType { FocusStyleType::NONE, FocusStyleType::NONE, FocusStyleType::NONE },
66         FocusBoxDependence { false, true }),
67     // case4
68     FocusCreatBoxTestCase(FocusBoxPolyMorPhismStyle { true, true, true },
69         FocusBoxStyleType { FocusStyleType::NONE, FocusStyleType::NONE, FocusStyleType::NONE },
70         FocusBoxDependence { false, false }),
71 };
72 
SetUpTestSuite()73 void FocusCreatBoxTestNG::SetUpTestSuite()
74 {
75     MockPipelineContext::SetUp();
76     GTEST_LOG_(INFO) << "FocusCreatBoxTestNG SetUpTestCase";
77 }
78 
TearDownTestSuite()79 void FocusCreatBoxTestNG::TearDownTestSuite()
80 {
81     MockPipelineContext::TearDown();
82     GTEST_LOG_(INFO) << "FocusCreatBoxTestNG TearDownTestCase";
83 }
CreatNode()84 RefPtr<FrameNode> FocusCreatBoxTestNG::CreatNode()
85 {
86     auto node = CreateNodeWithFocusPattern("node", FocusType::NODE, true);
87     EXPECT_NE(node, nullptr);
88     node->UpdateInspectorId("NODE");
89     return node;
90 }
FocusPolyMorPhismStyle(bool testCase,const RefPtr<FocusHub> & focusHub)91 void FocusCreatBoxTestNG::FocusPolyMorPhismStyle(bool testCase, const RefPtr<FocusHub>& focusHub)
92 {
93     styleType.strokeColor = Color::RED;
94     if (testCase) {
95         focusHub->GetFocusBox().SetStyle(styleType);
96         auto style = focusHub->GetFocusBox().GetStyle().value();
97         EXPECT_EQ(style.strokeColor, Color::RED);
98     }
99 }
SetDependence(bool testCase,const RefPtr<FocusHub> & focusHub)100 void FocusCreatBoxTestNG::SetDependence(bool testCase, const RefPtr<FocusHub>& focusHub)
101 {
102     if (testCase) {
103         focusHub->SetFocusDependence(FocusDependence::SELF);
104     } else {
105         focusHub->SetFocusDependence(FocusDependence::AUTO);
106     }
107 }
InitFocusCreatBox()108 void FocusCreatBoxTestNG::InitFocusCreatBox()
109 {
110     for (const auto& testCase : FOCUS_Creat_Box_CASES) {
111         auto rootNode = CreateRootNode();
112         auto rootNodeFocusHub = rootNode->GetOrCreateFocusHub();
113         EXPECT_NE(rootNodeFocusHub, nullptr);
114 
115         auto nodeA = CreatNode();
116         auto focusHubA = nodeA->GetOrCreateFocusHub();
117         focusHubA->SetFocusStyleType(testCase.focusStyleType.focusAStyleType);
118 
119         auto nodeB = CreatNode();
120         auto focusHubB = nodeB->GetOrCreateFocusHub();
121         focusHubB->SetFocusStyleType(testCase.focusStyleType.focusBStyleType);
122 
123         auto nodeC = CreatNode();
124         auto focusHubC = nodeC->GetOrCreateFocusHub();
125         focusHubC->SetFocusStyleType(testCase.focusStyleType.focusCStyleType);
126 
127         FocusPolyMorPhismStyle(testCase.style.isAFocusBoxStyle, focusHubA);
128         FocusPolyMorPhismStyle(testCase.style.isBFocusBoxStyle, focusHubB);
129         FocusPolyMorPhismStyle(testCase.style.isCFocusBoxStyle, focusHubC);
130 
131         rootNode->AddChild(nodeA);
132         nodeA->AddChild(nodeB);
133         nodeB->AddChild(nodeC);
134 
135         SetDependence(testCase.isDependence.isADependence, focusHubA);
136         SetDependence(testCase.isDependence.isBDependence, focusHubB);
137 
138         focusHubA->RequestFocusImmediately();
139         focusHubB->RequestFocusImmediately();
140         focusHubC->RequestFocusImmediately();
141         if ((testCase.isDependence.isADependence && testCase.isDependence.isBDependence) ||
142             (testCase.isDependence.isADependence && !testCase.isDependence.isBDependence)) {
143             rootNodeFocusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHubA));
144             auto res = rootNodeFocusHub->PaintAllFocusState();
145             EXPECT_TRUE(res);
146             EXPECT_EQ(focusManager_->GetLastFocusStateNode(), focusHubA);
147         }
148         if (!testCase.isDependence.isADependence && testCase.isDependence.isBDependence) {
149             rootNodeFocusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHubA));
150             focusHubA->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHubB));
151             auto res = rootNodeFocusHub->PaintAllFocusState();
152             EXPECT_TRUE(res);
153             ASSERT_EQ(focusManager_->GetLastFocusStateNode(), focusHubB);
154         }
155         if (!testCase.isDependence.isADependence && !testCase.isDependence.isBDependence) {
156             rootNodeFocusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHubA));
157             focusHubA->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHubB));
158             focusHubB->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHubC));
159             auto res = rootNodeFocusHub->PaintAllFocusState();
160             EXPECT_TRUE(res);
161             EXPECT_EQ(focusManager_->GetLastFocusStateNode(), focusHubC);
162         }
163     }
164 }
165 
166 HWTEST_F(FocusCreatBoxTestNG, FocusCreatBoxTestNG001, TestSize.Level1)
167 {
168     bool initResult = InitFocusTestBaseNG();
169     EXPECT_TRUE(initResult);
170     InitFocusCreatBox();
171 }
172 } // namespace OHOS::Ace::NG
173