Add Tabs TDD Coverage

Signed-off-by: wanglichao <wanglichao10@h-partners.com>
Change-Id: Id032e611c5985a5fc03ee84cb3b457cc3b8e5679
This commit is contained in:
wanglichao 2024-06-26 17:11:38 +08:00
parent 6008a163f6
commit 2531dbb120
5 changed files with 104 additions and 102 deletions

View File

@ -33,19 +33,23 @@ HWTEST_F(TabBarTestNg, TabBarPatternUpdateSubTabBoard001, TestSize.Level1)
TabsModelNG model = CreateTabs();
CreateTabContents(TABCONTENT_NUMBER);
CreateTabsDone(model);
auto pipeline = PipelineContext::GetCurrentContext();
auto tabContentFrameNode = AceType::DynamicCast<TabContentNode>(GetChildFrameNode(swiperNode_, 0));
auto tabContentPattern = tabContentFrameNode->GetPattern<TabContentPattern>();
tabBarPattern_->UpdateSubTabBoard();
EXPECT_EQ(swiperNode_->GetTag(), V2::SWIPER_ETS_TAG);
pipeline->fontScale_ = BIG_FONT_SIZE_SCALE;
tabBarPattern_->UpdateSubTabBoard();
EXPECT_EQ(tabBarPattern_->selectedModes_[0], SelectedMode::INDICATOR);
tabBarPattern_->SetSelectedMode(SelectedMode::BOARD, 0);
EXPECT_EQ(tabBarPattern_->selectedModes_[0], SelectedMode::BOARD);
pipeline->fontScale_ = LARGE_FONT_SIZE_SCALE;
tabBarPattern_->UpdateSubTabBoard();
EXPECT_EQ(tabBarPattern_->indicator_, 0);
tabBarPattern_->indicator_ = 1;
pipeline->fontScale_ = MAX_FONT_SIZE_SCALE;
tabBarPattern_->UpdateSubTabBoard();
EXPECT_EQ(tabBarPattern_->indicator_, 1);
@ -68,6 +72,7 @@ HWTEST_F(TabBarTestNg, TabBarPatternUpdateSubTabBoard001, TestSize.Level1)
tabBarLayoutProperty_->UpdateAxis(Axis::HORIZONTAL);
tabBarPattern_->UpdateSubTabBoard();
EXPECT_EQ(tabBarPattern_->indicator_, 0);
pipeline->fontScale_ = 1.f;
}
/**

View File

@ -866,9 +866,8 @@ HWTEST_F(TabsAttrTestNg, TabsModelSetWidthAuto001, TestSize.Level1)
model.SetHeightAuto(true);
CreateTabContents(TABCONTENT_NUMBER);
CreateTabsDone(model);
auto tabsLayoutProperty = layoutProperty_;
EXPECT_TRUE(tabsLayoutProperty->GetWidthAutoValue(false));
EXPECT_TRUE(tabsLayoutProperty->GetHeightAutoValue(false));
EXPECT_TRUE(layoutProperty_->GetWidthAutoValue(false));
EXPECT_TRUE(layoutProperty_->GetHeightAutoValue(false));
}
/**
@ -1103,18 +1102,68 @@ HWTEST_F(TabsAttrTestNg, TabsModelSetBarAdaptiveHeight001, TestSize.Level1)
HWTEST_F(TabsAttrTestNg, TabsModelSetScrollableBarModeOptions001, TestSize.Level1)
{
/**
* @tc.steps: steps2. SetScrollableBarModeOptions.
* @tc.expected: steps2. Check if the SetScrollableBarModeOptions function successfully sets
* ScrollableBarModeOptions.
* @tc.steps: steps1. Default ScrollableBarModeOptions
* @tc.expected: The items are compact and centered
*/
ScrollableBarModeOptions option;
option.margin = 0.0_vp;
option.nonScrollableLayoutStyle = LayoutStyle::ALWAYS_CENTER;
TabsModelNG model = CreateTabs();
model.SetTabBarMode(TabBarMode::SCROLLABLE);
model.SetScrollableBarModeOptions(option);
CreateTabContents(TABCONTENT_NUMBER);
CreateTabContentsWithBuilder(TABCONTENT_NUMBER);
CreateTabsDone(model);
EXPECT_EQ(tabBarLayoutProperty_->GetScrollableBarModeOptions(), option);
float halfTabsWidth = TABS_WIDTH / 2;
EXPECT_EQ(GetChildX(tabBarNode_, 0), halfTabsWidth - BARITEM_SIZE * 2);
EXPECT_EQ(GetChildX(tabBarNode_, 1), halfTabsWidth - BARITEM_SIZE);
EXPECT_EQ(GetChildX(tabBarNode_, 2), halfTabsWidth);
EXPECT_EQ(GetChildX(tabBarNode_, 3), halfTabsWidth + BARITEM_SIZE);
/**
* @tc.steps: steps2. Set margin and ALWAYS_AVERAGE_SPLIT
* @tc.expected: The items are evenly distributed
*/
float margin = 10.f;
option.margin = Dimension(margin);
option.nonScrollableLayoutStyle = LayoutStyle::ALWAYS_AVERAGE_SPLIT;
tabBarLayoutProperty_->UpdateScrollableBarModeOptions(option);
frameNode_->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
FlushLayoutTask(frameNode_);
float interval = (halfTabsWidth - margin) / 2;
EXPECT_EQ(GetChildX(tabBarNode_, 0), margin);
EXPECT_EQ(GetChildX(tabBarNode_, 1), halfTabsWidth - interval);
EXPECT_EQ(GetChildX(tabBarNode_, 2), halfTabsWidth);
EXPECT_EQ(GetChildX(tabBarNode_, 3), halfTabsWidth + interval);
/**
* @tc.steps: steps3. Set SPACE_BETWEEN_OR_CENTER, and total items width not exceed halfTabsWidth
* @tc.expected: The items are compact and centered in halfTabsWidth
*/
option.margin = Dimension(0.f);
option.nonScrollableLayoutStyle = LayoutStyle::SPACE_BETWEEN_OR_CENTER;
tabBarLayoutProperty_->UpdateScrollableBarModeOptions(option);
frameNode_->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
FlushLayoutTask(frameNode_);
interval = halfTabsWidth / TABCONTENT_NUMBER;
EXPECT_EQ(GetChildX(tabBarNode_, 0), halfTabsWidth - interval * 2);
EXPECT_EQ(GetChildX(tabBarNode_, 1), halfTabsWidth - interval);
EXPECT_EQ(GetChildX(tabBarNode_, 2), halfTabsWidth);
EXPECT_EQ(GetChildX(tabBarNode_, 3), halfTabsWidth + interval);
/**
* @tc.steps: steps4. Set SPACE_BETWEEN_OR_CENTER, and total items width exceed halfTabsWidth
* @tc.expected: The items are evenly distributed
*/
option.margin = Dimension(0.f);
option.nonScrollableLayoutStyle = LayoutStyle::SPACE_BETWEEN_OR_CENTER;
const float tabsWidth = BARITEM_SIZE * (TABCONTENT_NUMBER + 1);
ViewAbstract::SetWidth(AceType::RawPtr(frameNode_), CalcLength(tabsWidth));
tabBarLayoutProperty_->UpdateScrollableBarModeOptions(option);
frameNode_->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
FlushLayoutTask(frameNode_);
halfTabsWidth = tabsWidth / 2;
EXPECT_EQ(GetChildX(tabBarNode_, 0), halfTabsWidth - BARITEM_SIZE * 2);
EXPECT_EQ(GetChildX(tabBarNode_, 1), halfTabsWidth - BARITEM_SIZE);
EXPECT_EQ(GetChildX(tabBarNode_, 2), halfTabsWidth);
EXPECT_EQ(GetChildX(tabBarNode_, 3), halfTabsWidth + BARITEM_SIZE);
}
/**

View File

@ -30,7 +30,11 @@ AssertionResult TabsCommonTestNg::IsEqualNextFocusNode(FocusStep step,
{
RefPtr<FocusHub> currentFocusNode = currentNode->GetOrCreateFocusHub();
currentFocusNode->RequestFocusImmediately();
RefPtr<FocusHub> nextFocusNode = pattern_->GetNextFocusNode(step, currentFocusNode).Upgrade();
ScopeFocusAlgorithm scopeFocusAlgorithm = pattern_->GetScopeFocusAlgorithm();
GetNextFocusNodeFunc getNextFocusNode = scopeFocusAlgorithm.getNextFocusNode;
WeakPtr<FocusHub> weakNextFocusNode;
getNextFocusNode(step, currentFocusNode, weakNextFocusNode);
RefPtr<FocusHub> nextFocusNode = weakNextFocusNode.Upgrade();
if (expectNextNode == nullptr && nextFocusNode != nullptr) {
return AssertionFailure() << "Next focusNode is not null";
}

View File

@ -126,6 +126,7 @@ TabContentModelNG TabsTestNg::CreateTabContent()
RefPtr<PaintWrapper> TabsTestNg::CreateTabsDone(TabsModelNG model)
{
model.Pop();
frameNode_->ProcessOffscreenTask();
return CreateDone();
}
@ -133,7 +134,7 @@ void TabsTestNg::CreateTabContents(int32_t itemNumber)
{
for (int32_t index = 0; index < itemNumber; index++) {
TabContentModelNG tabContentModel = CreateTabContent();
tabContentModel.Pop();
ViewStackProcessor::GetInstance()->Pop();
ViewStackProcessor::GetInstance()->StopGetAccessRecording();
}
}
@ -144,7 +145,7 @@ void TabsTestNg::CreateTabContentsWithBuilder(int32_t itemNumber)
TabContentModelNG tabContentModel = CreateTabContent();
auto tabBarItemFunc = TabBarItemBuilder();
tabContentModel.SetTabBar("", "", std::nullopt, std::move(tabBarItemFunc), true);
tabContentModel.Pop();
ViewStackProcessor::GetInstance()->Pop();
ViewStackProcessor::GetInstance()->StopGetAccessRecording();
}
}
@ -154,8 +155,8 @@ TabBarBuilderFunc TabsTestNg::TabBarItemBuilder()
return []() {
ColumnModelNG colModel;
colModel.Create(Dimension(0), nullptr, "");
ViewAbstract::SetWidth(CalcLength(10.f));
ViewAbstract::SetHeight(CalcLength(10.f));
ViewAbstract::SetWidth(CalcLength(BARITEM_SIZE));
ViewAbstract::SetHeight(CalcLength(BARITEM_SIZE));
};
}
@ -163,7 +164,8 @@ void TabsTestNg::CreateTabContentTabBarStyle(TabBarStyle tabBarStyle)
{
TabContentModelNG tabContentModel = CreateTabContent();
tabContentModel.SetTabBarStyle(tabBarStyle);
tabContentModel.Pop();
tabContentModel.SetTabBar("text", "icon", std::nullopt, nullptr, true);
ViewStackProcessor::GetInstance()->Pop();
ViewStackProcessor::GetInstance()->StopGetAccessRecording();
}
@ -173,7 +175,7 @@ void TabsTestNg::CreateTabContentTabBarStyleWithBuilder(TabBarStyle tabBarStyle)
tabContentModel.SetTabBarStyle(tabBarStyle);
auto tabBarItemFunc = TabBarItemBuilder();
tabContentModel.SetTabBar("", "", std::nullopt, std::move(tabBarItemFunc), true);
tabContentModel.Pop();
ViewStackProcessor::GetInstance()->Pop();
ViewStackProcessor::GetInstance()->StopGetAccessRecording();
}
@ -274,57 +276,21 @@ HWTEST_F(TabsTestNg, TabsPatternGetScopeFocusAlgorithm001, TestSize.Level1)
}
/**
* @tc.name: TabContentNodelConvertFlexAlignToString001
* @tc.desc: Test the ConvertFlexAlignToString function in the TabContentNodel class.
* @tc.type: FUNC
*/
HWTEST_F(TabsTestNg, TabContentNodelConvertFlexAlignToString001, TestSize.Level1)
{
TabsModelNG model = CreateTabs();
CreateTabContents(1);
CreateTabsDone(model);
auto tabContentFrameNode = AceType::DynamicCast<TabContentNode>(GetChildFrameNode(swiperNode_, 0));
auto tabContentPattern = tabContentFrameNode->GetPattern<TabContentPattern>();
FlexAlign verticalAlign = FlexAlign::FLEX_START;
tabContentFrameNode->ConvertFlexAlignToString(verticalAlign);
verticalAlign = FlexAlign::FLEX_END;
tabContentFrameNode->ConvertFlexAlignToString(verticalAlign);
/**
* @tc.steps: steps2. ConvertFlexAlignToString.
* @tc.expected: steps2. Check the result of ConvertFlexAlignToString.
*/
EXPECT_EQ(tabContentFrameNode->ConvertFlexAlignToString(verticalAlign), "VerticalAlign.Bottom");
}
/**
* @tc.name: TabContentNodelConvertLayoutModeToString001
* @tc.name: ConvertToString001
* @tc.desc: Test the ConvertLayoutModeToString function in the TabContentNodel class.
* @tc.type: FUNC
*/
HWTEST_F(TabsTestNg, TabContentNodelConvertLayoutModeToString001, TestSize.Level1)
HWTEST_F(TabsTestNg, ConvertToString001, TestSize.Level1)
{
TabsModelNG model = CreateTabs();
CreateTabContents(1);
CreateTabsDone(model);
auto tabContentFrameNode = AceType::DynamicCast<TabContentNode>(GetChildFrameNode(swiperNode_, 0));
auto tabContentPattern = tabContentFrameNode->GetPattern<TabContentPattern>();
/**
* @tc.steps: steps2. Set different values for layoutMode to enter different branches.
*/
LayoutMode layoutMode = LayoutMode::VERTICAL;
tabContentFrameNode->ConvertLayoutModeToString(layoutMode);
layoutMode = LayoutMode::HORIZONTAL;
tabContentFrameNode->ConvertLayoutModeToString(layoutMode);
layoutMode = LayoutMode::AUTO;
tabContentFrameNode->ConvertLayoutModeToString(layoutMode);
/**
* @tc.steps: steps3. ConvertLayoutModeToString.
* @tc.expected: steps3. Check the result of ConvertLayoutModeToString.
*/
EXPECT_EQ(tabContentFrameNode->ConvertLayoutModeToString(layoutMode), "LayoutMode.AUTO");
EXPECT_EQ(tabContentFrameNode->ConvertFlexAlignToString(FlexAlign::FLEX_START), "VerticalAlign.Top");
EXPECT_EQ(tabContentFrameNode->ConvertFlexAlignToString(FlexAlign::FLEX_END), "VerticalAlign.Bottom");
EXPECT_EQ(tabContentFrameNode->ConvertLayoutModeToString(LayoutMode::VERTICAL), "LayoutMode.VERTICAL");
EXPECT_EQ(tabContentFrameNode->ConvertLayoutModeToString(LayoutMode::HORIZONTAL), "LayoutMode.HORIZONTAL");
EXPECT_EQ(tabContentFrameNode->ConvertLayoutModeToString(LayoutMode::AUTO), "LayoutMode.AUTO");
}
/**
@ -335,16 +301,14 @@ HWTEST_F(TabsTestNg, TabContentNodelConvertLayoutModeToString001, TestSize.Level
HWTEST_F(TabsTestNg, TabsNodeToJsonValue001, TestSize.Level2)
{
TabsModelNG model = CreateTabs();
CreateTabContents(TABCONTENT_NUMBER);
model.SetTabBarMode(TabBarMode::SCROLLABLE);
CreateTabContents(1);
CreateTabsDone(model);
std::unique_ptr<JsonValue> json = std::make_unique<JsonValue>();
tabBarPattern_->tabBarStyle_ = TabBarStyle::BOTTOMTABBATSTYLE;
tabBarLayoutProperty_->UpdateTabBarMode(TabBarMode::SCROLLABLE);
frameNode_->tabBarId_ = frameNode_->GetTabBarId();
/**
* @tc.steps: steps2. Create ScrollableBarModeOptions and assign them different values to enter different branches.
*/
std::unique_ptr<JsonValue> json = std::make_unique<JsonValue>();
ScrollableBarModeOptions options;
options.margin = 0.0_vp;
options.nonScrollableLayoutStyle = LayoutStyle::ALWAYS_AVERAGE_SPLIT;
@ -461,7 +425,7 @@ HWTEST_F(TabsTestNg, AddChildToGroup001, TestSize.Level1)
TabContentModelNG tabContentModel = CreateTabContent();
LabelStyle labelStyle;
tabContentModel.SetLabelStyle(labelStyle);
tabContentModel.Pop();
ViewStackProcessor::GetInstance()->Pop();
CreateTabsDone(model);
auto tabContentFrameNode = AceType::DynamicCast<TabContentNode>(GetChildFrameNode(swiperNode_, 0));
frameNode_->AddChildToGroup(tabContentFrameNode, 1);
@ -488,7 +452,7 @@ HWTEST_F(TabsTestNg, OnDetachFromMainTree001, TestSize.Level1)
TabContentModelNG tabContentModel = CreateTabContent();
LabelStyle labelStyle;
tabContentModel.SetLabelStyle(labelStyle);
tabContentModel.Pop();
ViewStackProcessor::GetInstance()->Pop();
CreateTabsDone(model);
auto tabContentFrameNode = AceType::DynamicCast<TabContentNode>(GetChildFrameNode(swiperNode_, 0));
auto tabBarNodeswiper =
@ -624,34 +588,20 @@ HWTEST_F(TabsTestNg, DumpAdvanceInfo005, TestSize.Level1)
TabsModelNG model = CreateTabs();
CreateTabContents(TABCONTENT_NUMBER);
CreateTabsDone(model);
/**
* @tc.steps: steps1. Set axis_ Axis: HORIZONTAL
* @tc.expected: Calling DumpAdvanceInfo() expects HORIZONTAL
*/
tabBarPattern_->DumpAdvanceInfo();
ASSERT_EQ(tabBarPattern_->axis_, Axis::HORIZONTAL);
/**
* @tc.steps: steps1. Set axis_ Axis: VERTICAL
* @tc.expected: Calling DumpAdvanceInfo() expects VERTICAL
*/
EXPECT_EQ(DumpLog::GetInstance().description_[14], "Axis:HORIZONTAL\n");
DumpLog::GetInstance().description_.clear();
tabBarPattern_->axis_ = Axis::VERTICAL;
tabBarPattern_->DumpAdvanceInfo();
ASSERT_EQ(tabBarPattern_->axis_, Axis::VERTICAL);
/**
* @tc.steps: steps1. Set axis_ Axis: FREE
* @tc.expected: Calling DumpAdvanceInfo() expects FREE
*/
EXPECT_EQ(DumpLog::GetInstance().description_[14], "Axis:VERTICAL\n");
DumpLog::GetInstance().description_.clear();
tabBarPattern_->axis_ = Axis::FREE;
tabBarPattern_->DumpAdvanceInfo();
ASSERT_EQ(tabBarPattern_->axis_, Axis::FREE);
/**
* @tc.steps: steps1. Set axis_ Axis: NONE
* @tc.expected: Calling DumpAdvanceInfo() expects NONE
*/
EXPECT_EQ(DumpLog::GetInstance().description_[14], "Axis:FREE\n");
DumpLog::GetInstance().description_.clear();
tabBarPattern_->axis_ = Axis::NONE;
tabBarPattern_->DumpAdvanceInfo();
ASSERT_EQ(tabBarPattern_->axis_, Axis::NONE);
EXPECT_EQ(DumpLog::GetInstance().description_[14], "Axis:NONE\n");
}
/**
@ -663,15 +613,10 @@ HWTEST_F(TabsTestNg, ProvideRestoreInfo001, TestSize.Level1)
{
TabsModelNG model = CreateTabs();
CreateTabContents(TABCONTENT_NUMBER);
TabsItemDivider divider;
model.SetDivider(divider);
CreateTabsDone(model);
/**
* @tc.steps: step1. Calling the ProvideRestoreInfo interface.
* @tc.expected: TestTrovoid is not equal to nullpyt.
*/
string testTrovid = tabBarPattern_->ProvideRestoreInfo();
ASSERT_TRUE(!testTrovid.empty());
EXPECT_EQ(tabBarPattern_->ProvideRestoreInfo(), "{\"Index\":0}");
SwipeToWithoutAnimation(1);
EXPECT_EQ(tabBarPattern_->ProvideRestoreInfo(), "{\"Index\":1}");
}
/**
@ -844,7 +789,6 @@ HWTEST_F(TabsTestNg, CustomAnimationTest001, TestSize.Level1)
});
CreateTabContentsWithBuilder(TABCONTENT_NUMBER);
CreateTabsDone(model);
const std::string text_test = "text_test";
tabBarLayoutProperty_->UpdateAxis(Axis::VERTICAL);
EXPECT_EQ(tabBarLayoutProperty_->GetAxisValue(), Axis::VERTICAL);
@ -875,11 +819,7 @@ HWTEST_F(TabsTestNg, CustomAnimationTest002, TestSize.Level1)
{
TabsModelNG model = CreateTabs();
model.SetIsCustomAnimation(false);
for (int32_t index = 0; index < 3; index++) {
TabContentModelNG tabContentModel;
tabContentModel.Create();
ViewStackProcessor::GetInstance()->Pop();
}
CreateTabContents(TABCONTENT_NUMBER);
CreateTabsDone(model);
EXPECT_FALSE(swiperPattern_->IsDisableSwipe());
}

View File

@ -110,6 +110,10 @@ constexpr int32_t TABBAR_DEFAULT_WIDTH = 56.f;
constexpr int32_t TABBAR_DEFAULT_HEIGHT = 56.f;
constexpr Dimension BAR_SATURATE = 1.3_vp;
const InspectorFilter filter;
constexpr float BARITEM_SIZE = 10.f;
constexpr float BIG_FONT_SIZE_SCALE = 1.75f;
constexpr float LARGE_FONT_SIZE_SCALE = 2.0f;
constexpr float MAX_FONT_SIZE_SCALE = 3.2f;
class TabsTestNg : public TestNG {
public: