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