• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 iSoftStone Information Technology (Group) 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 #include "gtest/gtest.h"
17 
18 #define protected public
19 #define private public
20 
21 #include "base/memory/ace_type.h"
22 #include "base/memory/referenced.h"
23 #include "core/components_ng/base/frame_node.h"
24 #include "core/components_ng/base/observer_handler.h"
25 #include "core/components_ng/base/ui_node.h"
26 #include "core/components_ng/pattern/scroll/scroll_pattern.h"
27 #include "core/components_ng/pattern/navigation/navigation_content_pattern.h"
28 #include "core/components_ng/pattern/navigation/navigation_pattern.h"
29 #include "core/components_ng/pattern/navrouter/navdestination_layout_property.h"
30 #include "core/components_ng/pattern/navrouter/navdestination_model_ng.h"
31 #include "core/components_ng/pattern/navrouter/navdestination_pattern.h"
32 #include "core/components_v2/inspector/inspector_constants.h"
33 #include "test/mock/core/common/mock_container.h"
34 
35 using namespace testing;
36 using namespace testing::ext;
37 
38 namespace OHOS::Ace::NG {
39 namespace {
40 const float DEFAULT_DENSITY = 3.5f;
41 const float DEFAULT_NODE_OFFSET = 200.5f;
42 const int32_t DEFAULT_PARENT_NODE_ID = 1;
43 const int32_t DEFAULT_NODE_ID = 2;
44 } // namespace
45 class ObserverTestNg : public testing::Test {
46 public:
47     static void SetUpTestCase();
48     static void TearDownTestCase();
49 };
50 
SetUpTestCase()51 void ObserverTestNg::SetUpTestCase()
52 {
53     MockContainer::SetUp();
54 }
55 
TearDownTestCase()56 void ObserverTestNg::TearDownTestCase()
57 {
58     MockContainer::TearDown();
59 }
60 
61 
62 /**
63  * @tc.name: ObserverTestNg001
64  * @tc.desc: Test the operation of Observer
65  * @tc.type: FUNC
66  */
67 HWTEST_F(ObserverTestNg, ObserverTestNg001, TestSize.Level1)
68 {
69     auto navigation = NavigationGroupNode::GetOrCreateGroupNode(
__anon55f6b4350202() 70         "navigation", 11, []() { return AceType::MakeRefPtr<NavigationPattern>(); });
71     auto contentNode = NavDestinationGroupNode::GetOrCreateGroupNode(
__anon55f6b4350302() 72         V2::NAVDESTINATION_VIEW_ETS_TAG, 22, []() { return AceType::MakeRefPtr<NavDestinationPattern>(); });
73     auto pattern = contentNode->GetPattern<NavDestinationPattern>();
74     UIObserverHandler::GetInstance().NotifyNavigationStateChange(AceType::WeakClaim(Referenced::RawPtr(pattern)),
75                                                                  NavDestinationState::ON_SHOWN);
76     ASSERT_EQ(UIObserverHandler::GetInstance().navigationHandleFunc_, nullptr);
77     auto pattern1 = navigation->GetPattern<NavigationPattern>();
78     pattern1->navigationStack_ = AceType::MakeRefPtr<NavigationStack>();
79     UIObserverHandler::GetInstance().NotifyNavigationStateChange(AceType::WeakClaim(Referenced::RawPtr(pattern1)),
80                                                                  NavDestinationState::ON_SHOWN);
81     ASSERT_EQ(UIObserverHandler::GetInstance().navigationHandleFunc_, nullptr);
82 }
83 
84 /**
85  * @tc.name: ObserverTestNg002
86  * @tc.desc: Test the operation of Observer
87  * @tc.type: FUNC
88  */
89 HWTEST_F(ObserverTestNg, ObserverTestNg002, TestSize.Level1)
90 {
91     auto navigation = NavigationGroupNode::GetOrCreateGroupNode(
__anon55f6b4350402() 92         "navigation", 11, []() { return AceType::MakeRefPtr<NavigationPattern>(); });
93     navigation->GetPattern<NavigationPattern>()->navigationStack_ = AceType::MakeRefPtr<NavigationStack>();
94     auto contentNode = NavDestinationGroupNode::GetOrCreateGroupNode(
__anon55f6b4350502() 95         V2::NAVDESTINATION_VIEW_ETS_TAG, 22, []() { return AceType::MakeRefPtr<NavDestinationPattern>(); });
96     auto pathInfo = AceType::MakeRefPtr<NavPathInfo>();
97     ASSERT_NE(pathInfo, nullptr);
98     auto context = AceType::MakeRefPtr<NavDestinationContext>();
99     ASSERT_NE(context, nullptr);
100     context->SetNavPathInfo(pathInfo);
101 
102     auto pattern = contentNode->GetPattern<NavDestinationPattern>();
103     pattern->SetNavDestinationContext(context);
104     pattern->name_ = "test_name";
105     pattern->isOnShow_ = true;
106     pattern->navigationNode_ = AceType::WeakClaim(Referenced::RawPtr(navigation));
107 
108     auto info = UIObserverHandler::GetInstance().GetNavigationState(nullptr);
109     ASSERT_EQ(info, nullptr);
110 
111     info = UIObserverHandler::GetInstance().GetNavigationState(navigation);
112     ASSERT_EQ(info, nullptr);
113 
114     ASSERT_EQ(pattern->GetNavigationNode(), navigation);
115 
116     info = UIObserverHandler::GetInstance().GetNavigationState(contentNode);
117     ASSERT_NE(info, nullptr);
118     ASSERT_EQ(info->name, "test_name");
119     ASSERT_EQ(info->navigationId, "");
120     ASSERT_EQ(info->state, NavDestinationState::ON_SHOWN);
121 }
122 
123 /**
124  * @tc.name: ObserverTestNg003
125  * @tc.desc: Test the operation of Observer
126  * @tc.type: FUNC
127  */
128 HWTEST_F(ObserverTestNg, ObserverTestNg003, TestSize.Level1)
129 {
130     auto frameNode = FrameNode::GetOrCreateFrameNode(
__anon55f6b4350602() 131         V2::SCROLL_ETS_TAG, 12, []() { return AceType::MakeRefPtr<ScrollPattern>(); });
132     auto pattern = frameNode->GetPattern<ScrollablePattern>();
133     UIObserverHandler::GetInstance().NotifyScrollEventStateChange(AceType::WeakClaim(Referenced::RawPtr(pattern)),
134                                                                  ScrollEventType::SCROLL_START);
135     ASSERT_EQ(UIObserverHandler::GetInstance().scrollEventHandleFunc_, nullptr);
136 }
137 
138 /**
139  * @tc.name: ObserverTestNg004
140  * @tc.desc: Test the operation of Observer
141  * @tc.type: FUNC
142  */
143 HWTEST_F(ObserverTestNg, ObserverTestNg004, TestSize.Level1)
144 {
145     auto frameNode = FrameNode::GetOrCreateFrameNode(
__anon55f6b4350702() 146         V2::SCROLL_ETS_TAG, 12, []() { return AceType::MakeRefPtr<ScrollPattern>(); });
147     auto pattern = frameNode->GetPattern<ScrollablePattern>();
148     double offset = 0.0f;
149     pattern->UpdateCurrentOffset(offset, SCROLL_FROM_AXIS);
150 
151     auto info = UIObserverHandler::GetInstance().GetScrollEventState(frameNode);
152     ASSERT_EQ(info->id, frameNode->GetInspectorId().value_or(""));
153     ASSERT_EQ(info->uniqueId, frameNode->GetId());
154     ASSERT_EQ(info->scrollEvent, ScrollEventType::SCROLL_START);
155     ASSERT_EQ(info->offset, offset);
156     ASSERT_EQ(info->axis, pattern->GetAxis());
157 }
158 
159 /**
160  * @tc.name: ObserverTestNg005
161  * @tc.desc: Test the operation of Observer
162  * @tc.type: FUNC
163  */
164 HWTEST_F(ObserverTestNg, ObserverTestNg005, TestSize.Level1)
165 {
166     auto targetDensity = DEFAULT_DENSITY;
__anon55f6b4350802(AbilityContextInfo& context, double density) 167     UIObserverHandler::GetInstance().densityHandleFunc_ = [](AbilityContextInfo& context, double density) -> void {
168         EXPECT_EQ(density, DEFAULT_DENSITY);
169     };
170     UIObserverHandler::GetInstance().NotifyDensityChange(targetDensity);
171 }
172 
173 /**
174  * @tc.name: ObserverTestNg006
175  * @tc.desc: Test the operation of Observer
176  * @tc.type: FUNC
177  */
178 HWTEST_F(ObserverTestNg, ObserverTestNg006, TestSize.Level1)
179 {
180     std::optional<NavDestinationInfo> from;
181     std::optional<NavDestinationInfo> to;
182     NavigationOperation operation = NavigationOperation::PUSH;
183     UIObserverHandler::NavDestinationSwitchHandleFunc handleFunc = [](const AbilityContextInfo&,
__anon55f6b4350902(const AbilityContextInfo&, NavDestinationSwitchInfo& info) 184                                                                        NavDestinationSwitchInfo& info) -> void {
185         EXPECT_EQ(info.operation, NavigationOperation::PUSH);
186     };
187     UIObserverHandler::GetInstance().navDestinationSwitchHandleFunc_ = handleFunc;
188     UIObserverHandler::GetInstance().NotifyNavDestinationSwitch(std::move(from), std::move(to), operation);
189 }
190 
191 /**
192  * @tc.name: ObserverTestNg007
193  * @tc.desc: Test the operation of Observer
194  * @tc.type: FUNC
195  */
196 HWTEST_F(ObserverTestNg, ObserverTestNg007, TestSize.Level1)
197 {
198     GestureEvent gestureEventInfo;
199     ClickInfo clickInfo = ClickInfo(0);
200     RefPtr<FrameNode> frameNode = nullptr;
201 
202     UIObserverHandler::GetInstance().NotifyWillClick(gestureEventInfo, clickInfo, frameNode);
203     ASSERT_EQ(UIObserverHandler::GetInstance().willClickHandleFunc_, nullptr);
204 }
205 
206 /**
207  * @tc.name: ObserverTestNg008
208  * @tc.desc: Test the operation of Observer
209  * @tc.type: FUNC
210  */
211 HWTEST_F(ObserverTestNg, ObserverTestNg008, TestSize.Level1)
212 {
213     GestureEvent gestureEventInfo;
214     ClickInfo clickInfo = ClickInfo(0);
215     RefPtr<FrameNode> frameNode = nullptr;
216 
217     UIObserverHandler::GetInstance().NotifyDidClick(gestureEventInfo, clickInfo, frameNode);
218     ASSERT_EQ(UIObserverHandler::GetInstance().didClickHandleFunc_, nullptr);
219 }
220 
221 /**
222  * @tc.name: ObserverTestNg009
223  * @tc.desc: Test the func of GetHandleNavDestinationSwitchFunc
224  * @tc.type: FUNC
225  */
226 HWTEST_F(ObserverTestNg, ObserverTestNg009, TestSize.Level1)
227 {
228     std::optional<NavDestinationInfo> from;
229     std::optional<NavDestinationInfo> to;
230     UIObserverHandler::NavDestinationSwitchHandleFunc handleFunc = [](const AbilityContextInfo&,
__anon55f6b4350a02(const AbilityContextInfo&, NavDestinationSwitchInfo&) 231                                                                        NavDestinationSwitchInfo&) -> void {};
232     UIObserverHandler::GetInstance().navDestinationSwitchHandleFunc_ = handleFunc;
233     UIObserverHandler::NavDestinationSwitchHandleFunc func =
234         UIObserverHandler::GetInstance().GetHandleNavDestinationSwitchFunc();
235     ASSERT_NE(handleFunc, nullptr);
236     ASSERT_NE(func, nullptr);
237 }
238 
239 /**
240  * @tc.name: ObserverTestNg010
241  * @tc.desc: Test the operation of Observer
242  * @tc.type: FUNC
243  */
244 HWTEST_F(ObserverTestNg, ObserverTestNg010, TestSize.Level1)
245 {
246     auto navigation = NavigationGroupNode::GetOrCreateGroupNode(
__anon55f6b4350b02() 247         "navigation", 11, []() { return AceType::MakeRefPtr<NavigationPattern>(); });
248     navigation->GetPattern<NavigationPattern>()->navigationStack_ = AceType::MakeRefPtr<NavigationStack>();
249     auto contentNode = NavDestinationGroupNode::GetOrCreateGroupNode(
__anon55f6b4350c02() 250         V2::NAVDESTINATION_VIEW_ETS_TAG, 22, []() { return AceType::MakeRefPtr<NavDestinationPattern>(); });
251     auto pathInfo = AceType::MakeRefPtr<NavPathInfo>();
252     ASSERT_NE(pathInfo, nullptr);
253     auto context = AceType::MakeRefPtr<NavDestinationContext>();
254     ASSERT_NE(context, nullptr);
255     context->SetNavPathInfo(pathInfo);
256 
257     auto pattern = contentNode->GetPattern<NavDestinationPattern>();
258     pattern->SetNavDestinationContext(context);
259     pattern->name_ = "test_name";
260     pattern->isOnShow_ = true;
261     pattern->navigationNode_ = AceType::WeakClaim(Referenced::RawPtr(navigation));
262 
263     auto info = UIObserverHandler::GetInstance().GetNavigationOuterState(nullptr);
264     ASSERT_EQ(info, nullptr);
265 
266     info = UIObserverHandler::GetInstance().GetNavigationOuterState(navigation);
267     ASSERT_EQ(info, nullptr);
268 
269     ASSERT_EQ(pattern->GetNavigationNode(), navigation);
270 
271     info = UIObserverHandler::GetInstance().GetNavigationOuterState(contentNode);
272     ASSERT_EQ(info, nullptr);
273 }
274 
275 /**
276  * @tc.name: ObserverTestNg011
277  * @tc.desc: Test the operation of Observer
278  * @tc.type: FUNC
279  */
280 HWTEST_F(ObserverTestNg, ObserverTestNg011, TestSize.Level1)
281 {
282     auto navigation = NavigationGroupNode::GetOrCreateGroupNode(
__anon55f6b4350d02() 283         "navigation", 11, []() { return AceType::MakeRefPtr<NavigationPattern>(); });
284     navigation->GetPattern<NavigationPattern>()->navigationStack_ = AceType::MakeRefPtr<NavigationStack>();
285     auto contentNode = NavDestinationGroupNode::GetOrCreateGroupNode(
__anon55f6b4350e02() 286         V2::NAVDESTINATION_VIEW_ETS_TAG, 22, []() { return AceType::MakeRefPtr<NavDestinationPattern>(); });
287     auto pathInfo = AceType::MakeRefPtr<NavPathInfo>();
288     ASSERT_NE(pathInfo, nullptr);
289     auto context = AceType::MakeRefPtr<NavDestinationContext>();
290     ASSERT_NE(context, nullptr);
291     context->SetNavPathInfo(pathInfo);
292 
293     auto pattern = contentNode->GetPattern<NavDestinationPattern>();
294     pattern->SetNavDestinationContext(context);
295     pattern->name_ = "test_name";
296     pattern->isOnShow_ = true;
297     pattern->navigationNode_ = AceType::WeakClaim(Referenced::RawPtr(navigation));
298 
299     auto info = UIObserverHandler::GetInstance().GetNavigationInnerState(nullptr);
300     ASSERT_EQ(info, nullptr);
301 
302     info = UIObserverHandler::GetInstance().GetNavigationInnerState(navigation);
303     ASSERT_EQ(info, nullptr);
304 }
305 
306 /**
307  * @tc.name: ObserverTestNg012
308  * @tc.desc: Test the operation of Observer
309  * @tc.type: FUNC
310  */
311 HWTEST_F(ObserverTestNg, ObserverTestNg012, TestSize.Level1)
312 {
313     auto navigation = NavigationGroupNode::GetOrCreateGroupNode(
__anon55f6b4350f02() 314         "navigation", 11, []() { return AceType::MakeRefPtr<NavigationPattern>(); });
315     navigation->GetPattern<NavigationPattern>()->navigationStack_ = AceType::MakeRefPtr<NavigationStack>();
316     auto navigationContentNode = FrameNode::GetOrCreateFrameNode(V2::NAVIGATION_CONTENT_ETS_TAG, 12,
__anon55f6b4351002() 317         []() { return AceType::MakeRefPtr<NavigationContentPattern>(); });
318     auto navDestination = NavDestinationGroupNode::GetOrCreateGroupNode(
__anon55f6b4351102() 319         V2::NAVDESTINATION_VIEW_ETS_TAG, 22, []() { return AceType::MakeRefPtr<NavDestinationPattern>(); });
320     auto pathInfo = AceType::MakeRefPtr<NavPathInfo>();
321     ASSERT_NE(pathInfo, nullptr);
322     auto context = AceType::MakeRefPtr<NavDestinationContext>();
323     ASSERT_NE(context, nullptr);
324     context->SetNavPathInfo(pathInfo);
325     navDestination->SetParent(navigationContentNode);
326     auto pattern = navDestination->GetPattern<NavDestinationPattern>();
327     pattern->SetNavDestinationContext(context);
328     pattern->name_ = "test_name";
329     pattern->isOnShow_ = true;
330     pattern->navigationNode_ = AceType::WeakClaim(Referenced::RawPtr(navigation));
331 
332     auto info = UIObserverHandler::GetInstance().GetNavigationOuterState(nullptr);
333     ASSERT_EQ(info, nullptr);
334 
335     info = UIObserverHandler::GetInstance().GetNavigationOuterState(navigation);
336     ASSERT_EQ(info, nullptr);
337 
338     ASSERT_EQ(pattern->GetNavigationNode(), navigation);
339 
340     info = UIObserverHandler::GetInstance().GetNavigationOuterState(navDestination);
341     ASSERT_NE(info, nullptr);
342     ASSERT_EQ(info->name, "test_name");
343     ASSERT_EQ(info->navigationId, "");
344     ASSERT_EQ(info->state, NavDestinationState::ON_SHOWN);
345 }
346 
347 /**
348  * @tc.name: ObserverTestNg013
349  * @tc.desc: Test the operation of Observer
350  * @tc.type: FUNC
351  */
352 HWTEST_F(ObserverTestNg, ObserverTestNg013, TestSize.Level1)
353 {
354     GestureEvent gestureEventInfo;
355     RefPtr<FrameNode> frameNode = nullptr;
356     const RefPtr<PanRecognizer> current = nullptr;
357     PanGestureInfo panGestureInfo = { PanGestureState::AFTER, CurrentCallbackState::START };
358     UIObserverHandler::GetInstance().NotifyPanGestureStateChange(gestureEventInfo, current, frameNode, panGestureInfo);
359     ASSERT_EQ(UIObserverHandler::GetInstance().panGestureHandleFunc_, nullptr);
360 }
361 
362 /**
363  * @tc.name: ObserverTestNg014
364  * @tc.desc: Test the operation of Observer
365  * @tc.type: FUNC
366  */
367 HWTEST_F(ObserverTestNg, ObserverTestNg014, TestSize.Level1)
368 {
369     /**
370      * @tc.steps1: initialize parameters.
371      */
372     auto frameNode = FrameNode::GetOrCreateFrameNode(
__anon55f6b4351202() 373         V2::SCROLL_ETS_TAG, DEFAULT_NODE_ID, []() { return AceType::MakeRefPtr<ScrollPattern>(); });
374     auto pattern = frameNode->GetPattern<ScrollablePattern>();
375 
376     /**
377      * @tc.steps2: call the function NotifyScrollEventStateChange.
378      * @tc.expected: The value of eventType is changed from SCROLL_START to SCROLL_STOP.
379      */
380     UIObserverHandler::GetInstance().NotifyScrollEventStateChange(AceType::WeakClaim(Referenced::RawPtr(pattern)),
381                                                                 ScrollEventType::SCROLL_STOP);
382     /**
383      * @tc.steps3: The function is called and the value of scrollEventHandleFunc_ is nullptr.
384      */
385     ASSERT_EQ(UIObserverHandler::GetInstance().scrollEventHandleFunc_, nullptr);
386 }
387 
388 /**
389  * @tc.name: ObserverTestNg015
390  * @tc.desc: Test the operation of Observer
391  * @tc.type: FUNC
392  */
393 HWTEST_F(ObserverTestNg, ObserverTestNg015, TestSize.Level1)
394 {
395     /**
396      * @tc.steps1: initialize parameters.
397      */
398     auto navigation = NavigationGroupNode::GetOrCreateGroupNode(
__anon55f6b4351302() 399         "navigation", 11, []() { return AceType::MakeRefPtr<NavigationPattern>(); });
400     navigation->GetPattern<NavigationPattern>()->navigationStack_ = AceType::MakeRefPtr<NavigationStack>();
401     auto navContentParent = NavDestinationGroupNode::GetOrCreateGroupNode(
__anon55f6b4351402() 402         V2::NAVIGATION_CONTENT_ETS_TAG, 33, []() { return AceType::MakeRefPtr<NavDestinationPattern>(); });
403     auto navDestinationChild = NavDestinationGroupNode::GetOrCreateGroupNode(
__anon55f6b4351502() 404         V2::NAVDESTINATION_VIEW_ETS_TAG, 22, []() { return AceType::MakeRefPtr<NavDestinationPattern>(); });
405     navContentParent->AddChild(navDestinationChild);
406     navigation->AddChild(navContentParent);
407 
408     /**
409      * @tc.steps2: call the function GetNavigationInnerState.
410      * @tc.expected: The value of V2::NAVDESTINATION_VIEW_ETS_TAG && V2::NAVIGATION_CONTENT_ETS_TAG
411      */
412     auto pathInfo = AceType::MakeRefPtr<NavPathInfo>();
413     ASSERT_NE(pathInfo, nullptr);
414     auto context = AceType::MakeRefPtr<NavDestinationContext>();
415     ASSERT_NE(context, nullptr);
416     context->SetNavPathInfo(pathInfo);
417 
418     auto pattern = navDestinationChild->GetPattern<NavDestinationPattern>();
419     pattern->SetNavDestinationContext(context);
420     pattern->name_ = "test_name";
421     pattern->isOnShow_ = true;
422     pattern->navigationNode_ = AceType::WeakClaim(Referenced::RawPtr(navigation));
423     auto info = UIObserverHandler::GetInstance().GetNavigationInnerState(nullptr);
424     ASSERT_EQ(info, nullptr);
425 
426     /**
427      * @tc.steps3: Call the function GetNavigationInnerState again.
428      * @tc.expected: The function is called and the value of info is not nullptr.
429      */
430     info = UIObserverHandler::GetInstance().GetNavigationInnerState(navigation);
431     ASSERT_NE(info, nullptr);
432     EXPECT_EQ(info->name, "test_name");
433 }
434 
435 /**
436  * @tc.name: ObserverTestNg016
437  * @tc.desc: Test the operation of Observer
438  * @tc.type: FUNC
439  */
440 HWTEST_F(ObserverTestNg, ObserverTestNg016, TestSize.Level1)
441 {
442     /**
443      * @tc.steps1: initialize parameters.
444      */
445     auto parentFrame = FrameNode::GetOrCreateFrameNode(
__anon55f6b4351602() 446         V2::SCROLL_ETS_TAG, 100, []() { return AceType::MakeRefPtr<ScrollPattern>(); });
447     auto parentPattern = parentFrame->GetPattern<ScrollablePattern>();
448     parentPattern->UpdateCurrentOffset(DEFAULT_NODE_ID, SCROLL_FROM_AXIS);
449     auto childFrame = FrameNode::GetOrCreateFrameNode(
__anon55f6b4351702() 450         V2::SCROLL_COMPONENT_TAG, 101, []() { return AceType::MakeRefPtr<ScrollPattern>(); });
451     childFrame->SetParent(parentFrame);
452 
453     /**
454      * @tc.steps2: call the function GetScrollEventState.
455      * @tc.expected: The function is called and the value of info is not nullptr.
456      */
457     auto info = UIObserverHandler::GetInstance().GetScrollEventState(childFrame);
458     ASSERT_NE(info, nullptr);
459     ASSERT_EQ(info->uniqueId, 100);
460     ASSERT_NE(info->offset, DEFAULT_NODE_OFFSET);
461 }
462 
463 /**
464  * @tc.name: ObserverTestNg017
465  * @tc.desc: Test the operation of Observer
466  * @tc.type: FUNC
467  */
468 HWTEST_F(ObserverTestNg, ObserverTestNg017, TestSize.Level1)
469 {
470     /**
471      * @tc.steps1: initialize parameters.
472      */
473     auto parentFrame = FrameNode::GetOrCreateFrameNode(
__anon55f6b4351802() 474         V2::PAGE_ETS_TAG, DEFAULT_PARENT_NODE_ID, []() { return AceType::MakeRefPtr<ScrollPattern>(); });
475     auto parentPattern = parentFrame->GetPattern<ScrollablePattern>();
476     parentPattern->UpdateCurrentOffset(DEFAULT_NODE_OFFSET, SCROLL_FROM_AXIS);
477 
478     /**
479      * @tc.steps2: call the function GetOrCreateFrameNode.
480      * @tc.expected: The value of current->GetTag() is PAGE_ETS_TAG
481      */
482     auto childFrame = FrameNode::GetOrCreateFrameNode(
__anon55f6b4351902() 483         V2::SCROLL_ETS_TAG, DEFAULT_NODE_ID, []() { return AceType::MakeRefPtr<ScrollPattern>(); });
484     childFrame->SetParent(parentFrame);
485 
486     /**
487      * @tc.steps3: call the function GetOrCreateFrameNode again.
488      * @tc.expected: The value of current->GetTag() is SCROLL_ETS_TAG
489      */
490     auto info = UIObserverHandler::GetInstance().GetRouterPageState(childFrame);
491     ASSERT_EQ(info, nullptr);
492 }
493 
494 /**
495  * @tc.name: ObserverTestNg018
496  * @tc.desc: Test the scroll direction of components
497  * @tc.type: FUNC
498  */
499 HWTEST_F(ObserverTestNg, ObserverTestNg018, TestSize.Level1)
500 {
501     auto frameNode = FrameNode::GetOrCreateFrameNode(
__anon55f6b4351a02() 502         V2::SCROLL_ETS_TAG, DEFAULT_NODE_ID, []() { return AceType::MakeRefPtr<ScrollPattern>(); });
503     auto pattern = frameNode->GetPattern<ScrollablePattern>();
504 
505     pattern->SetAxis(Axis::VERTICAL);
506     auto info = UIObserverHandler::GetInstance().GetScrollEventState(frameNode);
507     ASSERT_EQ(info->axis, Axis::VERTICAL);
508 
509     pattern->SetAxis(Axis::HORIZONTAL);
510     info = UIObserverHandler::GetInstance().GetScrollEventState(frameNode);
511     ASSERT_EQ(info->axis, Axis::HORIZONTAL);
512 
513     pattern->SetAxis(Axis::NONE);
514     info = UIObserverHandler::GetInstance().GetScrollEventState(frameNode);
515     ASSERT_EQ(info->axis, Axis::NONE);
516 }
517 }
518