18bf80f4bSopenharmony_ci/* 28bf80f4bSopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd. 38bf80f4bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 48bf80f4bSopenharmony_ci * you may not use this file except in compliance with the License. 58bf80f4bSopenharmony_ci * You may obtain a copy of the License at 68bf80f4bSopenharmony_ci * 78bf80f4bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 88bf80f4bSopenharmony_ci * 98bf80f4bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 108bf80f4bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 118bf80f4bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 128bf80f4bSopenharmony_ci * See the License for the specific language governing permissions and 138bf80f4bSopenharmony_ci * limitations under the License. 148bf80f4bSopenharmony_ci */ 158bf80f4bSopenharmony_ci 168bf80f4bSopenharmony_ci#include <gmock/gmock.h> 178bf80f4bSopenharmony_ci#include <gtest/gtest.h> 188bf80f4bSopenharmony_ci 198bf80f4bSopenharmony_ci#include <meta/api/iteration.h> 208bf80f4bSopenharmony_ci#include <meta/api/make_callback.h> 218bf80f4bSopenharmony_ci#include <meta/base/ref_uri.h> 228bf80f4bSopenharmony_ci#include <meta/interface/intf_attachment.h> 238bf80f4bSopenharmony_ci#include <meta/interface/intf_metadata.h> 248bf80f4bSopenharmony_ci#include <meta/interface/intf_object_flags.h> 258bf80f4bSopenharmony_ci#include <meta/interface/intf_required_interfaces.h> 268bf80f4bSopenharmony_ci 278bf80f4bSopenharmony_ci#include "src/test_utils.h" 288bf80f4bSopenharmony_ci#include "src/testing_objects.h" 298bf80f4bSopenharmony_ci#include "src/util.h" 308bf80f4bSopenharmony_ci#include "src/test_runner.h" 318bf80f4bSopenharmony_ci 328bf80f4bSopenharmony_ciusing namespace testing; 338bf80f4bSopenharmony_ciusing namespace testing::ext; 348bf80f4bSopenharmony_ci 358bf80f4bSopenharmony_ciMETA_BEGIN_NAMESPACE() 368bf80f4bSopenharmony_ci 378bf80f4bSopenharmony_cibool operator==(const ChildChangedInfo& lhs, const ChildChangedInfo& rhs) 388bf80f4bSopenharmony_ci{ 398bf80f4bSopenharmony_ci return lhs.object == rhs.object && lhs.index == rhs.index && lhs.parent.lock() == rhs.parent.lock(); 408bf80f4bSopenharmony_ci} 418bf80f4bSopenharmony_ci 428bf80f4bSopenharmony_cibool operator==(const ChildMovedInfo& lhs, const ChildMovedInfo& rhs) 438bf80f4bSopenharmony_ci{ 448bf80f4bSopenharmony_ci return lhs.object == rhs.object && lhs.from == rhs.from && lhs.to == rhs.to && 458bf80f4bSopenharmony_ci lhs.parent.lock() == rhs.parent.lock(); 468bf80f4bSopenharmony_ci} 478bf80f4bSopenharmony_ci 488bf80f4bSopenharmony_ciclass ContainerTestBase : public testing::Test { 498bf80f4bSopenharmony_cipublic: 508bf80f4bSopenharmony_ci virtual IContainer::Ptr CreateContainer(BASE_NS::string name) = 0; 518bf80f4bSopenharmony_ci 528bf80f4bSopenharmony_ci void SetUp() override 538bf80f4bSopenharmony_ci { 548bf80f4bSopenharmony_ci container_ = CreateContainer("Base"); 558bf80f4bSopenharmony_ci ASSERT_NE(container_, nullptr); 568bf80f4bSopenharmony_ci container_->Add(CreateTestType<IObject>("Object1_1")); 578bf80f4bSopenharmony_ci container_->Add(CreateTestType<IObject>("SameNameDifferentUid")); 588bf80f4bSopenharmony_ci container_->Add(CreateTestType<IObject>("ObjectDupe")); 598bf80f4bSopenharmony_ci container1_1_ = CreateContainer("Container1_1"); 608bf80f4bSopenharmony_ci container_->Add(interface_pointer_cast<IObject>(container1_1_)); 618bf80f4bSopenharmony_ci container1_1_->Add(CreateTestType<IObject>("Object2_1")); 628bf80f4bSopenharmony_ci container1_1_->Add(CreateTestType<IObject>("ObjectDupe")); 638bf80f4bSopenharmony_ci container1_1_->Add(CreateTestType<IObject>("SameNameDifferentUid")); 648bf80f4bSopenharmony_ci container_->Add(CreateTestType<IObject>("Object1_3")); 658bf80f4bSopenharmony_ci container2_1_ = CreateContainer("SameNameDifferentUid"); 668bf80f4bSopenharmony_ci container1_1_->Add(interface_pointer_cast<IObject>(container2_1_)); 678bf80f4bSopenharmony_ci 688bf80f4bSopenharmony_ci ASSERT_EQ(container_->GetSize(), NumDirectChildren); 698bf80f4bSopenharmony_ci 708bf80f4bSopenharmony_ci container_->OnAdded()->AddHandler(MakeCallback<IOnChildChanged>(this, &ContainerTestBase::OnAdded)); 718bf80f4bSopenharmony_ci container_->OnRemoved()->AddHandler(MakeCallback<IOnChildChanged>(this, &ContainerTestBase::OnRemoved)); 728bf80f4bSopenharmony_ci container_->OnMoved()->AddHandler(MakeCallback<IOnChildMoved>(this, &ContainerTestBase::OnMoved)); 738bf80f4bSopenharmony_ci } 748bf80f4bSopenharmony_ci void TearDown() override 758bf80f4bSopenharmony_ci { 768bf80f4bSopenharmony_ci container_.reset(); 778bf80f4bSopenharmony_ci } 788bf80f4bSopenharmony_ci 798bf80f4bSopenharmony_ci static void SetUpTestSuite() 808bf80f4bSopenharmony_ci { 818bf80f4bSopenharmony_ci SetTest(); 828bf80f4bSopenharmony_ci } 838bf80f4bSopenharmony_ci static void TearDownTestSuite() 848bf80f4bSopenharmony_ci { 858bf80f4bSopenharmony_ci ResetTest(); 868bf80f4bSopenharmony_ci } 878bf80f4bSopenharmony_ci 888bf80f4bSopenharmony_ciprotected: 898bf80f4bSopenharmony_ci void OnAdded(const ChildChangedInfo& info) 908bf80f4bSopenharmony_ci { 918bf80f4bSopenharmony_ci addedCalls_.push_back(info); 928bf80f4bSopenharmony_ci } 938bf80f4bSopenharmony_ci void OnRemoved(const ChildChangedInfo& info) 948bf80f4bSopenharmony_ci { 958bf80f4bSopenharmony_ci removedCalls_.push_back(info); 968bf80f4bSopenharmony_ci } 978bf80f4bSopenharmony_ci void OnMoved(const ChildMovedInfo& info) 988bf80f4bSopenharmony_ci { 998bf80f4bSopenharmony_ci movedCalls_.push_back(info); 1008bf80f4bSopenharmony_ci } 1018bf80f4bSopenharmony_ci 1028bf80f4bSopenharmony_ci BASE_NS::vector<ChildChangedInfo> addedCalls_; 1038bf80f4bSopenharmony_ci BASE_NS::vector<ChildChangedInfo> removedCalls_; 1048bf80f4bSopenharmony_ci BASE_NS::vector<ChildMovedInfo> movedCalls_; 1058bf80f4bSopenharmony_ci 1068bf80f4bSopenharmony_ci static constexpr size_t NumDirectChildContainers = 1; 1078bf80f4bSopenharmony_ci static constexpr size_t NumDirectChildTestTypes = 4; 1088bf80f4bSopenharmony_ci static constexpr size_t NumDirectChildren = NumDirectChildContainers + NumDirectChildTestTypes; 1098bf80f4bSopenharmony_ci static constexpr size_t NumChildContainers = 2; 1108bf80f4bSopenharmony_ci static constexpr size_t NumChildTestTypes = 7; 1118bf80f4bSopenharmony_ci IContainer::Ptr container_; 1128bf80f4bSopenharmony_ci IContainer::Ptr container1_1_; 1138bf80f4bSopenharmony_ci IContainer::Ptr container2_1_; 1148bf80f4bSopenharmony_ci}; 1158bf80f4bSopenharmony_ci 1168bf80f4bSopenharmony_ciclass ContainerCommonTest : public ContainerTestBase, public ::testing::WithParamInterface<ClassInfo> { 1178bf80f4bSopenharmony_cipublic: 1188bf80f4bSopenharmony_ci IContainer::Ptr CreateContainer(BASE_NS::string name) override 1198bf80f4bSopenharmony_ci { 1208bf80f4bSopenharmony_ci return CreateTestContainer<IContainer>(name, GetParam()); 1218bf80f4bSopenharmony_ci } 1228bf80f4bSopenharmony_ci}; 1238bf80f4bSopenharmony_ci 1248bf80f4bSopenharmony_ciclass ContainerTest : public ContainerTestBase { 1258bf80f4bSopenharmony_cipublic: 1268bf80f4bSopenharmony_ci IContainer::Ptr CreateContainer(BASE_NS::string name) override 1278bf80f4bSopenharmony_ci { 1288bf80f4bSopenharmony_ci return CreateTestContainer<IContainer>(name, META_NS::ClassId::TestContainer); 1298bf80f4bSopenharmony_ci } 1308bf80f4bSopenharmony_ci}; 1318bf80f4bSopenharmony_ci 1328bf80f4bSopenharmony_ciclass FlatContainerTest : public ContainerTestBase { 1338bf80f4bSopenharmony_cipublic: 1348bf80f4bSopenharmony_ci IContainer::Ptr CreateContainer(BASE_NS::string name) override 1358bf80f4bSopenharmony_ci { 1368bf80f4bSopenharmony_ci return CreateTestContainer<IContainer>(name, META_NS::ClassId::TestFlatContainer); 1378bf80f4bSopenharmony_ci } 1388bf80f4bSopenharmony_ci}; 1398bf80f4bSopenharmony_ci 1408bf80f4bSopenharmony_ci/** 1418bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 1428bf80f4bSopenharmony_ci * @tc.desc: test IsAncestorOf function 1438bf80f4bSopenharmony_ci * @tc.type: FUNC 1448bf80f4bSopenharmony_ci * @tc.require: I7DMS1 1458bf80f4bSopenharmony_ci */ 1468bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, IsAncestorOf, TestSize.Level1) 1478bf80f4bSopenharmony_ci{ 1488bf80f4bSopenharmony_ci auto object = container1_1_->FindAnyFromHierarchy<IObject>("Object2_1"); 1498bf80f4bSopenharmony_ci ASSERT_NE(object, nullptr); 1508bf80f4bSopenharmony_ci EXPECT_TRUE(container_->IsAncestorOf(object)); 1518bf80f4bSopenharmony_ci EXPECT_FALSE(container_->IsAncestorOf(nullptr)); 1528bf80f4bSopenharmony_ci 1538bf80f4bSopenharmony_ci auto object2 = CreateTestType<IObject>("NotThere"); 1548bf80f4bSopenharmony_ci ASSERT_NE(object2, nullptr); 1558bf80f4bSopenharmony_ci EXPECT_FALSE(container_->IsAncestorOf(object2)); 1568bf80f4bSopenharmony_ci 1578bf80f4bSopenharmony_ci auto container2 = CreateTestContainer<IContainer>("Container2"); 1588bf80f4bSopenharmony_ci ASSERT_NE(container2, nullptr); 1598bf80f4bSopenharmony_ci EXPECT_FALSE(container2->IsAncestorOf(object2)); 1608bf80f4bSopenharmony_ci EXPECT_TRUE(container2->Add(object2)); 1618bf80f4bSopenharmony_ci EXPECT_TRUE(container2->IsAncestorOf(object2)); 1628bf80f4bSopenharmony_ci} 1638bf80f4bSopenharmony_ci 1648bf80f4bSopenharmony_ci/** 1658bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 1668bf80f4bSopenharmony_ci * @tc.desc: test AddChild function 1678bf80f4bSopenharmony_ci * @tc.type: FUNC 1688bf80f4bSopenharmony_ci * @tc.require: I7DMS1 1698bf80f4bSopenharmony_ci */ 1708bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, AddChild, TestSize.Level1) 1718bf80f4bSopenharmony_ci{ 1728bf80f4bSopenharmony_ci const auto object = interface_pointer_cast<IObject>(CreateTestType()); 1738bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Add(object)); 1748bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren + 1); 1758bf80f4bSopenharmony_ci 1768bf80f4bSopenharmony_ci ASSERT_THAT(addedCalls_, SizeIs(1)); 1778bf80f4bSopenharmony_ci ASSERT_THAT(removedCalls_, SizeIs(0)); 1788bf80f4bSopenharmony_ci ASSERT_THAT(movedCalls_, SizeIs(0)); 1798bf80f4bSopenharmony_ci auto expected = ChildChangedInfo { object, NumDirectChildren, container_ }; 1808bf80f4bSopenharmony_ci EXPECT_EQ(addedCalls_[0], expected); 1818bf80f4bSopenharmony_ci} 1828bf80f4bSopenharmony_ci 1838bf80f4bSopenharmony_ci/** 1848bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 1858bf80f4bSopenharmony_ci * @tc.desc: test Insert function 1868bf80f4bSopenharmony_ci * @tc.type: FUNC 1878bf80f4bSopenharmony_ci * @tc.require: I7DMS1 1888bf80f4bSopenharmony_ci */ 1898bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, Insert, TestSize.Level1) 1908bf80f4bSopenharmony_ci{ 1918bf80f4bSopenharmony_ci auto all = container_->GetAll(); 1928bf80f4bSopenharmony_ci auto expectedSize = NumDirectChildren; 1938bf80f4bSopenharmony_ci const auto item1 = interface_pointer_cast<IObject>(CreateTestType()); 1948bf80f4bSopenharmony_ci const auto item2 = interface_pointer_cast<IObject>(CreateTestType()); 1958bf80f4bSopenharmony_ci const auto item3 = interface_pointer_cast<IObject>(CreateTestType()); 1968bf80f4bSopenharmony_ci 1978bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Insert(all.size(), item1)); 1988bf80f4bSopenharmony_ci all = container_->GetAll(); 1998bf80f4bSopenharmony_ci EXPECT_EQ(all.size(), ++expectedSize); 2008bf80f4bSopenharmony_ci EXPECT_EQ(all.back(), item1); 2018bf80f4bSopenharmony_ci 2028bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Insert(0, item2)); 2038bf80f4bSopenharmony_ci all = container_->GetAll(); 2048bf80f4bSopenharmony_ci EXPECT_EQ(all.size(), ++expectedSize); 2058bf80f4bSopenharmony_ci EXPECT_EQ(all.front(), item2); 2068bf80f4bSopenharmony_ci 2078bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Insert(all.size() + 10, item3)); 2088bf80f4bSopenharmony_ci all = container_->GetAll(); 2098bf80f4bSopenharmony_ci EXPECT_EQ(all.size(), ++expectedSize); 2108bf80f4bSopenharmony_ci EXPECT_EQ(all.back(), item3); 2118bf80f4bSopenharmony_ci 2128bf80f4bSopenharmony_ci ASSERT_THAT(addedCalls_, SizeIs(3)); 2138bf80f4bSopenharmony_ci ASSERT_THAT(removedCalls_, SizeIs(0)); 2148bf80f4bSopenharmony_ci ASSERT_THAT(movedCalls_, SizeIs(0)); 2158bf80f4bSopenharmony_ci auto expected1 = ChildChangedInfo { item1, NumDirectChildren, container_ }; 2168bf80f4bSopenharmony_ci auto expected2 = ChildChangedInfo { item2, 0, container_ }; 2178bf80f4bSopenharmony_ci auto expected3 = ChildChangedInfo { item3, expectedSize - 1, container_ }; 2188bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, ElementsAre(expected1, expected2, expected3)); 2198bf80f4bSopenharmony_ci} 2208bf80f4bSopenharmony_ci 2218bf80f4bSopenharmony_ci/** 2228bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 2238bf80f4bSopenharmony_ci * @tc.desc: test GetAt function 2248bf80f4bSopenharmony_ci * @tc.type: FUNC 2258bf80f4bSopenharmony_ci * @tc.require: I7DMS1 2268bf80f4bSopenharmony_ci */ 2278bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, GetAt, TestSize.Level1) 2288bf80f4bSopenharmony_ci{ 2298bf80f4bSopenharmony_ci const auto all = container_->GetAll(); 2308bf80f4bSopenharmony_ci ASSERT_EQ(all.size(), NumDirectChildren); 2318bf80f4bSopenharmony_ci 2328bf80f4bSopenharmony_ci EXPECT_EQ(all.front(), container_->GetAt(0)); 2338bf80f4bSopenharmony_ci EXPECT_EQ(all.back(), container_->GetAt(NumDirectChildren - 1)); 2348bf80f4bSopenharmony_ci EXPECT_EQ(all[NumDirectChildren / 2], container_->GetAt(NumDirectChildren / 2)); 2358bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetAt(NumDirectChildren + 10), nullptr); 2368bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 2378bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 2388bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 2398bf80f4bSopenharmony_ci} 2408bf80f4bSopenharmony_ci 2418bf80f4bSopenharmony_ci/** 2428bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 2438bf80f4bSopenharmony_ci * @tc.desc: test RemoveChild function 2448bf80f4bSopenharmony_ci * @tc.type: FUNC 2458bf80f4bSopenharmony_ci * @tc.require: I7DMS1 2468bf80f4bSopenharmony_ci */ 2478bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, RemoveChild, TestSize.Level1) 2488bf80f4bSopenharmony_ci{ 2498bf80f4bSopenharmony_ci auto children = container_->GetAll(); 2508bf80f4bSopenharmony_ci auto expectedCount = NumDirectChildren; 2518bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 2528bf80f4bSopenharmony_ci 2538bf80f4bSopenharmony_ci BASE_NS::vector<ChildChangedInfo> removed; 2548bf80f4bSopenharmony_ci 2558bf80f4bSopenharmony_ci auto baseIndex = expectedCount / 3; 2568bf80f4bSopenharmony_ci 2578bf80f4bSopenharmony_ci while (!children.empty()) { 2588bf80f4bSopenharmony_ci auto index = ++baseIndex % expectedCount; 2598bf80f4bSopenharmony_ci const auto child = children[index]; 2608bf80f4bSopenharmony_ci removed.push_back({ child, index, container_ }); 2618bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Remove(child)); 2628bf80f4bSopenharmony_ci 2638bf80f4bSopenharmony_ci expectedCount--; 2648bf80f4bSopenharmony_ci children = container_->GetAll(); 2658bf80f4bSopenharmony_ci 2668bf80f4bSopenharmony_ci EXPECT_THAT(children, Not(Contains(child))); 2678bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 2688bf80f4bSopenharmony_ci } 2698bf80f4bSopenharmony_ci 2708bf80f4bSopenharmony_ci ASSERT_THAT(addedCalls_, SizeIs(0)); 2718bf80f4bSopenharmony_ci ASSERT_THAT(removedCalls_, SizeIs(NumDirectChildren)); 2728bf80f4bSopenharmony_ci ASSERT_THAT(movedCalls_, SizeIs(0)); 2738bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, ElementsAreArray(removed)); 2748bf80f4bSopenharmony_ci} 2758bf80f4bSopenharmony_ci 2768bf80f4bSopenharmony_ci/** 2778bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 2788bf80f4bSopenharmony_ci * @tc.desc: test RemoveIndex function 2798bf80f4bSopenharmony_ci * @tc.type: FUNC 2808bf80f4bSopenharmony_ci * @tc.require: I7DMS1 2818bf80f4bSopenharmony_ci */ 2828bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, RemoveIndex, TestSize.Level1) 2838bf80f4bSopenharmony_ci{ 2848bf80f4bSopenharmony_ci auto children = container_->GetAll(); 2858bf80f4bSopenharmony_ci auto expectedCount = NumDirectChildren; 2868bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 2878bf80f4bSopenharmony_ci 2888bf80f4bSopenharmony_ci BASE_NS::vector<ChildChangedInfo> removed; 2898bf80f4bSopenharmony_ci 2908bf80f4bSopenharmony_ci auto baseIndex = expectedCount / 3; 2918bf80f4bSopenharmony_ci 2928bf80f4bSopenharmony_ci while (!children.empty()) { 2938bf80f4bSopenharmony_ci auto index = ++baseIndex % expectedCount; 2948bf80f4bSopenharmony_ci const auto child = children[index]; 2958bf80f4bSopenharmony_ci removed.push_back({ child, index, container_ }); 2968bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Remove(index)); 2978bf80f4bSopenharmony_ci 2988bf80f4bSopenharmony_ci expectedCount--; 2998bf80f4bSopenharmony_ci children = container_->GetAll(); 3008bf80f4bSopenharmony_ci 3018bf80f4bSopenharmony_ci EXPECT_THAT(children, Not(Contains(child))); 3028bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 3038bf80f4bSopenharmony_ci } 3048bf80f4bSopenharmony_ci 3058bf80f4bSopenharmony_ci ASSERT_THAT(addedCalls_, SizeIs(0)); 3068bf80f4bSopenharmony_ci ASSERT_THAT(removedCalls_, SizeIs(NumDirectChildren)); 3078bf80f4bSopenharmony_ci ASSERT_THAT(movedCalls_, SizeIs(0)); 3088bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, ElementsAreArray(removed)); 3098bf80f4bSopenharmony_ci} 3108bf80f4bSopenharmony_ci 3118bf80f4bSopenharmony_ci/** 3128bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 3138bf80f4bSopenharmony_ci * @tc.desc: test RemoveChildInvalid function 3148bf80f4bSopenharmony_ci * @tc.type: FUNC 3158bf80f4bSopenharmony_ci * @tc.require: I7DMS1 3168bf80f4bSopenharmony_ci */ 3178bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, RemoveChildInvalid, TestSize.Level1) 3188bf80f4bSopenharmony_ci{ 3198bf80f4bSopenharmony_ci const auto children = container_->GetAll(); 3208bf80f4bSopenharmony_ci const auto expectedCount = NumDirectChildren; 3218bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 3228bf80f4bSopenharmony_ci 3238bf80f4bSopenharmony_ci const auto invalid = interface_pointer_cast<IObject>(CreateTestType()); 3248bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Remove(invalid)); 3258bf80f4bSopenharmony_ci EXPECT_EQ(children.size(), expectedCount); 3268bf80f4bSopenharmony_ci EXPECT_THAT(children, Not(Contains(invalid))); 3278bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Remove(nullptr)); 3288bf80f4bSopenharmony_ci EXPECT_EQ(children.size(), expectedCount); 3298bf80f4bSopenharmony_ci EXPECT_THAT(children, Not(Contains(invalid))); 3308bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 3318bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 3328bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 3338bf80f4bSopenharmony_ci} 3348bf80f4bSopenharmony_ci 3358bf80f4bSopenharmony_ci/** 3368bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 3378bf80f4bSopenharmony_ci * @tc.desc: test RemoveAll function 3388bf80f4bSopenharmony_ci * @tc.type: FUNC 3398bf80f4bSopenharmony_ci * @tc.require: I7DMS1 3408bf80f4bSopenharmony_ci */ 3418bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, RemoveAll, TestSize.Level1) 3428bf80f4bSopenharmony_ci{ 3438bf80f4bSopenharmony_ci container_->RemoveAll(); 3448bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), 0); 3458bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), IsEmpty()); 3468bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 3478bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(NumDirectChildren)); 3488bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 3498bf80f4bSopenharmony_ci} 3508bf80f4bSopenharmony_ci 3518bf80f4bSopenharmony_ci/** 3528bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 3538bf80f4bSopenharmony_ci * @tc.desc: test Replace function 3548bf80f4bSopenharmony_ci * @tc.type: FUNC 3558bf80f4bSopenharmony_ci * @tc.require: I7DMS1 3568bf80f4bSopenharmony_ci */ 3578bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, Replace, TestSize.Level1) 3588bf80f4bSopenharmony_ci{ 3598bf80f4bSopenharmony_ci const auto children = container_->GetAll(); 3608bf80f4bSopenharmony_ci const auto expectedCount = NumDirectChildren; 3618bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 3628bf80f4bSopenharmony_ci 3638bf80f4bSopenharmony_ci auto index = expectedCount / 2; 3648bf80f4bSopenharmony_ci const auto replace = children[index]; 3658bf80f4bSopenharmony_ci const auto replaceWith = interface_pointer_cast<IObject>(CreateTestType("Replaced")); 3668bf80f4bSopenharmony_ci 3678bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace(replace, replaceWith, false)); 3688bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount); 3698bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Contains(replaceWith)); 3708bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Not(Contains(replace))); 3718bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 3728bf80f4bSopenharmony_ci const auto removed = ChildChangedInfo { replace, index, container_ }; 3738bf80f4bSopenharmony_ci const auto added = ChildChangedInfo { replaceWith, index, container_ }; 3748bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, ElementsAre(added)); 3758bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, ElementsAre(removed)); 3768bf80f4bSopenharmony_ci} 3778bf80f4bSopenharmony_ci 3788bf80f4bSopenharmony_ci/** 3798bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 3808bf80f4bSopenharmony_ci * @tc.desc: test ReplaceSame function 3818bf80f4bSopenharmony_ci * @tc.type: FUNC 3828bf80f4bSopenharmony_ci * @tc.require: I7DMS1 3838bf80f4bSopenharmony_ci */ 3848bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, ReplaceSame, TestSize.Level1) 3858bf80f4bSopenharmony_ci{ 3868bf80f4bSopenharmony_ci const auto children = container_->GetAll(); 3878bf80f4bSopenharmony_ci const auto expectedCount = NumDirectChildren; 3888bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 3898bf80f4bSopenharmony_ci 3908bf80f4bSopenharmony_ci const auto notThere = interface_pointer_cast<IObject>(CreateTestType("NotThere")); 3918bf80f4bSopenharmony_ci const auto replace = children[expectedCount / 2]; 3928bf80f4bSopenharmony_ci const auto replaceWith = children[expectedCount / 2]; 3938bf80f4bSopenharmony_ci 3948bf80f4bSopenharmony_ci ASSERT_EQ(replace, replaceWith); 3958bf80f4bSopenharmony_ci 3968bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace(replace, replaceWith)); 3978bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount); 3988bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Contains(replaceWith)); 3998bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Contains(replace)); 4008bf80f4bSopenharmony_ci 4018bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Replace(notThere, notThere)); 4028bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount); 4038bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Not(Contains(notThere))); 4048bf80f4bSopenharmony_ci 4058bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 4068bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 4078bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 4088bf80f4bSopenharmony_ci 4098bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace(notThere, notThere, true)); 4108bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount + 1); 4118bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Contains(notThere)); 4128bf80f4bSopenharmony_ci 4138bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 4148bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 4158bf80f4bSopenharmony_ci const auto added = ChildChangedInfo { notThere, expectedCount, container_ }; 4168bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, ElementsAre(added)); 4178bf80f4bSopenharmony_ci} 4188bf80f4bSopenharmony_ci 4198bf80f4bSopenharmony_ci/** 4208bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 4218bf80f4bSopenharmony_ci * @tc.desc: test ReplaceNull function 4228bf80f4bSopenharmony_ci * @tc.type: FUNC 4238bf80f4bSopenharmony_ci * @tc.require: I7DMS1 4248bf80f4bSopenharmony_ci */ 4258bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, ReplaceNull, TestSize.Level1) 4268bf80f4bSopenharmony_ci{ 4278bf80f4bSopenharmony_ci const auto children = container_->GetAll(); 4288bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), NumDirectChildren); 4298bf80f4bSopenharmony_ci const auto replaceWith = interface_pointer_cast<IObject>(CreateTestType("Replaced")); 4308bf80f4bSopenharmony_ci const auto replaceWith2 = interface_pointer_cast<IObject>(CreateTestType("Replaced2")); 4318bf80f4bSopenharmony_ci 4328bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Replace({}, {}, false)); 4338bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 4348bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Replace({}, {}, true)); 4358bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 4368bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 4378bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 4388bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 4398bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Replace({}, replaceWith, false)); 4408bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 4418bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 4428bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 4438bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 4448bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace({}, replaceWith, true)); 4458bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren + 1); 4468bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Replace({}, replaceWith2, false)); 4478bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren + 1); 4488bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 4498bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 4508bf80f4bSopenharmony_ci const auto added = ChildChangedInfo { replaceWith, NumDirectChildren, container_ }; 4518bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, ElementsAre(added)); 4528bf80f4bSopenharmony_ci addedCalls_.clear(); 4538bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace(replaceWith, {}, false)); 4548bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 4558bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace({}, replaceWith2, true)); 4568bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren + 1); 4578bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace(replaceWith2, {}, true)); 4588bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 4598bf80f4bSopenharmony_ci const auto removed1 = ChildChangedInfo { replaceWith, NumDirectChildren, container_ }; 4608bf80f4bSopenharmony_ci const auto removed2 = ChildChangedInfo { replaceWith2, NumDirectChildren, container_ }; 4618bf80f4bSopenharmony_ci const auto added2 = ChildChangedInfo { replaceWith2, NumDirectChildren, container_ }; 4628bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, ElementsAre(removed1, removed2)); 4638bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 4648bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, ElementsAre(added2)); 4658bf80f4bSopenharmony_ci} 4668bf80f4bSopenharmony_ci 4678bf80f4bSopenharmony_ci/** 4688bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 4698bf80f4bSopenharmony_ci * @tc.desc: test ReplaceAdd function 4708bf80f4bSopenharmony_ci * @tc.type: FUNC 4718bf80f4bSopenharmony_ci * @tc.require: I7DMS1 4728bf80f4bSopenharmony_ci */ 4738bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, ReplaceAdd, TestSize.Level1) 4748bf80f4bSopenharmony_ci{ 4758bf80f4bSopenharmony_ci const auto children = container_->GetAll(); 4768bf80f4bSopenharmony_ci const auto expectedCount = NumDirectChildren; 4778bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 4788bf80f4bSopenharmony_ci 4798bf80f4bSopenharmony_ci const auto replace = interface_pointer_cast<IObject>(CreateTestType("NotThere")); 4808bf80f4bSopenharmony_ci const auto replaceWith = interface_pointer_cast<IObject>(CreateTestType("Replaced")); 4818bf80f4bSopenharmony_ci 4828bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Replace(replace, replaceWith, false)); 4838bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount); 4848bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Not(Contains(replaceWith))); 4858bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Not(Contains(replace))); 4868bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 4878bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 4888bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 4898bf80f4bSopenharmony_ci 4908bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace(replace, replaceWith, true)); 4918bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount + 1); 4928bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Contains(replaceWith)); 4938bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Not(Contains(replace))); 4948bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 4958bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 4968bf80f4bSopenharmony_ci const auto added = ChildChangedInfo { replaceWith, expectedCount, container_ }; 4978bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, ElementsAre(added)); 4988bf80f4bSopenharmony_ci} 4998bf80f4bSopenharmony_ci 5008bf80f4bSopenharmony_ci/** 5018bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 5028bf80f4bSopenharmony_ci * @tc.desc: test MoveEmpty function 5038bf80f4bSopenharmony_ci * @tc.type: FUNC 5048bf80f4bSopenharmony_ci * @tc.require: I7DMS1 5058bf80f4bSopenharmony_ci */ 5068bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, MoveEmpty, TestSize.Level1) 5078bf80f4bSopenharmony_ci{ 5088bf80f4bSopenharmony_ci auto moveItem = container_->GetAt(0); 5098bf80f4bSopenharmony_ci container_->RemoveAll(); 5108bf80f4bSopenharmony_ci removedCalls_.clear(); 5118bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Move(1, 1)); 5128bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Move(0, 0)); 5138bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Move(0, 1)); 5148bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Move(moveItem, 1)); 5158bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Move(moveItem, 0)); 5168bf80f4bSopenharmony_ci 5178bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 5188bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 5198bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 5208bf80f4bSopenharmony_ci} 5218bf80f4bSopenharmony_ci 5228bf80f4bSopenharmony_ci/** 5238bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 5248bf80f4bSopenharmony_ci * @tc.desc: test MoveBack function 5258bf80f4bSopenharmony_ci * @tc.type: FUNC 5268bf80f4bSopenharmony_ci * @tc.require: I7DMS1 5278bf80f4bSopenharmony_ci */ 5288bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, MoveBack, TestSize.Level1) 5298bf80f4bSopenharmony_ci{ 5308bf80f4bSopenharmony_ci size_t from = NumDirectChildren - 1; 5318bf80f4bSopenharmony_ci size_t to = 0; 5328bf80f4bSopenharmony_ci auto moveItem = container_->GetAt(from); 5338bf80f4bSopenharmony_ci auto moved = ChildMovedInfo { moveItem, from, to, container_ }; 5348bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Move(from, to)); 5358bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetAt(to), moveItem); 5368bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 5378bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 5388bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 5398bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, ElementsAre(moved)); 5408bf80f4bSopenharmony_ci} 5418bf80f4bSopenharmony_ci 5428bf80f4bSopenharmony_ci/** 5438bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 5448bf80f4bSopenharmony_ci * @tc.desc: test MoveForward function 5458bf80f4bSopenharmony_ci * @tc.type: FUNC 5468bf80f4bSopenharmony_ci * @tc.require: I7DMS1 5478bf80f4bSopenharmony_ci */ 5488bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, MoveForward, TestSize.Level1) 5498bf80f4bSopenharmony_ci{ 5508bf80f4bSopenharmony_ci size_t from = 0; 5518bf80f4bSopenharmony_ci size_t to = NumDirectChildren - 1; 5528bf80f4bSopenharmony_ci auto moveItem = container_->GetAt(from); 5538bf80f4bSopenharmony_ci auto moved = ChildMovedInfo { moveItem, from, to, container_ }; 5548bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Move(from, to)); 5558bf80f4bSopenharmony_ci 5568bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetAt(to), moveItem); 5578bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 5588bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, ElementsAre(moved)); 5598bf80f4bSopenharmony_ci} 5608bf80f4bSopenharmony_ci 5618bf80f4bSopenharmony_ci/** 5628bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 5638bf80f4bSopenharmony_ci * @tc.desc: test MoveNext function 5648bf80f4bSopenharmony_ci * @tc.type: FUNC 5658bf80f4bSopenharmony_ci * @tc.require: I7DMS1 5668bf80f4bSopenharmony_ci */ 5678bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, MoveNext, TestSize.Level1) 5688bf80f4bSopenharmony_ci{ 5698bf80f4bSopenharmony_ci size_t from = NumDirectChildren / 2; 5708bf80f4bSopenharmony_ci size_t to = from + 1; 5718bf80f4bSopenharmony_ci auto moveItem = container_->GetAt(from); 5728bf80f4bSopenharmony_ci auto moved = ChildMovedInfo { moveItem, from, to, container_ }; 5738bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Move(from, to)); 5748bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetAt(to), moveItem); 5758bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 5768bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, ElementsAre(moved)); 5778bf80f4bSopenharmony_ci} 5788bf80f4bSopenharmony_ci 5798bf80f4bSopenharmony_ci/** 5808bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 5818bf80f4bSopenharmony_ci * @tc.desc: test MoveSame function 5828bf80f4bSopenharmony_ci * @tc.type: FUNC 5838bf80f4bSopenharmony_ci * @tc.require: I7DMS1 5848bf80f4bSopenharmony_ci */ 5858bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, MoveSame, TestSize.Level1) 5868bf80f4bSopenharmony_ci{ 5878bf80f4bSopenharmony_ci size_t from = NumDirectChildren / 2; 5888bf80f4bSopenharmony_ci size_t to = from; 5898bf80f4bSopenharmony_ci auto moveItem = container_->GetAt(from); 5908bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Move(from, to)); 5918bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetAt(to), moveItem); 5928bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 5938bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 5948bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 5958bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 5968bf80f4bSopenharmony_ci} 5978bf80f4bSopenharmony_ci 5988bf80f4bSopenharmony_ci/** 5998bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 6008bf80f4bSopenharmony_ci * @tc.desc: test MoveFromBiggerThanSize function 6018bf80f4bSopenharmony_ci * @tc.type: FUNC 6028bf80f4bSopenharmony_ci * @tc.require: I7DMS1 6038bf80f4bSopenharmony_ci */ 6048bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, MoveFromBiggerThanSize, TestSize.Level1) 6058bf80f4bSopenharmony_ci{ 6068bf80f4bSopenharmony_ci size_t from = NumDirectChildren + 10; 6078bf80f4bSopenharmony_ci size_t to = 0; 6088bf80f4bSopenharmony_ci auto moveItem = container_->GetAt(NumDirectChildren - 1); 6098bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Move(from, to)); 6108bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetAt(to), moveItem); 6118bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 6128bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 6138bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 6148bf80f4bSopenharmony_ci auto moved = ChildMovedInfo { moveItem, NumDirectChildren - 1, to, container_ }; 6158bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, ElementsAre(moved)); 6168bf80f4bSopenharmony_ci} 6178bf80f4bSopenharmony_ci 6188bf80f4bSopenharmony_ci/** 6198bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 6208bf80f4bSopenharmony_ci * @tc.desc: test MoveToBiggerThanSize function 6218bf80f4bSopenharmony_ci * @tc.type: FUNC 6228bf80f4bSopenharmony_ci * @tc.require: I7DMS1 6238bf80f4bSopenharmony_ci */ 6248bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, MoveToBiggerThanSize, TestSize.Level1) 6258bf80f4bSopenharmony_ci{ 6268bf80f4bSopenharmony_ci size_t from = NumDirectChildren / 2; 6278bf80f4bSopenharmony_ci size_t to = NumDirectChildren + 10; 6288bf80f4bSopenharmony_ci auto moveItem = container_->GetAt(from); 6298bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Move(from, to)); 6308bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetAt(NumDirectChildren - 1), moveItem); 6318bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 6328bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 6338bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 6348bf80f4bSopenharmony_ci auto moved = ChildMovedInfo { moveItem, from, NumDirectChildren - 1, container_ }; 6358bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, ElementsAre(moved)); 6368bf80f4bSopenharmony_ci} 6378bf80f4bSopenharmony_ci 6388bf80f4bSopenharmony_ci/** 6398bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 6408bf80f4bSopenharmony_ci * @tc.desc: test MoveFromToBiggerThanSize function 6418bf80f4bSopenharmony_ci * @tc.type: FUNC 6428bf80f4bSopenharmony_ci * @tc.require: I7DMS1 6438bf80f4bSopenharmony_ci */ 6448bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, MoveFromToBiggerThanSize, TestSize.Level1) 6458bf80f4bSopenharmony_ci{ 6468bf80f4bSopenharmony_ci size_t from = NumDirectChildren + 10; 6478bf80f4bSopenharmony_ci size_t to = NumDirectChildren + 4; 6488bf80f4bSopenharmony_ci auto moveItem = container_->GetAt(NumDirectChildren - 1); 6498bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Move(from, to)); 6508bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetAt(NumDirectChildren - 1), moveItem); 6518bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 6528bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 6538bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 6548bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 6558bf80f4bSopenharmony_ci} 6568bf80f4bSopenharmony_ci 6578bf80f4bSopenharmony_ci/** 6588bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 6598bf80f4bSopenharmony_ci * @tc.desc: test MoveObject function 6608bf80f4bSopenharmony_ci * @tc.type: FUNC 6618bf80f4bSopenharmony_ci * @tc.require: I7DMS1 6628bf80f4bSopenharmony_ci */ 6638bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, MoveObject, TestSize.Level1) 6648bf80f4bSopenharmony_ci{ 6658bf80f4bSopenharmony_ci size_t from = NumDirectChildren - 1; 6668bf80f4bSopenharmony_ci size_t to = 0; 6678bf80f4bSopenharmony_ci const auto child = container_->GetAt(from); 6688bf80f4bSopenharmony_ci auto moved = ChildMovedInfo { child, from, to, container_ }; 6698bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Move(child, to)); 6708bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetAt(to), child); 6718bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren); 6728bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 6738bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 6748bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, ElementsAre(moved)); 6758bf80f4bSopenharmony_ci} 6768bf80f4bSopenharmony_ci 6778bf80f4bSopenharmony_ci/** 6788bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 6798bf80f4bSopenharmony_ci * @tc.desc: test FindAllNameDirect function 6808bf80f4bSopenharmony_ci * @tc.type: FUNC 6818bf80f4bSopenharmony_ci * @tc.require: I7DMS1 6828bf80f4bSopenharmony_ci */ 6838bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, FindAllNameDirect, TestSize.Level1) 6848bf80f4bSopenharmony_ci{ 6858bf80f4bSopenharmony_ci auto result1 = container_->FindAll({ "Object1_1", TraversalType::NO_HIERARCHY, {}, false }); 6868bf80f4bSopenharmony_ci auto result2 = container_->FindAll({ "Object2_1", TraversalType::NO_HIERARCHY, {}, false }); 6878bf80f4bSopenharmony_ci 6888bf80f4bSopenharmony_ci EXPECT_THAT(result1, SizeIs(1)); 6898bf80f4bSopenharmony_ci EXPECT_THAT(result2, SizeIs(0)); 6908bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 6918bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 6928bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 6938bf80f4bSopenharmony_ci} 6948bf80f4bSopenharmony_ci 6958bf80f4bSopenharmony_ci/** 6968bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 6978bf80f4bSopenharmony_ci * @tc.desc: test SetRequiredInterfacesReplace function 6988bf80f4bSopenharmony_ci * @tc.type: FUNC 6998bf80f4bSopenharmony_ci * @tc.require: I7DMS1 7008bf80f4bSopenharmony_ci */ 7018bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, SetRequiredInterfacesReplace, TestSize.Level1) 7028bf80f4bSopenharmony_ci{ 7038bf80f4bSopenharmony_ci auto req = interface_cast<IRequiredInterfaces>(container_); 7048bf80f4bSopenharmony_ci ASSERT_TRUE(req); 7058bf80f4bSopenharmony_ci EXPECT_TRUE(req->SetRequiredInterfaces({ ITestType::UID })); 7068bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildTestTypes); 7078bf80f4bSopenharmony_ci 7088bf80f4bSopenharmony_ci const auto children = container_->GetAll(); 7098bf80f4bSopenharmony_ci const auto expectedCount = NumDirectChildTestTypes; 7108bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 7118bf80f4bSopenharmony_ci const auto replace = children[expectedCount / 2]; 7128bf80f4bSopenharmony_ci 7138bf80f4bSopenharmony_ci const auto replaceWithItem = interface_pointer_cast<IObject>(CreateTestType("Replaced")); 7148bf80f4bSopenharmony_ci const auto replaceWithContainer = interface_pointer_cast<IObject>(CreateTestContainer("Replaced")); 7158bf80f4bSopenharmony_ci 7168bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Replace(replace, replaceWithContainer, false)); 7178bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount); 7188bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Not(Contains(replaceWithContainer))); 7198bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Contains(replace)); 7208bf80f4bSopenharmony_ci 7218bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Replace(replace, replaceWithContainer, true)); 7228bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount); 7238bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Not(Contains(replaceWithContainer))); 7248bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Contains(replace)); 7258bf80f4bSopenharmony_ci 7268bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace(replace, replaceWithItem, false)); 7278bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount); 7288bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Contains(replaceWithItem)); 7298bf80f4bSopenharmony_ci EXPECT_THAT(container_->GetAll(), Not(Contains(replace))); 7308bf80f4bSopenharmony_ci} 7318bf80f4bSopenharmony_ci 7328bf80f4bSopenharmony_ci/** 7338bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 7348bf80f4bSopenharmony_ci * @tc.desc: test FindAnyNameDirect function 7358bf80f4bSopenharmony_ci * @tc.type: FUNC 7368bf80f4bSopenharmony_ci * @tc.require: I7DMS1 7378bf80f4bSopenharmony_ci */ 7388bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, FindAnyNameDirect, TestSize.Level1) 7398bf80f4bSopenharmony_ci{ 7408bf80f4bSopenharmony_ci auto result1 = container_->FindAny({ "Object1_1", TraversalType::NO_HIERARCHY, {}, false }); 7418bf80f4bSopenharmony_ci auto result2 = container_->FindAny({ "Object2_1", TraversalType::NO_HIERARCHY, {}, false }); 7428bf80f4bSopenharmony_ci 7438bf80f4bSopenharmony_ci EXPECT_NE(result1, nullptr); 7448bf80f4bSopenharmony_ci EXPECT_EQ(result2, nullptr); 7458bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 7468bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 7478bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 7488bf80f4bSopenharmony_ci} 7498bf80f4bSopenharmony_ci 7508bf80f4bSopenharmony_ci/** 7518bf80f4bSopenharmony_ci * @tc.name: ContainerCommonTest 7528bf80f4bSopenharmony_ci * @tc.desc: test SetRequiredInterfaces function 7538bf80f4bSopenharmony_ci * @tc.type: FUNC 7548bf80f4bSopenharmony_ci * @tc.require: I7DMS1 7558bf80f4bSopenharmony_ci */ 7568bf80f4bSopenharmony_ciHWTEST_P(ContainerCommonTest, SetRequiredInterfaces, TestSize.Level1) 7578bf80f4bSopenharmony_ci{ 7588bf80f4bSopenharmony_ci auto req = interface_cast<IRequiredInterfaces>(container_); 7598bf80f4bSopenharmony_ci ASSERT_TRUE(req); 7608bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildContainers + NumDirectChildTestTypes); 7618bf80f4bSopenharmony_ci EXPECT_TRUE(req->SetRequiredInterfaces({ ITestType::UID })); 7628bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildTestTypes); 7638bf80f4bSopenharmony_ci EXPECT_TRUE(req->SetRequiredInterfaces({ ITestContainer::UID })); 7648bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), 0); 7658bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Add(interface_pointer_cast<IObject>(CreateTestType()))); 7668bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), 0); 7678bf80f4bSopenharmony_ci const auto container = interface_pointer_cast<IObject>(CreateTestContainer()); 7688bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Add(container)); 7698bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), 1); 7708bf80f4bSopenharmony_ci const auto all = container_->GetAll(); 7718bf80f4bSopenharmony_ci ASSERT_THAT(all, SizeIs(1)); 7728bf80f4bSopenharmony_ci EXPECT_EQ(all[0], container); 7738bf80f4bSopenharmony_ci} 7748bf80f4bSopenharmony_ci 7758bf80f4bSopenharmony_ci/** 7768bf80f4bSopenharmony_ci * @tc.name: ContainerTest 7778bf80f4bSopenharmony_ci * @tc.desc: test FailAddLoop function 7788bf80f4bSopenharmony_ci * @tc.type: FUNC 7798bf80f4bSopenharmony_ci * @tc.require: I7DMS1 7808bf80f4bSopenharmony_ci */ 7818bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FailAddLoop, TestSize.Level1) 7828bf80f4bSopenharmony_ci{ 7838bf80f4bSopenharmony_ci EXPECT_FALSE(container2_1_->Add(container_)); 7848bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 7858bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 7868bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 7878bf80f4bSopenharmony_ci} 7888bf80f4bSopenharmony_ci 7898bf80f4bSopenharmony_ci/** 7908bf80f4bSopenharmony_ci * @tc.name: ContainerTest 7918bf80f4bSopenharmony_ci * @tc.desc: test FailInsertLoop function 7928bf80f4bSopenharmony_ci * @tc.type: FUNC 7938bf80f4bSopenharmony_ci * @tc.require: I7DMS1 7948bf80f4bSopenharmony_ci */ 7958bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FailInsertLoop, TestSize.Level1) 7968bf80f4bSopenharmony_ci{ 7978bf80f4bSopenharmony_ci EXPECT_FALSE(container2_1_->Insert(0, container_)); 7988bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 7998bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 8008bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 8018bf80f4bSopenharmony_ci} 8028bf80f4bSopenharmony_ci 8038bf80f4bSopenharmony_ci/** 8048bf80f4bSopenharmony_ci * @tc.name: ContainerTest 8058bf80f4bSopenharmony_ci * @tc.desc: test FailReplaceLoop function 8068bf80f4bSopenharmony_ci * @tc.type: FUNC 8078bf80f4bSopenharmony_ci * @tc.require: I7DMS1 8088bf80f4bSopenharmony_ci */ 8098bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FailReplaceLoop, TestSize.Level1) 8108bf80f4bSopenharmony_ci{ 8118bf80f4bSopenharmony_ci EXPECT_FALSE(container1_1_->Replace(container1_1_->GetAll()[1], container_)); 8128bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 8138bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 8148bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 8158bf80f4bSopenharmony_ci} 8168bf80f4bSopenharmony_ci 8178bf80f4bSopenharmony_ci/** 8188bf80f4bSopenharmony_ci * @tc.name: ContainerTest 8198bf80f4bSopenharmony_ci * @tc.desc: test ReplaceNullWithExisting function 8208bf80f4bSopenharmony_ci * @tc.type: FUNC 8218bf80f4bSopenharmony_ci * @tc.require: I7DMS1 8228bf80f4bSopenharmony_ci */ 8238bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, ReplaceNullWithExisting, TestSize.Level1) 8248bf80f4bSopenharmony_ci{ 8258bf80f4bSopenharmony_ci const auto children = container_->GetAll(); 8268bf80f4bSopenharmony_ci const auto expectedCount = NumDirectChildren; 8278bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 8288bf80f4bSopenharmony_ci 8298bf80f4bSopenharmony_ci auto indexReplace = expectedCount / 2; 8308bf80f4bSopenharmony_ci const auto replaceWith = children[indexReplace]; 8318bf80f4bSopenharmony_ci 8328bf80f4bSopenharmony_ci EXPECT_FALSE(container_->Replace({}, replaceWith, true)); 8338bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount); 8348bf80f4bSopenharmony_ci 8358bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 8368bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 8378bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 8388bf80f4bSopenharmony_ci} 8398bf80f4bSopenharmony_ci 8408bf80f4bSopenharmony_ci/** 8418bf80f4bSopenharmony_ci * @tc.name: ContainerTest 8428bf80f4bSopenharmony_ci * @tc.desc: test ReplaceWithExistingAddAlways function 8438bf80f4bSopenharmony_ci * @tc.type: FUNC 8448bf80f4bSopenharmony_ci * @tc.require: I7DMS1 8458bf80f4bSopenharmony_ci */ 8468bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, ReplaceWithExistingAddAlways, TestSize.Level1) 8478bf80f4bSopenharmony_ci{ 8488bf80f4bSopenharmony_ci const auto children = container_->GetAll(); 8498bf80f4bSopenharmony_ci const auto expectedCount = NumDirectChildren; 8508bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 8518bf80f4bSopenharmony_ci 8528bf80f4bSopenharmony_ci auto indexReplace = expectedCount / 2; 8538bf80f4bSopenharmony_ci auto indexReplaceWith = indexReplace + 1; 8548bf80f4bSopenharmony_ci const auto replace = children[indexReplace]; 8558bf80f4bSopenharmony_ci const auto replaceWith = children[indexReplaceWith]; 8568bf80f4bSopenharmony_ci 8578bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace(replace, replaceWith, false)); 8588bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount - 1); 8598bf80f4bSopenharmony_ci 8608bf80f4bSopenharmony_ci const auto moved = ChildMovedInfo { replaceWith, indexReplaceWith, indexReplace, container_ }; 8618bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, ElementsAre(moved)); 8628bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 8638bf80f4bSopenharmony_ci const auto removed = ChildChangedInfo { replace, indexReplace, container_ }; 8648bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, ElementsAre(removed)); 8658bf80f4bSopenharmony_ci} 8668bf80f4bSopenharmony_ci 8678bf80f4bSopenharmony_ci/** 8688bf80f4bSopenharmony_ci * @tc.name: ContainerTest 8698bf80f4bSopenharmony_ci * @tc.desc: test ReplaceWithExistingDontAddAlways function 8708bf80f4bSopenharmony_ci * @tc.type: FUNC 8718bf80f4bSopenharmony_ci * @tc.require: I7DMS1 8728bf80f4bSopenharmony_ci */ 8738bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, ReplaceWithExistingDontAddAlways, TestSize.Level1) 8748bf80f4bSopenharmony_ci{ 8758bf80f4bSopenharmony_ci const auto children = container_->GetAll(); 8768bf80f4bSopenharmony_ci const auto expectedCount = NumDirectChildren; 8778bf80f4bSopenharmony_ci ASSERT_EQ(children.size(), expectedCount); 8788bf80f4bSopenharmony_ci 8798bf80f4bSopenharmony_ci auto indexReplace = expectedCount / 2; 8808bf80f4bSopenharmony_ci auto indexReplaceWith = indexReplace + 1; 8818bf80f4bSopenharmony_ci const auto replace = children[indexReplace]; 8828bf80f4bSopenharmony_ci const auto replaceWith = children[indexReplaceWith]; 8838bf80f4bSopenharmony_ci 8848bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Replace(replace, replaceWith, true)); 8858bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), expectedCount - 1); 8868bf80f4bSopenharmony_ci 8878bf80f4bSopenharmony_ci const auto moved = ChildMovedInfo { replaceWith, indexReplaceWith, indexReplace, container_ }; 8888bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, ElementsAre(moved)); 8898bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 8908bf80f4bSopenharmony_ci const auto removed = ChildChangedInfo { replace, indexReplace, container_ }; 8918bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, ElementsAre(removed)); 8928bf80f4bSopenharmony_ci} 8938bf80f4bSopenharmony_ci 8948bf80f4bSopenharmony_ci/** 8958bf80f4bSopenharmony_ci * @tc.name: ContainerTest 8968bf80f4bSopenharmony_ci * @tc.desc: test AddChildTwice function 8978bf80f4bSopenharmony_ci * @tc.type: FUNC 8988bf80f4bSopenharmony_ci * @tc.require: I7DMS1 8998bf80f4bSopenharmony_ci */ 9008bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, AddChildTwice, TestSize.Level1) 9018bf80f4bSopenharmony_ci{ 9028bf80f4bSopenharmony_ci const auto child = interface_pointer_cast<IObject>(CreateTestType("Twice")); 9038bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Add(child)); 9048bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren + 1); 9058bf80f4bSopenharmony_ci 9068bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Add(child)); 9078bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren + 1); 9088bf80f4bSopenharmony_ci 9098bf80f4bSopenharmony_ci const auto children = container_->FindAll({ "Twice", TraversalType::NO_HIERARCHY }); 9108bf80f4bSopenharmony_ci ASSERT_THAT(children, SizeIs(1)); 9118bf80f4bSopenharmony_ci EXPECT_EQ(children[0], child); 9128bf80f4bSopenharmony_ci 9138bf80f4bSopenharmony_ci ASSERT_THAT(addedCalls_, SizeIs(1)); 9148bf80f4bSopenharmony_ci ASSERT_THAT(removedCalls_, SizeIs(0)); 9158bf80f4bSopenharmony_ci ASSERT_THAT(movedCalls_, SizeIs(0)); 9168bf80f4bSopenharmony_ci auto expected = ChildChangedInfo { child, NumDirectChildren, container_ }; 9178bf80f4bSopenharmony_ci EXPECT_EQ(addedCalls_[0], expected); 9188bf80f4bSopenharmony_ci} 9198bf80f4bSopenharmony_ci 9208bf80f4bSopenharmony_ci/** 9218bf80f4bSopenharmony_ci * @tc.name: ContainerTest 9228bf80f4bSopenharmony_ci * @tc.desc: test FindAllEmptyName function 9238bf80f4bSopenharmony_ci * @tc.type: FUNC 9248bf80f4bSopenharmony_ci * @tc.require: I7DMS1 9258bf80f4bSopenharmony_ci */ 9268bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAllEmptyName, TestSize.Level1) 9278bf80f4bSopenharmony_ci{ 9288bf80f4bSopenharmony_ci auto result1 = container_->FindAll({ "", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 9298bf80f4bSopenharmony_ci auto result2 = container_->FindAll({ "", TraversalType::NO_HIERARCHY, { ITestContainer::UID }, false }); 9308bf80f4bSopenharmony_ci auto result3 = container_->FindAll({ "", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestContainer::UID }, false }); 9318bf80f4bSopenharmony_ci auto result4 = container_->FindAll({ "", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestType::UID }, false }); 9328bf80f4bSopenharmony_ci 9338bf80f4bSopenharmony_ci EXPECT_THAT(result1, SizeIs(NumChildContainers + NumChildTestTypes)); 9348bf80f4bSopenharmony_ci EXPECT_THAT(result2, SizeIs(1)); 9358bf80f4bSopenharmony_ci EXPECT_THAT(result3, SizeIs(NumChildContainers)); 9368bf80f4bSopenharmony_ci EXPECT_THAT(result4, SizeIs(NumChildTestTypes)); 9378bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 9388bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 9398bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 9408bf80f4bSopenharmony_ci} 9418bf80f4bSopenharmony_ci 9428bf80f4bSopenharmony_ci/** 9438bf80f4bSopenharmony_ci * @tc.name: ContainerTest 9448bf80f4bSopenharmony_ci * @tc.desc: test FindAllNameRecursive function 9458bf80f4bSopenharmony_ci * @tc.type: FUNC 9468bf80f4bSopenharmony_ci * @tc.require: I7DMS1 9478bf80f4bSopenharmony_ci */ 9488bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAllNameRecursive, TestSize.Level1) 9498bf80f4bSopenharmony_ci{ 9508bf80f4bSopenharmony_ci auto result1 = container_->FindAll({ "Object1_1", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 9518bf80f4bSopenharmony_ci auto result2 = container_->FindAll({ "Object2_1", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 9528bf80f4bSopenharmony_ci 9538bf80f4bSopenharmony_ci EXPECT_THAT(result1, SizeIs(1)); 9548bf80f4bSopenharmony_ci EXPECT_THAT(result2, SizeIs(1)); 9558bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 9568bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 9578bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 9588bf80f4bSopenharmony_ci} 9598bf80f4bSopenharmony_ci 9608bf80f4bSopenharmony_ci/** 9618bf80f4bSopenharmony_ci * @tc.name: ContainerTest 9628bf80f4bSopenharmony_ci * @tc.desc: test FindAllNameDuplicate function 9638bf80f4bSopenharmony_ci * @tc.type: FUNC 9648bf80f4bSopenharmony_ci * @tc.require: I7DMS1 9658bf80f4bSopenharmony_ci */ 9668bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAllNameDuplicate, TestSize.Level1) 9678bf80f4bSopenharmony_ci{ 9688bf80f4bSopenharmony_ci auto result1 = container_->FindAll({ "ObjectDupe", TraversalType::NO_HIERARCHY, {}, false }); 9698bf80f4bSopenharmony_ci auto result2 = container_->FindAll({ "ObjectDupe", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 9708bf80f4bSopenharmony_ci 9718bf80f4bSopenharmony_ci EXPECT_THAT(result1, SizeIs(1)); 9728bf80f4bSopenharmony_ci EXPECT_THAT(result2, SizeIs(2)); 9738bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 9748bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 9758bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 9768bf80f4bSopenharmony_ci} 9778bf80f4bSopenharmony_ci 9788bf80f4bSopenharmony_ci/** 9798bf80f4bSopenharmony_ci * @tc.name: ContainerTest 9808bf80f4bSopenharmony_ci * @tc.desc: test FindAllUid function 9818bf80f4bSopenharmony_ci * @tc.type: FUNC 9828bf80f4bSopenharmony_ci * @tc.require: I7DMS1 9838bf80f4bSopenharmony_ci */ 9848bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAllUid, TestSize.Level1) 9858bf80f4bSopenharmony_ci{ 9868bf80f4bSopenharmony_ci auto result1 = container_->FindAll({ "", TraversalType::NO_HIERARCHY, { ITestContainer::UID }, false }); 9878bf80f4bSopenharmony_ci auto result2 = container_->FindAll({ "", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestContainer::UID }, false }); 9888bf80f4bSopenharmony_ci auto result3 = container_->FindAll({ "SameNameDifferentUid", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 9898bf80f4bSopenharmony_ci auto result4 = container_->FindAll( 9908bf80f4bSopenharmony_ci { "SameNameDifferentUid", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestContainer::UID }, false }); 9918bf80f4bSopenharmony_ci 9928bf80f4bSopenharmony_ci EXPECT_THAT(result1, SizeIs(1)); 9938bf80f4bSopenharmony_ci EXPECT_THAT(result2, SizeIs(2)); 9948bf80f4bSopenharmony_ci EXPECT_THAT(result3, SizeIs(3)); 9958bf80f4bSopenharmony_ci EXPECT_THAT(result4, SizeIs(1)); 9968bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 9978bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 9988bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 9998bf80f4bSopenharmony_ci} 10008bf80f4bSopenharmony_ci 10018bf80f4bSopenharmony_ci/** 10028bf80f4bSopenharmony_ci * @tc.name: ContainerTest 10038bf80f4bSopenharmony_ci * @tc.desc: test FindAllUidStrict function 10048bf80f4bSopenharmony_ci * @tc.type: FUNC 10058bf80f4bSopenharmony_ci * @tc.require: I7DMS1 10068bf80f4bSopenharmony_ci */ 10078bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAllUidStrict, TestSize.Level1) 10088bf80f4bSopenharmony_ci{ 10098bf80f4bSopenharmony_ci auto result1 = container_->FindAll({ "SameNameDifferentUid", TraversalType::DEPTH_FIRST_PRE_ORDER, 10108bf80f4bSopenharmony_ci { ITestType::UID, ITestContainer::UID }, true }); 10118bf80f4bSopenharmony_ci auto result2 = 10128bf80f4bSopenharmony_ci container_->FindAll({ "SameNameDifferentUid", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestType::UID }, true }); 10138bf80f4bSopenharmony_ci auto result3 = container_->FindAll({ "SameNameDifferentUid", TraversalType::DEPTH_FIRST_PRE_ORDER, 10148bf80f4bSopenharmony_ci { ITestType::UID, ITestContainer::UID }, false }); 10158bf80f4bSopenharmony_ci EXPECT_THAT(result1, SizeIs(0)); 10168bf80f4bSopenharmony_ci EXPECT_THAT(result2, SizeIs(2)); 10178bf80f4bSopenharmony_ci EXPECT_THAT(result3, SizeIs(3)); 10188bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 10198bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 10208bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 10218bf80f4bSopenharmony_ci} 10228bf80f4bSopenharmony_ci 10238bf80f4bSopenharmony_ci/** 10248bf80f4bSopenharmony_ci * @tc.name: ContainerTest 10258bf80f4bSopenharmony_ci * @tc.desc: test FindAllInvalid function 10268bf80f4bSopenharmony_ci * @tc.type: FUNC 10278bf80f4bSopenharmony_ci * @tc.require: I7DMS1 10288bf80f4bSopenharmony_ci */ 10298bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAllInvalid, TestSize.Level1) 10308bf80f4bSopenharmony_ci{ 10318bf80f4bSopenharmony_ci auto result1 = container_->FindAll({ "InvalidObject", TraversalType::NO_HIERARCHY, {}, false }); 10328bf80f4bSopenharmony_ci auto result2 = container_->FindAll({ "InvalidObject", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 10338bf80f4bSopenharmony_ci auto result3 = 10348bf80f4bSopenharmony_ci container_->FindAll({ "", TraversalType::DEPTH_FIRST_PRE_ORDER, { META_NS::IAttachment::UID }, false }); 10358bf80f4bSopenharmony_ci auto result4 = container_->FindAll( 10368bf80f4bSopenharmony_ci { "", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestType::UID, META_NS::IAttachment::UID }, true }); 10378bf80f4bSopenharmony_ci 10388bf80f4bSopenharmony_ci EXPECT_THAT(result1, SizeIs(0)); 10398bf80f4bSopenharmony_ci EXPECT_THAT(result2, SizeIs(0)); 10408bf80f4bSopenharmony_ci EXPECT_THAT(result3, SizeIs(0)); 10418bf80f4bSopenharmony_ci EXPECT_THAT(result4, SizeIs(0)); 10428bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 10438bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 10448bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 10458bf80f4bSopenharmony_ci} 10468bf80f4bSopenharmony_ci 10478bf80f4bSopenharmony_ci/** 10488bf80f4bSopenharmony_ci * @tc.name: ContainerTest 10498bf80f4bSopenharmony_ci * @tc.desc: test FindAnyEmptyName function 10508bf80f4bSopenharmony_ci * @tc.type: FUNC 10518bf80f4bSopenharmony_ci * @tc.require: I7DMS1 10528bf80f4bSopenharmony_ci */ 10538bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAnyEmptyName, TestSize.Level1) 10548bf80f4bSopenharmony_ci{ 10558bf80f4bSopenharmony_ci auto result1 = container_->FindAny({ "", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 10568bf80f4bSopenharmony_ci auto result2 = container_->FindAny({ "", TraversalType::NO_HIERARCHY, { ITestContainer::UID }, false }); 10578bf80f4bSopenharmony_ci auto result3 = container_->FindAny({ "", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestContainer::UID }, false }); 10588bf80f4bSopenharmony_ci 10598bf80f4bSopenharmony_ci EXPECT_NE(result1, nullptr); 10608bf80f4bSopenharmony_ci EXPECT_NE(result2, nullptr); 10618bf80f4bSopenharmony_ci EXPECT_NE(result3, nullptr); 10628bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 10638bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 10648bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 10658bf80f4bSopenharmony_ci} 10668bf80f4bSopenharmony_ci 10678bf80f4bSopenharmony_ci/** 10688bf80f4bSopenharmony_ci * @tc.name: ContainerTest 10698bf80f4bSopenharmony_ci * @tc.desc: test FindAnyNameRecursive function 10708bf80f4bSopenharmony_ci * @tc.type: FUNC 10718bf80f4bSopenharmony_ci * @tc.require: I7DMS1 10728bf80f4bSopenharmony_ci */ 10738bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAnyNameRecursive, TestSize.Level1) 10748bf80f4bSopenharmony_ci{ 10758bf80f4bSopenharmony_ci auto result1 = container_->FindAny({ "Object1_1", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 10768bf80f4bSopenharmony_ci auto result2 = container_->FindAny({ "Object2_1", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 10778bf80f4bSopenharmony_ci auto result3 = container_->FindAnyFromHierarchy<IObject>("Object2_1"); 10788bf80f4bSopenharmony_ci 10798bf80f4bSopenharmony_ci EXPECT_NE(result1, nullptr); 10808bf80f4bSopenharmony_ci EXPECT_NE(result2, nullptr); 10818bf80f4bSopenharmony_ci EXPECT_EQ(result2, result3); 10828bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 10838bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 10848bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 10858bf80f4bSopenharmony_ci} 10868bf80f4bSopenharmony_ci 10878bf80f4bSopenharmony_ci/** 10888bf80f4bSopenharmony_ci * @tc.name: ContainerTest 10898bf80f4bSopenharmony_ci * @tc.desc: test FindAnyNameDuplicate function 10908bf80f4bSopenharmony_ci * @tc.type: FUNC 10918bf80f4bSopenharmony_ci * @tc.require: I7DMS1 10928bf80f4bSopenharmony_ci */ 10938bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAnyNameDuplicate, TestSize.Level1) 10948bf80f4bSopenharmony_ci{ 10958bf80f4bSopenharmony_ci auto result1 = container_->FindAny({ "ObjectDupe", TraversalType::NO_HIERARCHY, {}, false }); 10968bf80f4bSopenharmony_ci auto result2 = container_->FindAny({ "ObjectDupe", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 10978bf80f4bSopenharmony_ci 10988bf80f4bSopenharmony_ci EXPECT_NE(result1, nullptr); 10998bf80f4bSopenharmony_ci EXPECT_NE(result2, nullptr); 11008bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 11018bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 11028bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 11038bf80f4bSopenharmony_ci} 11048bf80f4bSopenharmony_ci 11058bf80f4bSopenharmony_ci/** 11068bf80f4bSopenharmony_ci * @tc.name: ContainerTest 11078bf80f4bSopenharmony_ci * @tc.desc: test FindAnyUid function 11088bf80f4bSopenharmony_ci * @tc.type: FUNC 11098bf80f4bSopenharmony_ci * @tc.require: I7DMS1 11108bf80f4bSopenharmony_ci */ 11118bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAnyUid, TestSize.Level1) 11128bf80f4bSopenharmony_ci{ 11138bf80f4bSopenharmony_ci auto result1 = container_->FindAny({ "", TraversalType::NO_HIERARCHY, { ITestContainer::UID }, false }); 11148bf80f4bSopenharmony_ci auto result2 = container_->FindAny({ "", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestContainer::UID }, false }); 11158bf80f4bSopenharmony_ci auto result3 = container_->FindAny({ "SameNameDifferentUid", TraversalType::NO_HIERARCHY, {}, false }); 11168bf80f4bSopenharmony_ci auto result4 = container_->FindAny( 11178bf80f4bSopenharmony_ci { "SameNameDifferentUid", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestContainer::UID }, false }); 11188bf80f4bSopenharmony_ci 11198bf80f4bSopenharmony_ci EXPECT_NE(result1, nullptr); 11208bf80f4bSopenharmony_ci EXPECT_NE(result2, nullptr); 11218bf80f4bSopenharmony_ci EXPECT_NE(result3, nullptr); 11228bf80f4bSopenharmony_ci EXPECT_NE(result4, nullptr); 11238bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 11248bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 11258bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 11268bf80f4bSopenharmony_ci} 11278bf80f4bSopenharmony_ci 11288bf80f4bSopenharmony_ci/** 11298bf80f4bSopenharmony_ci * @tc.name: ContainerTest 11308bf80f4bSopenharmony_ci * @tc.desc: test FindAnyUidStrict function 11318bf80f4bSopenharmony_ci * @tc.type: FUNC 11328bf80f4bSopenharmony_ci * @tc.require: I7DMS1 11338bf80f4bSopenharmony_ci */ 11348bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAnyUidStrict, TestSize.Level1) 11358bf80f4bSopenharmony_ci{ 11368bf80f4bSopenharmony_ci auto result1 = container_->FindAny({ "SameNameDifferentUid", TraversalType::DEPTH_FIRST_PRE_ORDER, 11378bf80f4bSopenharmony_ci { ITestType::UID, ITestContainer::UID }, true }); 11388bf80f4bSopenharmony_ci auto result2 = 11398bf80f4bSopenharmony_ci container_->FindAny({ "SameNameDifferentUid", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestType::UID }, true }); 11408bf80f4bSopenharmony_ci auto result3 = container_->FindAny({ "SameNameDifferentUid", TraversalType::DEPTH_FIRST_PRE_ORDER, 11418bf80f4bSopenharmony_ci { ITestType::UID, ITestContainer::UID }, false }); 11428bf80f4bSopenharmony_ci EXPECT_EQ(result1, nullptr); 11438bf80f4bSopenharmony_ci EXPECT_NE(result2, nullptr); 11448bf80f4bSopenharmony_ci EXPECT_NE(result3, nullptr); 11458bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 11468bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 11478bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 11488bf80f4bSopenharmony_ci} 11498bf80f4bSopenharmony_ci 11508bf80f4bSopenharmony_ci/** 11518bf80f4bSopenharmony_ci * @tc.name: ContainerTest 11528bf80f4bSopenharmony_ci * @tc.desc: test FindAnyInvalid function 11538bf80f4bSopenharmony_ci * @tc.type: FUNC 11548bf80f4bSopenharmony_ci * @tc.require: I7DMS1 11558bf80f4bSopenharmony_ci */ 11568bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindAnyInvalid, TestSize.Level1) 11578bf80f4bSopenharmony_ci{ 11588bf80f4bSopenharmony_ci auto result1 = container_->FindAny({ "InvalidObject", TraversalType::NO_HIERARCHY, {}, false }); 11598bf80f4bSopenharmony_ci auto result2 = container_->FindAny({ "InvalidObject", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 11608bf80f4bSopenharmony_ci auto result3 = 11618bf80f4bSopenharmony_ci container_->FindAny({ "", TraversalType::DEPTH_FIRST_PRE_ORDER, { META_NS::IAttachment::UID }, false }); 11628bf80f4bSopenharmony_ci auto result4 = container_->FindAny( 11638bf80f4bSopenharmony_ci { "", TraversalType::DEPTH_FIRST_PRE_ORDER, { ITestType::UID, META_NS::IAttachment::UID }, true }); 11648bf80f4bSopenharmony_ci 11658bf80f4bSopenharmony_ci EXPECT_EQ(result1, nullptr); 11668bf80f4bSopenharmony_ci EXPECT_EQ(result2, nullptr); 11678bf80f4bSopenharmony_ci EXPECT_EQ(result3, nullptr); 11688bf80f4bSopenharmony_ci EXPECT_EQ(result4, nullptr); 11698bf80f4bSopenharmony_ci EXPECT_THAT(addedCalls_, SizeIs(0)); 11708bf80f4bSopenharmony_ci EXPECT_THAT(removedCalls_, SizeIs(0)); 11718bf80f4bSopenharmony_ci EXPECT_THAT(movedCalls_, SizeIs(0)); 11728bf80f4bSopenharmony_ci} 11738bf80f4bSopenharmony_ci 11748bf80f4bSopenharmony_ci/** 11758bf80f4bSopenharmony_ci * @tc.name: ContainerTest 11768bf80f4bSopenharmony_ci * @tc.desc: test IterationSupport function 11778bf80f4bSopenharmony_ci * @tc.type: FUNC 11788bf80f4bSopenharmony_ci * @tc.require: I7DMS1 11798bf80f4bSopenharmony_ci */ 11808bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, IterationSupport, TestSize.Level1) 11818bf80f4bSopenharmony_ci{ 11828bf80f4bSopenharmony_ci { 11838bf80f4bSopenharmony_ci int count = 0; 11848bf80f4bSopenharmony_ci ForEachShared(container_, [&](const IObject::Ptr&) { ++count; }); 11858bf80f4bSopenharmony_ci EXPECT_EQ(count, NumDirectChildren); 11868bf80f4bSopenharmony_ci } 11878bf80f4bSopenharmony_ci { 11888bf80f4bSopenharmony_ci int count = 0; 11898bf80f4bSopenharmony_ci IterateShared(container_, [&](const IObject::Ptr&) { 11908bf80f4bSopenharmony_ci ++count; 11918bf80f4bSopenharmony_ci return true; 11928bf80f4bSopenharmony_ci }); 11938bf80f4bSopenharmony_ci EXPECT_EQ(count, NumDirectChildren); 11948bf80f4bSopenharmony_ci } 11958bf80f4bSopenharmony_ci 11968bf80f4bSopenharmony_ci { 11978bf80f4bSopenharmony_ci int count = 0; 11988bf80f4bSopenharmony_ci ForEachShared( 11998bf80f4bSopenharmony_ci container_, [&](const IObject::Ptr&) { ++count; }, TraversalType::DEPTH_FIRST_PRE_ORDER); 12008bf80f4bSopenharmony_ci EXPECT_EQ(count, NumChildContainers + NumChildTestTypes); 12018bf80f4bSopenharmony_ci } 12028bf80f4bSopenharmony_ci { 12038bf80f4bSopenharmony_ci int count = 0; 12048bf80f4bSopenharmony_ci IterateShared( 12058bf80f4bSopenharmony_ci container_, 12068bf80f4bSopenharmony_ci [&](const IObject::Ptr&) { 12078bf80f4bSopenharmony_ci ++count; 12088bf80f4bSopenharmony_ci return true; 12098bf80f4bSopenharmony_ci }, 12108bf80f4bSopenharmony_ci TraversalType::DEPTH_FIRST_PRE_ORDER); 12118bf80f4bSopenharmony_ci EXPECT_EQ(count, NumChildContainers + NumChildTestTypes); 12128bf80f4bSopenharmony_ci } 12138bf80f4bSopenharmony_ci { 12148bf80f4bSopenharmony_ci int count = 0; 12158bf80f4bSopenharmony_ci ForEachUnique( 12168bf80f4bSopenharmony_ci container_, [&](const IObject::Ptr&) { ++count; }, TraversalType::DEPTH_FIRST_PRE_ORDER); 12178bf80f4bSopenharmony_ci EXPECT_EQ(count, NumChildContainers + NumChildTestTypes); 12188bf80f4bSopenharmony_ci } 12198bf80f4bSopenharmony_ci { 12208bf80f4bSopenharmony_ci int count = 0; 12218bf80f4bSopenharmony_ci IterateUnique( 12228bf80f4bSopenharmony_ci container_, 12238bf80f4bSopenharmony_ci [&](const IObject::Ptr&) { 12248bf80f4bSopenharmony_ci ++count; 12258bf80f4bSopenharmony_ci return true; 12268bf80f4bSopenharmony_ci }, 12278bf80f4bSopenharmony_ci TraversalType::DEPTH_FIRST_PRE_ORDER); 12288bf80f4bSopenharmony_ci EXPECT_EQ(count, NumChildContainers + NumChildTestTypes); 12298bf80f4bSopenharmony_ci } 12308bf80f4bSopenharmony_ci { 12318bf80f4bSopenharmony_ci int count = 0; 12328bf80f4bSopenharmony_ci IterateShared( 12338bf80f4bSopenharmony_ci container_, 12348bf80f4bSopenharmony_ci [&](const IObject::Ptr& o) { 12358bf80f4bSopenharmony_ci ++count; 12368bf80f4bSopenharmony_ci return o->GetName() != "SameNameDifferentUid"; 12378bf80f4bSopenharmony_ci }, 12388bf80f4bSopenharmony_ci TraversalType::DEPTH_FIRST_PRE_ORDER); 12398bf80f4bSopenharmony_ci EXPECT_LT(count, NumChildContainers + NumChildTestTypes); 12408bf80f4bSopenharmony_ci } 12418bf80f4bSopenharmony_ci { 12428bf80f4bSopenharmony_ci int count = 0; 12438bf80f4bSopenharmony_ci ConstIterate(container_, MakeIterationConstCallable([&](const IObject::Ptr&) { 12448bf80f4bSopenharmony_ci ++count; 12458bf80f4bSopenharmony_ci return true; 12468bf80f4bSopenharmony_ci }), 12478bf80f4bSopenharmony_ci IterateStrategy { TraversalType::DEPTH_FIRST_PRE_ORDER, LockType::NO_LOCK }); 12488bf80f4bSopenharmony_ci EXPECT_EQ(count, NumChildContainers + NumChildTestTypes); 12498bf80f4bSopenharmony_ci } 12508bf80f4bSopenharmony_ci { 12518bf80f4bSopenharmony_ci int count = 0; 12528bf80f4bSopenharmony_ci ConstIterate(container_, MakeIterationConstCallable([&](const IObject::Ptr&) { 12538bf80f4bSopenharmony_ci ++count; 12548bf80f4bSopenharmony_ci return true; 12558bf80f4bSopenharmony_ci }), 12568bf80f4bSopenharmony_ci IterateStrategy { TraversalType::FULL_HIERARCHY, LockType::UNIQUE_LOCK }); 12578bf80f4bSopenharmony_ci EXPECT_EQ(count, NumChildContainers + NumChildTestTypes); 12588bf80f4bSopenharmony_ci } 12598bf80f4bSopenharmony_ci { 12608bf80f4bSopenharmony_ci int count = 0; 12618bf80f4bSopenharmony_ci ConstIterate(container_, MakeIterationConstCallable([&](const IObject::Ptr&) { 12628bf80f4bSopenharmony_ci ++count; 12638bf80f4bSopenharmony_ci return true; 12648bf80f4bSopenharmony_ci }), 12658bf80f4bSopenharmony_ci IterateStrategy { TraversalType::BREADTH_FIRST_ORDER, LockType::UNIQUE_LOCK }); 12668bf80f4bSopenharmony_ci EXPECT_EQ(count, NumChildContainers + NumChildTestTypes); 12678bf80f4bSopenharmony_ci } 12688bf80f4bSopenharmony_ci} 12698bf80f4bSopenharmony_ci 12708bf80f4bSopenharmony_ci/** 12718bf80f4bSopenharmony_ci * @tc.name: ContainerTest 12728bf80f4bSopenharmony_ci * @tc.desc: test FindOrder function 12738bf80f4bSopenharmony_ci * @tc.type: FUNC 12748bf80f4bSopenharmony_ci * @tc.require: I7DMS1 12758bf80f4bSopenharmony_ci */ 12768bf80f4bSopenharmony_ciHWTEST_F(ContainerTest, FindOrder, TestSize.Level1) 12778bf80f4bSopenharmony_ci{ 12788bf80f4bSopenharmony_ci auto c = CreateContainer("X"); 12798bf80f4bSopenharmony_ci auto c1 = CreateContainer("1"); 12808bf80f4bSopenharmony_ci auto c2 = CreateContainer("2"); 12818bf80f4bSopenharmony_ci auto c1_1 = CreateTestType<IObject>("3"); 12828bf80f4bSopenharmony_ci auto c1_2 = CreateTestType<IObject>("1"); 12838bf80f4bSopenharmony_ci auto c2_1 = CreateTestType<IObject>("3"); 12848bf80f4bSopenharmony_ci auto c2_2 = CreateContainer("2_2"); 12858bf80f4bSopenharmony_ci auto c2_2_1 = CreateContainer("4"); 12868bf80f4bSopenharmony_ci auto c2_2_1_1 = CreateTestType<IObject>("4"); 12878bf80f4bSopenharmony_ci auto c2_3 = CreateTestType<IObject>("4"); 12888bf80f4bSopenharmony_ci auto c3 = CreateTestType<IObject>("3"); 12898bf80f4bSopenharmony_ci 12908bf80f4bSopenharmony_ci c->Add(c1); 12918bf80f4bSopenharmony_ci c->Add(c2); 12928bf80f4bSopenharmony_ci c->Add(c3); 12938bf80f4bSopenharmony_ci c1->Add(c1_1); 12948bf80f4bSopenharmony_ci c1->Add(c1_2); 12958bf80f4bSopenharmony_ci c2->Add(c2_1); 12968bf80f4bSopenharmony_ci c2->Add(c2_2); 12978bf80f4bSopenharmony_ci c2->Add(c2_3); 12988bf80f4bSopenharmony_ci c2_2->Add(c2_2_1); 12998bf80f4bSopenharmony_ci c2_2_1->Add(c2_2_1_1); 13008bf80f4bSopenharmony_ci 13018bf80f4bSopenharmony_ci { 13028bf80f4bSopenharmony_ci auto r = c->FindAny({ "1", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 13038bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13048bf80f4bSopenharmony_ci EXPECT_EQ(r, interface_pointer_cast<IObject>(c1)); 13058bf80f4bSopenharmony_ci } 13068bf80f4bSopenharmony_ci { 13078bf80f4bSopenharmony_ci auto r = c->FindAny({ "1", TraversalType::DEPTH_FIRST_POST_ORDER, {}, false }); 13088bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13098bf80f4bSopenharmony_ci EXPECT_EQ(r, c1_2); 13108bf80f4bSopenharmony_ci } 13118bf80f4bSopenharmony_ci { 13128bf80f4bSopenharmony_ci auto r = c->FindAny({ "1", TraversalType::BREADTH_FIRST_ORDER, {}, false }); 13138bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13148bf80f4bSopenharmony_ci EXPECT_EQ(r, interface_pointer_cast<IObject>(c1)); 13158bf80f4bSopenharmony_ci } 13168bf80f4bSopenharmony_ci { 13178bf80f4bSopenharmony_ci auto r = c->FindAny({ "1", TraversalType::NO_HIERARCHY, {}, false }); 13188bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13198bf80f4bSopenharmony_ci EXPECT_EQ(r, interface_pointer_cast<IObject>(c1)); 13208bf80f4bSopenharmony_ci } 13218bf80f4bSopenharmony_ci { 13228bf80f4bSopenharmony_ci auto r = c->FindAny({ "3", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 13238bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13248bf80f4bSopenharmony_ci EXPECT_EQ(r, c1_1); 13258bf80f4bSopenharmony_ci } 13268bf80f4bSopenharmony_ci { 13278bf80f4bSopenharmony_ci auto r = c->FindAny({ "3", TraversalType::DEPTH_FIRST_POST_ORDER, {}, false }); 13288bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13298bf80f4bSopenharmony_ci EXPECT_EQ(r, c1_1); 13308bf80f4bSopenharmony_ci } 13318bf80f4bSopenharmony_ci { 13328bf80f4bSopenharmony_ci auto r = c->FindAny({ "3", TraversalType::BREADTH_FIRST_ORDER, {}, false }); 13338bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13348bf80f4bSopenharmony_ci EXPECT_EQ(r, c3); 13358bf80f4bSopenharmony_ci } 13368bf80f4bSopenharmony_ci { 13378bf80f4bSopenharmony_ci auto r = c->FindAny({ "3", TraversalType::NO_HIERARCHY, {}, false }); 13388bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13398bf80f4bSopenharmony_ci EXPECT_EQ(r, interface_pointer_cast<IObject>(c3)); 13408bf80f4bSopenharmony_ci } 13418bf80f4bSopenharmony_ci { 13428bf80f4bSopenharmony_ci auto r = c->FindAny({ "4", TraversalType::DEPTH_FIRST_PRE_ORDER, {}, false }); 13438bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13448bf80f4bSopenharmony_ci EXPECT_EQ(r, interface_pointer_cast<IObject>(c2_2_1)); 13458bf80f4bSopenharmony_ci } 13468bf80f4bSopenharmony_ci { 13478bf80f4bSopenharmony_ci auto r = c->FindAny({ "4", TraversalType::DEPTH_FIRST_POST_ORDER, {}, false }); 13488bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13498bf80f4bSopenharmony_ci EXPECT_EQ(r, c2_2_1_1); 13508bf80f4bSopenharmony_ci } 13518bf80f4bSopenharmony_ci { 13528bf80f4bSopenharmony_ci auto r = c->FindAny({ "4", TraversalType::BREADTH_FIRST_ORDER, {}, false }); 13538bf80f4bSopenharmony_ci ASSERT_TRUE(r); 13548bf80f4bSopenharmony_ci EXPECT_EQ(r, c2_3); 13558bf80f4bSopenharmony_ci } 13568bf80f4bSopenharmony_ci { 13578bf80f4bSopenharmony_ci auto r = c->FindAny({ "4", TraversalType::NO_HIERARCHY, {}, false }); 13588bf80f4bSopenharmony_ci ASSERT_FALSE(r); 13598bf80f4bSopenharmony_ci } 13608bf80f4bSopenharmony_ci} 13618bf80f4bSopenharmony_ci 13628bf80f4bSopenharmony_ci/** 13638bf80f4bSopenharmony_ci * @tc.name: FlatContainerTest 13648bf80f4bSopenharmony_ci * @tc.desc: test SameItemMultipleTimes function 13658bf80f4bSopenharmony_ci * @tc.type: FUNC 13668bf80f4bSopenharmony_ci * @tc.require: I7DMS1 13678bf80f4bSopenharmony_ci */ 13688bf80f4bSopenharmony_ciHWTEST_F(FlatContainerTest, SameItemMultipleTimes, TestSize.Level1) 13698bf80f4bSopenharmony_ci{ 13708bf80f4bSopenharmony_ci const auto child = interface_pointer_cast<IObject>(CreateTestType("Twice")); 13718bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Add(child)); 13728bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren + 1); 13738bf80f4bSopenharmony_ci 13748bf80f4bSopenharmony_ci EXPECT_TRUE(container_->Add(child)); 13758bf80f4bSopenharmony_ci EXPECT_EQ(container_->GetSize(), NumDirectChildren + 2); 13768bf80f4bSopenharmony_ci 13778bf80f4bSopenharmony_ci const auto children = container_->FindAll({ "Twice", TraversalType::NO_HIERARCHY }); 13788bf80f4bSopenharmony_ci ASSERT_THAT(children, SizeIs(2)); 13798bf80f4bSopenharmony_ci EXPECT_EQ(children[0], child); 13808bf80f4bSopenharmony_ci EXPECT_EQ(children[1], child); 13818bf80f4bSopenharmony_ci 13828bf80f4bSopenharmony_ci ASSERT_THAT(addedCalls_, SizeIs(2)); 13838bf80f4bSopenharmony_ci ASSERT_THAT(removedCalls_, SizeIs(0)); 13848bf80f4bSopenharmony_ci ASSERT_THAT(movedCalls_, SizeIs(0)); 13858bf80f4bSopenharmony_ci auto expected1 = ChildChangedInfo { child, NumDirectChildren, container_ }; 13868bf80f4bSopenharmony_ci auto expected2 = ChildChangedInfo { child, NumDirectChildren + 1, container_ }; 13878bf80f4bSopenharmony_ci EXPECT_EQ(addedCalls_[0], expected1); 13888bf80f4bSopenharmony_ci EXPECT_EQ(addedCalls_[1], expected2); 13898bf80f4bSopenharmony_ci} 13908bf80f4bSopenharmony_ci 13918bf80f4bSopenharmony_ci/** 13928bf80f4bSopenharmony_ci * @tc.name: FlatContainerTest 13938bf80f4bSopenharmony_ci * @tc.desc: test IterationSupport function 13948bf80f4bSopenharmony_ci * @tc.type: FUNC 13958bf80f4bSopenharmony_ci * @tc.require: I7DMS1 13968bf80f4bSopenharmony_ci */ 13978bf80f4bSopenharmony_ciHWTEST_F(FlatContainerTest, IterationSupport, TestSize.Level1) 13988bf80f4bSopenharmony_ci{ 13998bf80f4bSopenharmony_ci { 14008bf80f4bSopenharmony_ci int count = 0; 14018bf80f4bSopenharmony_ci ForEachShared(container_, [&](const IObject::Ptr&) { ++count; }); 14028bf80f4bSopenharmony_ci EXPECT_EQ(count, NumDirectChildren); 14038bf80f4bSopenharmony_ci } 14048bf80f4bSopenharmony_ci { 14058bf80f4bSopenharmony_ci int count = 0; 14068bf80f4bSopenharmony_ci IterateShared(container_, [&](const IObject::Ptr&) { 14078bf80f4bSopenharmony_ci ++count; 14088bf80f4bSopenharmony_ci return true; 14098bf80f4bSopenharmony_ci }); 14108bf80f4bSopenharmony_ci EXPECT_EQ(count, NumDirectChildren); 14118bf80f4bSopenharmony_ci } 14128bf80f4bSopenharmony_ci} 14138bf80f4bSopenharmony_ci 14148bf80f4bSopenharmony_cistatic std::string BuildTestName(const testing::TestParamInfo<ContainerCommonTest::ParamType>& info) 14158bf80f4bSopenharmony_ci{ 14168bf80f4bSopenharmony_ci return info.param == META_NS::ClassId::TestContainer ? "TestContainer" : "TestFlatContainer"; 14178bf80f4bSopenharmony_ci} 14188bf80f4bSopenharmony_ci 14198bf80f4bSopenharmony_ciINSTANTIATE_TEST_SUITE_P(ContainerTests, ContainerCommonTest, 14208bf80f4bSopenharmony_ci testing::Values(META_NS::ClassId::TestContainer, META_NS::ClassId::TestFlatContainer), BuildTestName); 14218bf80f4bSopenharmony_ci 14228bf80f4bSopenharmony_ciMETA_END_NAMESPACE() 1423