diff --git a/test/unittest/core/pattern/tabs/tab_bar_pattern_test_three_ng.cpp b/test/unittest/core/pattern/tabs/tab_bar_pattern_test_three_ng.cpp index 6791ba964aba886e8e662a2ba0e6f38ccf1d4920..9c86e922cbdd19830d52ed148fa6f22e06856bbe 100644 --- a/test/unittest/core/pattern/tabs/tab_bar_pattern_test_three_ng.cpp +++ b/test/unittest/core/pattern/tabs/tab_bar_pattern_test_three_ng.cpp @@ -1053,4 +1053,813 @@ HWTEST_F(TabBarPatternThreeTestNg, InitTabBarProperties001, TestSize.Level1) EXPECT_EQ(tabBarPattern->tabBarItemFocusBgColor_, Color::BLUE); EXPECT_EQ(tabBarPattern->tabBarItemDefaultBgColor_, Color::BLACK); } + +/** + * @tc.name: InitTabBarProperty001 + * @tc.desc: test InitTabBarProperty + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, InitTabBarProperty001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto count = 0; + auto callback = [&count](float) { count++; }; + + auto context = tabBarNode->GetRenderContext(); + ASSERT_NE(context, nullptr); + tabBarPattern->tabBarProperty_ = AceType::MakeRefPtr(0.0, std::move(callback)); + + tabBarPattern->InitTabBarProperty(); + + EXPECT_EQ(count, 1); +} + +/** + * @tc.name: OnAttachToFrameNode001 + * @tc.desc: test OnAttachToFrameNode + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, OnAttachToFrameNode001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + tabBarPattern->OnAttachToFrameNode(); + + EXPECT_EQ(tabBarNode->layoutProperty_->safeAreaExpandOpts_->type, SAFE_AREA_TYPE_SYSTEM); +} + +/** + * @tc.name: SetTabBarFinishCallback001 + * @tc.desc: test SetTabBarFinishCallback + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, SetTabBarFinishCallback001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto swiperNode = AceType::DynamicCast(tabsNode->GetTabs()); + ASSERT_NE(swiperNode, nullptr); + auto swiperPattern = swiperNode->GetPattern(); + ASSERT_NE(swiperPattern, nullptr); + auto swiperController = swiperPattern->GetSwiperController(); + ASSERT_NE(swiperController, nullptr); + + tabBarPattern->swiperController_ = swiperController; + + auto count = 0; + auto callback = [&count]() { count++; }; + + tabBarPattern->swiperController_->SetTabBarFinishCallback(callback); + tabBarPattern->SetTabBarFinishCallback(); + + EXPECT_EQ(count, 1); +} + +/** + * @tc.name: InitSurfaceChangedCallback001 + * @tc.desc: test InitSurfaceChangedCallback + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, InitSurfaceChangedCallback001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto pipeline = tabsNode->GetContext(); + ASSERT_NE(pipeline, nullptr); + + auto count = 0; + auto callback = [&count](int32_t, int32_t, int32_t, int32_t, WindowSizeChangeReason) { count++; }; + + pipeline->RegisterSurfaceChangedCallback(callback); + tabBarPattern->InitSurfaceChangedCallback(); + + EXPECT_EQ(count, 1); +} + +/** + * @tc.name: InitSurfaceChangedCallback002 + * @tc.desc: test InitSurfaceChangedCallback + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, InitSurfaceChangedCallback002, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto pipeline = tabsNode->GetContext(); + ASSERT_NE(pipeline, nullptr); + + tabBarPattern->surfaceChangedCallbackId_ = 1; + auto count = 0; + auto callback = [&count](int32_t, int32_t, int32_t, int32_t, WindowSizeChangeReason) { count++; }; + + pipeline->RegisterSurfaceChangedCallback(callback); + tabBarPattern->InitSurfaceChangedCallback(); + + EXPECT_EQ(count, 0); +} + +/** + * @tc.name: AddTabBarItemClickAndTouchEvent001 + * @tc.desc: test AddTabBarItemClickAndTouchEvent + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, AddTabBarItemClickAndTouchEvent001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto tabBarItemNode = AceType::DynamicCast(tabBarNode->GetChildAtIndex(0)); + auto count = 0; + auto callback1 = [&count](GestureEvent) { count++; }; + auto callback2 = [&count](TouchEventInfo) { count++; }; + + auto clickEvent = AceType::MakeRefPtr(std::move(callback1)); + auto touchEvent = AceType::MakeRefPtr(std::move(callback2)); + + auto gestureHub = tabBarNode->GetOrCreateGestureEventHub(); + ASSERT_NE(gestureHub, nullptr); + gestureHub->AddClickEvent(clickEvent); + gestureHub->AddTouchEvent(touchEvent); + + tabBarPattern->AddTabBarItemClickAndTouchEvent(tabBarItemNode); + + EXPECT_EQ(count, 2); +} + +/** + * @tc.name: AddMaskItemClickEvent001 + * @tc.desc: test AddMaskItemClickEvent + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, AddMaskItemClickEvent001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto count = 0; + auto callback1 = [&count](GestureEvent) { count++; }; + + auto clickEvent = AceType::MakeRefPtr(std::move(callback1)); + + auto gestureHub = tabBarNode->GetOrCreateGestureEventHub(); + ASSERT_NE(gestureHub, nullptr); + gestureHub->AddClickEvent(clickEvent); + + tabBarPattern->AddMaskItemClickEvent(); + + EXPECT_EQ(count, 1); +} + +/** + * @tc.name: FocusCurrentOffset001 + * @tc.desc: test FocusCurrentOffset + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, FocusCurrentOffset001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto tabBarLayoutProperty = tabBarNode->GetLayoutProperty(); + ASSERT_NE(tabBarLayoutProperty, nullptr); + + tabBarLayoutProperty->UpdateTabBarMode(TabBarMode::SCROLLABLE); + int32_t index = 2; + tabBarPattern->visibleItemPosition_.insert( + { { 0, { 0.0f, 100.0f } }, { 1, { 100.0f, 200.0f } }, { 2, { 200.0f, 300.0f } } }); + tabBarPattern->FocusCurrentOffset(index); + + EXPECT_EQ(tabBarPattern->focusIndex_, 2); +} + +/** + * @tc.name: RemoveTabBarEventCallback001 + * @tc.desc: test RemoveTabBarEventCallback + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, RemoveTabBarEventCallback001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto swiperNode = AceType::DynamicCast(tabsNode->GetTabs()); + ASSERT_NE(swiperNode, nullptr); + auto swiperPattern = swiperNode->GetPattern(); + ASSERT_NE(swiperPattern, nullptr); + auto swiperController = swiperPattern->GetSwiperController(); + ASSERT_NE(swiperController, nullptr); + + tabBarPattern->swiperController_ = swiperController; + + auto count = 0; + auto callback1 = [&count]() { count++; }; + tabBarPattern->swiperController_->SetRemoveTabBarEventCallback(callback1); + tabBarPattern->RemoveTabBarEventCallback(); + + EXPECT_EQ(count, 1); +} + +/** + * @tc.name: RemoveTabBarEventCallback002 + * @tc.desc: test RemoveTabBarEventCallback + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, RemoveTabBarEventCallback002, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto swiperNode = AceType::DynamicCast(tabsNode->GetTabs()); + ASSERT_NE(swiperNode, nullptr); + auto swiperPattern = swiperNode->GetPattern(); + ASSERT_NE(swiperPattern, nullptr); + auto swiperController = swiperPattern->GetSwiperController(); + ASSERT_NE(swiperController, nullptr); + + auto count = 0; + auto callback1 = [&count]() { count++; }; + tabBarPattern->swiperController_->SetRemoveTabBarEventCallback(callback1); + tabBarPattern->RemoveTabBarEventCallback(); + + EXPECT_EQ(count, 0); +} + +/** + * @tc.name: AddTabBarEventCallback001 + * @tc.desc: test AddTabBarEventCallback + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, AddTabBarEventCallback001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto swiperNode = AceType::DynamicCast(tabsNode->GetTabs()); + ASSERT_NE(swiperNode, nullptr); + auto swiperPattern = swiperNode->GetPattern(); + ASSERT_NE(swiperPattern, nullptr); + auto swiperController = swiperPattern->GetSwiperController(); + ASSERT_NE(swiperController, nullptr); + + tabBarPattern->swiperController_ = swiperController; + auto count = 0; + auto callback1 = [&count]() { count++; }; + tabBarPattern->swiperController_->SetAddTabBarEventCallback(callback1); + tabBarPattern->RemoveTabBarEventCallback(); + + EXPECT_EQ(count, 1); +} + +/** + * @tc.name: AddTabBarEventCallback002 + * @tc.desc: test AddTabBarEventCallback + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, AddTabBarEventCallback002, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto swiperNode = AceType::DynamicCast(tabsNode->GetTabs()); + ASSERT_NE(swiperNode, nullptr); + auto swiperPattern = swiperNode->GetPattern(); + ASSERT_NE(swiperPattern, nullptr); + auto swiperController = swiperPattern->GetSwiperController(); + ASSERT_NE(swiperController, nullptr); + + auto count = 0; + auto callback1 = [&count]() { count++; }; + tabBarPattern->swiperController_->SetAddTabBarEventCallback(callback1); + tabBarPattern->RemoveTabBarEventCallback(); + + EXPECT_EQ(count, 0); +} + +/** + * @tc.name: OnTabBarIndexChange001 + * @tc.desc: test OnTabBarIndexChange + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, OnTabBarIndexChange001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto pipeline = tabBarNode->GetContext(); + ASSERT_NE(pipeline, nullptr); + + auto count = 0; + auto callback1 = [&count]() { count++; }; + + int32_t index = 10; + pipeline->AddAfterRenderTask(callback1); + tabBarPattern->OnTabBarIndexChange(index); + + EXPECT_EQ(count, 1); +} + +/** + * @tc.name: StopTranslateAnimation001 + * @tc.desc: test StopTranslateAnimation + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, StopTranslateAnimation001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + bool isImmediately = true; + AnimationOption option; + option.SetDuration(0); + option.SetCurve(Curves::LINEAR); + auto count = 0; + auto callback1 = [&count]() { count++; }; + + AnimationUtils::Animate(option, callback1); + + tabBarPattern->StopTranslateAnimation(isImmediately); + + EXPECT_EQ(count, 1); +} + +/** + * @tc.name: StopTranslateAnimation002 + * @tc.desc: test StopTranslateAnimation + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, StopTranslateAnimation002, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + bool isImmediately = false; + + AnimationOption option; + option.SetDuration(0); + option.SetCurve(Curves::LINEAR); + auto count = 0; + auto callback1 = [&count]() { count++; }; + + AnimationUtils::Animate(option, callback1); + + tabBarPattern->StopTranslateAnimation(isImmediately); + + EXPECT_EQ(count, 0); +} + +/** + * @tc.name: StopTranslateAnimation003 + * @tc.desc: test StopTranslateAnimation + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, StopTranslateAnimation003, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + bool isImmediately = false; + + AnimationOption option; + option.SetDuration(0); + option.SetCurve(Curves::LINEAR); + auto count = 0; + auto callback1 = [&count]() { count++; }; + tabBarPattern->translateAnimation_ = AnimationUtils::StartAnimation(option, callback1); + + tabBarPattern->StopTranslateAnimation(isImmediately); + + EXPECT_EQ(tabBarPattern->translateAnimation_, nullptr); +} + +/** + * @tc.name: StopTranslateAnimation004 + * @tc.desc: test StopTranslateAnimation + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, StopTranslateAnimation004, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + bool isImmediately = false; + + AnimationOption option; + option.SetDuration(0); + option.SetCurve(Curves::LINEAR); + auto count = 0; + auto callback1 = [&count]() { count++; }; + tabBarPattern->tabbarIndicatorAnimation_ = AnimationUtils::StartAnimation(option, callback1); + + tabBarPattern->StopTranslateAnimation(isImmediately); + + EXPECT_EQ(tabBarPattern->tabbarIndicatorAnimation_, nullptr); +} + +/** + * @tc.name: GetLeftPadding001 + * @tc.desc: test GetLeftPadding + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, GetLeftPadding001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto geometryNode = tabBarNode->GetGeometryNode(); + ASSERT_NE(geometryNode, nullptr); + geometryNode->SetFrameSize(SizeF(200.0f, 100.0f)); + + tabBarPattern->barGridMargin_ = 10.0f; + geometryNode->padding_ = nullptr; + auto result = tabBarPattern->GetLeftPadding(); + + EXPECT_EQ(result, tabBarPattern->barGridMargin_); +} + +/** + * @tc.name: GetLeftPadding001 + * @tc.desc: test GetLeftPadding001 + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, GetLeftPadding002, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto geometryNode = tabBarNode->GetGeometryNode(); + ASSERT_NE(geometryNode, nullptr); + geometryNode->SetFrameSize(SizeF(200.0f, 100.0f)); + + tabBarPattern->barGridMargin_ = 10.0f; + geometryNode->padding_ = nullptr; + auto result = tabBarPattern->GetLeftPadding(); + + EXPECT_EQ(result, tabBarPattern->barGridMargin_); +} + +/** + * @tc.name: GetLeftPadding002 + * @tc.desc: test GetLeftPadding + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, GetLeftPadding003, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto geometryNode = tabBarNode->GetGeometryNode(); + ASSERT_NE(geometryNode, nullptr); + geometryNode->SetFrameSize(SizeF(200.0f, 100.0f)); + + tabBarPattern->barGridMargin_ = 10.0f; + geometryNode->padding_ = std::make_unique(); + geometryNode->padding_->left = 10.0f; + auto result = tabBarPattern->GetLeftPadding(); + + EXPECT_EQ(result, 20.0f); +} + +/** + * @tc.name: GetLeftPadding003 + * @tc.desc: test GetLeftPadding + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, GetLeftPadding004, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto geometryNode = tabBarNode->GetGeometryNode(); + ASSERT_NE(geometryNode, nullptr); + geometryNode->SetFrameSize(SizeF(200.0f, 100.0f)); + + tabBarPattern->barGridMargin_ = 10.0f; + geometryNode->padding_ = std::make_unique(); + auto result = tabBarPattern->GetLeftPadding(); + + EXPECT_EQ(result, tabBarPattern->barGridMargin_); +} + +/** + * @tc.name: ContentWillChange001 + * @tc.desc: test ContentWillChange + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, ContentWillChange001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + int32_t currentIndex = 10; + int32_t comingIndex = 10; + auto res = tabBarPattern->ContentWillChange(currentIndex, comingIndex); + + EXPECT_TRUE(res); +} + +/** + * @tc.name: ContentWillChange002 + * @tc.desc: test ContentWillChange + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, ContentWillChange002, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabsPattern = tabsNode->GetPattern(); + ASSERT_NE(tabsPattern, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + int32_t currentIndex = 10; + int32_t comingIndex = 5; + tabsPattern->interceptStatus_ = true; + tabsPattern->callback_ = nullptr; + auto res = tabBarPattern->ContentWillChange(currentIndex, comingIndex); + + EXPECT_FALSE(res); +} + +/** + * @tc.name: ContentWillChange003 + * @tc.desc: test ContentWillChange + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, ContentWillChange003, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabsPattern = tabsNode->GetPattern(); + ASSERT_NE(tabsPattern, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + int32_t currentIndex = 10; + int32_t comingIndex = 5; + tabsPattern->interceptStatus_ = true; + auto isfalg = false; + tabsPattern->callback_ = [&isfalg](int32_t, int32_t) -> bool { return isfalg = true; }; + auto res = tabBarPattern->ContentWillChange(currentIndex, comingIndex); + + EXPECT_TRUE(isfalg); + EXPECT_TRUE(res); +} + +/** + * @tc.name: UpdateFocusToSelectedNode001 + * @tc.desc: test UpdateFocusToSelectedNode + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, UpdateFocusToSelectedNode001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabsPattern = tabsNode->GetPattern(); + ASSERT_NE(tabsPattern, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto isFocusActive = true; + auto childFocusNode = tabBarPattern->GetCurrentFocusNode(); + ASSERT_NE(childFocusNode, nullptr); + + childFocusNode->currentFocus_ = false; + tabBarPattern->UpdateFocusToSelectedNode(isFocusActive); + + EXPECT_TRUE(childFocusNode->currentFocus_); +} + +/** + * @tc.name: UpdateFocusToSelectedNode002 + * @tc.desc: test UpdateFocusToSelectedNode + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, UpdateFocusToSelectedNode002, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabsPattern = tabsNode->GetPattern(); + ASSERT_NE(tabsPattern, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + auto isFocusActive = false; + auto childFocusNode = tabBarPattern->GetCurrentFocusNode(); + ASSERT_NE(childFocusNode, nullptr); + + childFocusNode->currentFocus_ = false; + tabBarPattern->UpdateFocusToSelectedNode(isFocusActive); + + EXPECT_FALSE(childFocusNode->currentFocus_); +} + +/** + * @tc.name: GetSubTabBarHoverColor001 + * @tc.desc: test GetSubTabBarHoverColor + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, GetSubTabBarHoverColor001, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabsPattern = tabsNode->GetPattern(); + ASSERT_NE(tabsPattern, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + tabBarPattern->isTabBarFocusActive_ = true; + tabBarPattern->focusIndicator_ = 10; + tabBarPattern->tabBarStyle_ = TabBarStyle::SUBTABBATSTYLE; + int32_t index = 10; + tabBarPattern->tabBarItemFocusBgColor_ = Color::BLACK; + auto color = tabBarPattern->GetSubTabBarHoverColor(index); + + EXPECT_FALSE(color, Color::BLACK); +} + +/** + * @tc.name: GetSubTabBarHoverColor002 + * @tc.desc: test GetSubTabBarHoverColor + * @tc.type: FUNC + */ +HWTEST_F(TabBarPatternThreeTestNg, GetSubTabBarHoverColor002, TestSize.Level1) +{ + RefPtr element = ViewStackProcessor::GetInstance()->GetMainElementNode(); + CHECK_NULL_VOID(element); + auto tabsNode = AceType::DynamicCast(element); + ASSERT_NE(tabsNode, nullptr); + auto tabsPattern = tabsNode->GetPattern(); + ASSERT_NE(tabsPattern, nullptr); + auto tabBarNode = AceType::DynamicCast(tabsNode->GetTabBar()); + ASSERT_NE(tabBarNode, nullptr); + auto tabBarPattern = tabBarNode->GetPattern(); + ASSERT_NE(tabBarPattern, nullptr); + + tabBarPattern->isTabBarFocusActive_ = false; + tabBarPattern->focusIndicator_ = 10; + tabBarPattern->tabBarStyle_ = TabBarStyle::SUBTABBATSTYLE; + int32_t index = 10; + tabBarPattern->tabBarItemHoverColor_ = Color::BLUE; + auto color = tabBarPattern->GetSubTabBarHoverColor(index); + + EXPECT_FALSE(color, Color::BLUE); +} } // namespace OHOS::Ace::NG