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