1 /* 2 * Copyright (c) 2025 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 16 #ifndef TEST_UNITTEST_CORE_EVENT_REQUEST_FOCUS_TEST_H 17 #define TEST_UNITTEST_CORE_EVENT_REQUEST_FOCUS_TEST_H 18 #include <cstddef> 19 #include <cstdint> 20 21 #include "gtest/gtest.h" 22 #include "test/mock/core/common/mock_theme_manager.h" 23 #include "test/mock/core/pipeline/mock_pipeline_context.h" 24 #include "test/unittest/core/event/focus_core/focus_test_base.h" 25 #include "test/unittest/core/event/frame_node_on_tree.h" 26 27 #include "base/geometry/ng/offset_t.h" 28 #include "base/geometry/ng/size_t.h" 29 #include "base/memory/ace_type.h" 30 #include "base/memory/referenced.h" 31 #include "core/components/theme/app_theme.h" 32 #include "core/components_ng/base/frame_node.h" 33 #include "core/components_ng/event/focus_hub.h" 34 #include "core/components_ng/event/touch_event.h" 35 #include "core/components_ng/manager/focus/focus_view.h" 36 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h" 37 #include "core/components_ng/pattern/pattern.h" 38 #include "core/components_v2/inspector/inspector_constants.h" 39 #include "core/event/key_event.h" 40 #include "core/pipeline_ng/pipeline_context.h" 41 42 namespace OHOS::Ace::NG { 43 44 struct LinearFocusingCase { 45 std::string goFocusStartPoint; 46 bool isGoFocusActivityStatus; 47 bool isConfigurationTabindexNode; 48 bool isBrotherNodeGetFocus; 49 bool isChildNodeGetFocus; 50 std::string inputValue; 51 std::string expectResults; LinearFocusingCaseLinearFocusingCase52 LinearFocusingCase(const std::string& goFocusStartPoint, bool isGoFocusActivityStatus, 53 bool isConfigurationTabindexNode, bool isBrotherNodeGetFocus, bool isChildNodeGetFocus, 54 const std::string& inputValue, const std::string& expectResults) 55 : goFocusStartPoint(goFocusStartPoint), isGoFocusActivityStatus(isGoFocusActivityStatus), 56 isConfigurationTabindexNode(isConfigurationTabindexNode), isBrotherNodeGetFocus(isBrotherNodeGetFocus), 57 isChildNodeGetFocus(isChildNodeGetFocus), inputValue(inputValue), expectResults(expectResults) 58 {} 59 }; 60 struct LinearFocusingDirectCase { 61 std::string goFocusStartPoint; 62 bool isGoFocusActivityStatus; 63 bool isparentCanDealCurrentOperation; 64 bool isBrotherNodeGetFocus; 65 bool isChildNodeGetFocus; 66 std::string inputValue; 67 std::string expectResults; LinearFocusingDirectCaseLinearFocusingDirectCase68 LinearFocusingDirectCase(const std::string& goFocusStartPoint, bool isGoFocusActivityStatus, 69 bool isparentCanDealCurrentOperation, bool isBrotherNodeGetFocus, bool isChildNodeGetFocus, 70 const std::string& inputValue, const std::string& expectResults) 71 : goFocusStartPoint(goFocusStartPoint), isGoFocusActivityStatus(isGoFocusActivityStatus), 72 isparentCanDealCurrentOperation(isparentCanDealCurrentOperation), 73 isBrotherNodeGetFocus(isBrotherNodeGetFocus), isChildNodeGetFocus(isChildNodeGetFocus), 74 inputValue(inputValue), expectResults(expectResults) 75 {} 76 }; 77 78 struct LinearFocusingHomeCase { 79 std::string goFocusStartPoint; 80 bool isGoFocusActivityStatus; 81 bool isparentNodeHandleLeftRightFocus; 82 bool isparentNodeHandleUpOrDownFocus; 83 std::string inputValue; 84 std::string expectResults; LinearFocusingHomeCaseLinearFocusingHomeCase85 LinearFocusingHomeCase(const std::string& goFocusStartPoint, bool isGoFocusActivityStatus, 86 bool isparentNodeHandleLeftRightFocus, bool isparentNodeHandleUpOrDownFocus, const std::string& inputValue, 87 const std::string& expectResults) 88 : goFocusStartPoint(goFocusStartPoint), isGoFocusActivityStatus(isGoFocusActivityStatus), 89 isparentNodeHandleLeftRightFocus(isparentNodeHandleLeftRightFocus), 90 isparentNodeHandleUpOrDownFocus(isparentNodeHandleUpOrDownFocus), inputValue(inputValue), 91 expectResults(expectResults) 92 {} 93 }; 94 const std::vector<LinearFocusingCase> LINEAR_FOCUSING_CASES = { LinearFocusingCase( 95 { "A", true, false, false, false, "Tab走焦", "A" }) }; 96 97 const std::vector<LinearFocusingDirectCase> LINEAR_FOCUSING_DIRECT_CASES = { LinearFocusingDirectCase( 98 { "B", false, false, false, false, "上键走焦", "B" }) }; 99 100 const std::vector<LinearFocusingHomeCase> LINEAR_FOCUSING_HOME_CASES = { LinearFocusingHomeCase( 101 { "C", false, false, false, "HOME键走焦", "C" }) }; 102 103 class LinearFocusingTestNG : public FocusTestBaseNg, public testing::Test { 104 public: 105 static void SetUpTestSuite(); 106 static void TearDownTestSuite(); 107 void CreatNodeHandleUpDownFocus(int caseNum, const LinearFocusingHomeCase& testCase); 108 void CreatNodeHandleLeftRightFocus(int caseNum, const LinearFocusingHomeCase& testCase); 109 void HomeOrTabFocus(int caseNum, const LinearFocusingCase& testCase, RefPtr<FocusHub> focusHub); 110 void HomeOrTabFocusExpect(int caseNum, const LinearFocusingCase& testCase, RefPtr<FocusHub> focusHub); 111 void Test02Focus(int caseNum, const LinearFocusingDirectCase& testCase, RefPtr<FocusHub> focusHub); 112 void Test02FocusExpect(int caseNum, const LinearFocusingDirectCase& testCase, RefPtr<FocusHub> focusHub); 113 void HandleFocusAndExecuteTest(int32_t caseNum, const LinearFocusingDirectCase& testCase, 114 RefPtr<FocusHub> focusHubB, RefPtr<FocusHub> focusHubC, RefPtr<FocusHub> focusHubD, RefPtr<FocusHub> focusHubE, 115 RefPtr<FocusHub> focusHubF); 116 void CreateAndInitNodes(RefPtr<FrameNode>& rootNode, RefPtr<FocusHub>& rootNodeFocusHub, RefPtr<FrameNode>& nodeA, 117 RefPtr<FocusHub>& focusHubA, RefPtr<FrameNode>& nodeB, RefPtr<FocusHub>& focusHubB, RefPtr<FrameNode>& nodeC, 118 RefPtr<FocusHub>& focusHubC, RefPtr<FrameNode>& nodeD, RefPtr<FocusHub>& focusHubD, RefPtr<FrameNode>& nodeE, 119 RefPtr<FocusHub>& focusHubE, RefPtr<FrameNode>& nodeF, RefPtr<FocusHub>& focusHubF); 120 }; 121 } // namespace OHOS::Ace::NG 122 123 #endif