1 /* 2 * Copyright (c) 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 "test/unittest/core/base/frame_node_test_ng.h" 16 17 #include "core/event/touch_event.h" 18 19 using namespace testing; 20 using namespace testing::ext; 21 22 namespace OHOS::Ace::NG { 23 namespace {} // namespace 24 25 /** 26 * @tc.name: ResetLayoutAlgorithmTest1 27 * @tc.desc: Test the function ResetLayoutAlgorithm with default param 28 * @tc.type: FUNC 29 */ 30 HWTEST_F(FrameNodeTestNg, ResetLayoutAlgorithmTest1, TestSize.Level1) 31 { 32 /** 33 * @tc.steps: step1. create frameNode. 34 */ 35 auto frameNode1 = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true); 36 auto frameNode2 = FrameNode::CreateFrameNode("framenode", 2, AceType::MakeRefPtr<Pattern>()); 37 auto frameNode3 = FrameNode::CreateFrameNode("framenode", 3, AceType::MakeRefPtr<Pattern>()); 38 /** 39 * @tc.steps: step2. mount nodes and create layoutAlgorithm 40 */ 41 frameNode2->MountToParent(frameNode1); 42 frameNode3->MountToParent(frameNode2); 43 EXPECT_NE(frameNode1->GetLayoutAlgorithm(), nullptr); 44 EXPECT_NE(frameNode2->GetLayoutAlgorithm(), nullptr); 45 EXPECT_NE(frameNode3->GetLayoutAlgorithm(), nullptr); 46 /** 47 * @tc.steps: step2. start to clear. layoutAlgo of frameNode1 will not not be cleared 48 */ 49 frameNode1->ClearSubtreeLayoutAlgorithm(false); 50 EXPECT_TRUE(frameNode1->HasLayoutAlgorithm()); 51 EXPECT_FALSE(frameNode2->HasLayoutAlgorithm()); 52 EXPECT_FALSE(frameNode3->HasLayoutAlgorithm()); 53 } 54 55 /** 56 * @tc.name: ResetLayoutAlgorithmTest2 57 * @tc.desc: Test the function ResetLayoutAlgorithm with default param 58 * @tc.type: FUNC 59 */ 60 HWTEST_F(FrameNodeTestNg, ResetLayoutAlgorithmTest2, TestSize.Level1) 61 { 62 /** 63 * @tc.steps: step1. create frameNode. 64 */ 65 auto frameNode1 = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true); 66 auto frameNode2 = FrameNode::CreateFrameNode("framenode", 2, AceType::MakeRefPtr<Pattern>()); 67 auto frameNode3 = FrameNode::CreateFrameNode("framenode", 3, AceType::MakeRefPtr<Pattern>()); 68 69 /** 70 * @tc.steps: step2. mount nodes and create layoutAlgorithm 71 */ 72 frameNode2->MountToParent(frameNode1); 73 frameNode3->MountToParent(frameNode2); 74 EXPECT_NE(frameNode1->GetLayoutAlgorithm(), nullptr); 75 EXPECT_NE(frameNode2->GetLayoutAlgorithm(), nullptr); 76 EXPECT_NE(frameNode3->GetLayoutAlgorithm(), nullptr); 77 /** 78 * @tc.steps: step3. start to clear. layoutAlgo of frameNode1 will not not be cleared 79 */ 80 frameNode1->ClearSubtreeLayoutAlgorithm(true); 81 EXPECT_FALSE(frameNode1->HasLayoutAlgorithm()); 82 EXPECT_FALSE(frameNode2->HasLayoutAlgorithm()); 83 EXPECT_FALSE(frameNode3->HasLayoutAlgorithm()); 84 } 85 86 /** 87 * @tc.name: ResetLayoutAlgorithmTest3 88 * @tc.desc: Test the function ResetLayoutAlgorithm and node3 should still have layoutAlgorithm 89 * because chain broke at node2 90 * @tc.type: FUNC 91 */ 92 HWTEST_F(FrameNodeTestNg, ResetLayoutAlgorithmTest3, TestSize.Level1) 93 { 94 /** 95 * @tc.steps: step1. create frameNode. 96 */ 97 auto frameNode1 = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true); 98 auto frameNode2 = FrameNode::CreateFrameNode("framenode", 2, AceType::MakeRefPtr<Pattern>()); 99 auto frameNode3 = FrameNode::CreateFrameNode("framenode", 3, AceType::MakeRefPtr<Pattern>()); 100 /** 101 * @tc.steps: step2. mount nodes and create layoutAlgorithm 102 */ 103 frameNode2->MountToParent(frameNode1); 104 frameNode3->MountToParent(frameNode2); 105 EXPECT_NE(frameNode1->GetLayoutAlgorithm(), nullptr); 106 EXPECT_NE(frameNode3->GetLayoutAlgorithm(), nullptr); 107 /** 108 * @tc.steps: step3. start to clear. layoutAlgo of frameNode1 will not not be cleared 109 */ 110 frameNode1->ClearSubtreeLayoutAlgorithm(true); 111 EXPECT_FALSE(frameNode1->HasLayoutAlgorithm()); 112 EXPECT_FALSE(frameNode2->HasLayoutAlgorithm()); 113 EXPECT_TRUE(frameNode3->HasLayoutAlgorithm()); 114 } 115 116 /** 117 * @tc.name: ResetLayoutAlgorithmTest4 118 * @tc.desc: Test the function ResetLayoutAlgorithm with clearing the whole tree 119 * @tc.type: FUNC 120 */ 121 HWTEST_F(FrameNodeTestNg, ResetLayoutAlgorithmTest4, TestSize.Level1) 122 { 123 /** 124 * @tc.steps: step1. create frameNode. 125 */ 126 auto frameNode1 = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true); 127 auto frameNode2 = FrameNode::CreateFrameNode("framenode", 2, AceType::MakeRefPtr<Pattern>()); 128 auto frameNode3 = FrameNode::CreateFrameNode("framenode", 3, AceType::MakeRefPtr<Pattern>()); 129 /** 130 * @tc.steps: step2. mount nodes and create layoutAlgorithm 131 */ 132 frameNode2->MountToParent(frameNode1); 133 frameNode3->MountToParent(frameNode2); 134 EXPECT_NE(frameNode1->GetLayoutAlgorithm(), nullptr); 135 EXPECT_NE(frameNode3->GetLayoutAlgorithm(), nullptr); 136 /** 137 * @tc.steps: step3. start to clear. layoutAlgo of frameNode1 will not not be cleared 138 */ 139 frameNode1->ClearSubtreeLayoutAlgorithm(true, true); 140 EXPECT_FALSE(frameNode1->HasLayoutAlgorithm()); 141 EXPECT_FALSE(frameNode2->HasLayoutAlgorithm()); 142 EXPECT_FALSE(frameNode3->HasLayoutAlgorithm()); 143 } 144 } // namespace OHOS::Ace::NG