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/interface/detail/any.h> 208bf80f4bSopenharmony_ci#include <meta/interface/intf_object_registry.h> 218bf80f4bSopenharmony_ci 228bf80f4bSopenharmony_ci#include "src/test_runner.h" 238bf80f4bSopenharmony_ci#include "src/testing_objects.h" 248bf80f4bSopenharmony_ci#include "src/util.h" 258bf80f4bSopenharmony_ci 268bf80f4bSopenharmony_ciusing namespace testing; 278bf80f4bSopenharmony_ciusing namespace testing::ext; 288bf80f4bSopenharmony_ci 298bf80f4bSopenharmony_ciMETA_BEGIN_NAMESPACE() 308bf80f4bSopenharmony_ci 318bf80f4bSopenharmony_ciclass IntfAnyTest : public testing::Test { 328bf80f4bSopenharmony_cipublic: 338bf80f4bSopenharmony_ci static void SetUpTestSuite() 348bf80f4bSopenharmony_ci { 358bf80f4bSopenharmony_ci SetTest(); 368bf80f4bSopenharmony_ci } 378bf80f4bSopenharmony_ci static void TearDownTestSuite() 388bf80f4bSopenharmony_ci { 398bf80f4bSopenharmony_ci ResetTest(); 408bf80f4bSopenharmony_ci } 418bf80f4bSopenharmony_ci void SetUp() override {} 428bf80f4bSopenharmony_ci void TearDown() override {} 438bf80f4bSopenharmony_ci}; 448bf80f4bSopenharmony_ci 458bf80f4bSopenharmony_ci/** 468bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 478bf80f4bSopenharmony_ci * @tc.desc: test BasicCompatibility001 function 488bf80f4bSopenharmony_ci * @tc.type: FUNC 498bf80f4bSopenharmony_ci * @tc.require: I7DMS1 508bf80f4bSopenharmony_ci */ 518bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, BasicCompatibility001, TestSize.Level1) 528bf80f4bSopenharmony_ci{ 538bf80f4bSopenharmony_ci Any<uint32_t> any { 1 }; 548bf80f4bSopenharmony_ci TypeId uid = UidFromType<uint32_t>(); 558bf80f4bSopenharmony_ci EXPECT_THAT(any.GetCompatibleTypes(CompatibilityDirection::BOTH), UnorderedElementsAre(uid)); 568bf80f4bSopenharmony_ci EXPECT_TRUE(IsCompatible(any, uid)); 578bf80f4bSopenharmony_ci EXPECT_TRUE(IsCompatibleWith<uint32_t>(any)); 588bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatible(any, uid)); 598bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatibleWith<uint32_t>(any)); 608bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatible(any, uid)); 618bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<uint32_t>(any)); 628bf80f4bSopenharmony_ci EXPECT_EQ(any.GetTypeId(), uid); 638bf80f4bSopenharmony_ci} 648bf80f4bSopenharmony_ci 658bf80f4bSopenharmony_ci/** 668bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 678bf80f4bSopenharmony_ci * @tc.desc: test SharedPointerCompatibility function 688bf80f4bSopenharmony_ci * @tc.type: FUNC 698bf80f4bSopenharmony_ci * @tc.require: I7DMS1 708bf80f4bSopenharmony_ci */ 718bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, SharedPointerCompatibility, TestSize.Level1) 728bf80f4bSopenharmony_ci{ 738bf80f4bSopenharmony_ci Any<IObject::Ptr> any { CreateTestType<IObject>() }; 748bf80f4bSopenharmony_ci TypeId uid = UidFromType<IObject::Ptr>(); 758bf80f4bSopenharmony_ci EXPECT_THAT(any.GetCompatibleTypes(CompatibilityDirection::BOTH), UnorderedElementsAre(uid, SharedPtrIInterfaceId)); 768bf80f4bSopenharmony_ci EXPECT_THAT(any.GetCompatibleTypes(CompatibilityDirection::SET), UnorderedElementsAre(uid, SharedPtrIInterfaceId)); 778bf80f4bSopenharmony_ci EXPECT_THAT(any.GetCompatibleTypes(CompatibilityDirection::GET), 788bf80f4bSopenharmony_ci UnorderedElementsAre(uid, SharedPtrIInterfaceId, SharedPtrConstIInterfaceId)); 798bf80f4bSopenharmony_ci EXPECT_TRUE(IsCompatible(any, uid)); 808bf80f4bSopenharmony_ci EXPECT_TRUE(IsCompatibleWith<IObject::Ptr>(any)); 818bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatible(any, uid)); 828bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatibleWith<IObject::Ptr>(any)); 838bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatibleWith<SharedPtrIInterface>(any)); 848bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatible(any, uid)); 858bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<IObject::Ptr>(any)); 868bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<SharedPtrIInterface>(any)); 878bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<SharedPtrConstIInterface>(any)); 888bf80f4bSopenharmony_ci EXPECT_EQ(any.GetTypeId(), uid); 898bf80f4bSopenharmony_ci 908bf80f4bSopenharmony_ci Any<IObject::ConstPtr> constAny { CreateTestType<IObject>() }; 918bf80f4bSopenharmony_ci EXPECT_FALSE(IsGetCompatibleWith<SharedPtrIInterface>(constAny)); 928bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<SharedPtrConstIInterface>(constAny)); 938bf80f4bSopenharmony_ci} 948bf80f4bSopenharmony_ci 958bf80f4bSopenharmony_ci/** 968bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 978bf80f4bSopenharmony_ci * @tc.desc: test WeakPointerCompatibility function 988bf80f4bSopenharmony_ci * @tc.type: FUNC 998bf80f4bSopenharmony_ci * @tc.require: I7DMS1 1008bf80f4bSopenharmony_ci */ 1018bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, WeakPointerCompatibility, TestSize.Level1) 1028bf80f4bSopenharmony_ci{ 1038bf80f4bSopenharmony_ci IObject::Ptr p = CreateTestType<IObject>(); 1048bf80f4bSopenharmony_ci Any<IObject::WeakPtr> any { p }; 1058bf80f4bSopenharmony_ci TypeId uid = UidFromType<IObject::WeakPtr>(); 1068bf80f4bSopenharmony_ci EXPECT_THAT(any.GetCompatibleTypes(CompatibilityDirection::BOTH), 1078bf80f4bSopenharmony_ci UnorderedElementsAre(uid, SharedPtrIInterfaceId, WeakPtrIInterfaceId)); 1088bf80f4bSopenharmony_ci EXPECT_THAT(any.GetCompatibleTypes(CompatibilityDirection::SET), 1098bf80f4bSopenharmony_ci UnorderedElementsAre(uid, SharedPtrIInterfaceId, WeakPtrIInterfaceId)); 1108bf80f4bSopenharmony_ci EXPECT_THAT(any.GetCompatibleTypes(CompatibilityDirection::GET), 1118bf80f4bSopenharmony_ci UnorderedElementsAre( 1128bf80f4bSopenharmony_ci uid, SharedPtrIInterfaceId, SharedPtrConstIInterfaceId, WeakPtrIInterfaceId, WeakPtrConstIInterfaceId)); 1138bf80f4bSopenharmony_ci EXPECT_TRUE(IsCompatible(any, uid)); 1148bf80f4bSopenharmony_ci EXPECT_TRUE(IsCompatibleWith<IObject::WeakPtr>(any)); 1158bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatible(any, uid)); 1168bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatibleWith<IObject::WeakPtr>(any)); 1178bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatibleWith<SharedPtrIInterface>(any)); 1188bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatibleWith<WeakPtrIInterface>(any)); 1198bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatible(any, uid)); 1208bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<IObject::WeakPtr>(any)); 1218bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<SharedPtrIInterface>(any)); 1228bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<SharedPtrConstIInterface>(any)); 1238bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<WeakPtrIInterface>(any)); 1248bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<WeakPtrConstIInterface>(any)); 1258bf80f4bSopenharmony_ci EXPECT_EQ(any.GetTypeId(), uid); 1268bf80f4bSopenharmony_ci} 1278bf80f4bSopenharmony_ci 1288bf80f4bSopenharmony_ci/** 1298bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 1308bf80f4bSopenharmony_ci * @tc.desc: test GetSet001 function 1318bf80f4bSopenharmony_ci * @tc.type: FUNC 1328bf80f4bSopenharmony_ci * @tc.require: I7DMS1 1338bf80f4bSopenharmony_ci */ 1348bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, GetSet001, TestSize.Level1) 1358bf80f4bSopenharmony_ci{ 1368bf80f4bSopenharmony_ci Any<uint32_t> any { 1 }; 1378bf80f4bSopenharmony_ci uint32_t v = 0; 1388bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetValue(v)); 1398bf80f4bSopenharmony_ci EXPECT_EQ(v, 1); 1408bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<uint32_t>(any), 1); 1418bf80f4bSopenharmony_ci 1428bf80f4bSopenharmony_ci EXPECT_TRUE(any.SetValue((uint32_t(2)))); 1438bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<uint32_t>(any), 2); 1448bf80f4bSopenharmony_ci 1458bf80f4bSopenharmony_ci EXPECT_FALSE(any.SetValue(float(3.0f))); 1468bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<float>(any), 0); 1478bf80f4bSopenharmony_ci 1488bf80f4bSopenharmony_ci Any<uint32_t> other; 1498bf80f4bSopenharmony_ci EXPECT_TRUE(other.CopyFrom(any)); 1508bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<uint32_t>(other), 2); 1518bf80f4bSopenharmony_ci 1528bf80f4bSopenharmony_ci auto c1 = other.Clone(false); 1538bf80f4bSopenharmony_ci ASSERT_TRUE(c1); 1548bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<uint32_t>(*c1), 0); 1558bf80f4bSopenharmony_ci auto c2 = other.Clone(true); 1568bf80f4bSopenharmony_ci ASSERT_TRUE(c2); 1578bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<uint32_t>(*c2), 2); 1588bf80f4bSopenharmony_ci 1598bf80f4bSopenharmony_ci Any<float> otherType; 1608bf80f4bSopenharmony_ci EXPECT_FALSE(otherType.CopyFrom(any)); 1618bf80f4bSopenharmony_ci} 1628bf80f4bSopenharmony_ci 1638bf80f4bSopenharmony_ci/** 1648bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 1658bf80f4bSopenharmony_ci * @tc.desc: test GetSetSharedPointer function 1668bf80f4bSopenharmony_ci * @tc.type: FUNC 1678bf80f4bSopenharmony_ci * @tc.require: I7DMS1 1688bf80f4bSopenharmony_ci */ 1698bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, GetSetSharedPointer, TestSize.Level1) 1708bf80f4bSopenharmony_ci{ 1718bf80f4bSopenharmony_ci auto p = CreateTestType<IObject>(); 1728bf80f4bSopenharmony_ci auto p2 = CreateTestType<IObject>(); 1738bf80f4bSopenharmony_ci { 1748bf80f4bSopenharmony_ci Any<IObject::Ptr> any { p }; 1758bf80f4bSopenharmony_ci IObject::Ptr v; 1768bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetValue(v)); 1778bf80f4bSopenharmony_ci EXPECT_EQ(v, p); 1788bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::Ptr>(any), p); 1798bf80f4bSopenharmony_ci EXPECT_TRUE(any.SetValue(interface_pointer_cast<CORE_NS::IInterface>(p2))); 1808bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::Ptr>(any), p2); 1818bf80f4bSopenharmony_ci } 1828bf80f4bSopenharmony_ci { 1838bf80f4bSopenharmony_ci Any<IObject::Ptr> any { p }; 1848bf80f4bSopenharmony_ci SharedPtrIInterface v; 1858bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetValue(v)); 1868bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(v), p); 1878bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(GetValue<SharedPtrIInterface>(any)), p); 1888bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(GetValue<SharedPtrConstIInterface>(any)), p); 1898bf80f4bSopenharmony_ci EXPECT_TRUE(any.SetValue(interface_pointer_cast<CORE_NS::IInterface>(p2))); 1908bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(GetValue<SharedPtrConstIInterface>(any)), p2); 1918bf80f4bSopenharmony_ci } 1928bf80f4bSopenharmony_ci { 1938bf80f4bSopenharmony_ci auto p = CreateTestType<IObject>(); 1948bf80f4bSopenharmony_ci Any<IObject::ConstPtr> constAny { p }; 1958bf80f4bSopenharmony_ci SharedPtrConstIInterface v; 1968bf80f4bSopenharmony_ci EXPECT_TRUE(constAny.GetValue(v)); 1978bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(v), p); 1988bf80f4bSopenharmony_ci EXPECT_NE(interface_pointer_cast<IObject>(GetValue<SharedPtrIInterface>(constAny)), p); 1998bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(GetValue<SharedPtrConstIInterface>(constAny)), p); 2008bf80f4bSopenharmony_ci EXPECT_TRUE(constAny.SetValue(interface_pointer_cast<CORE_NS::IInterface>(p2))); 2018bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(GetValue<SharedPtrConstIInterface>(constAny)), p2); 2028bf80f4bSopenharmony_ci EXPECT_TRUE(constAny.SetValue(interface_pointer_cast<const CORE_NS::IInterface>(p))); 2038bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(GetValue<SharedPtrConstIInterface>(constAny)), p); 2048bf80f4bSopenharmony_ci } 2058bf80f4bSopenharmony_ci} 2068bf80f4bSopenharmony_ci 2078bf80f4bSopenharmony_ci/** 2088bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 2098bf80f4bSopenharmony_ci * @tc.desc: test GetSetWeakPointer function 2108bf80f4bSopenharmony_ci * @tc.type: FUNC 2118bf80f4bSopenharmony_ci * @tc.require: I7DMS1 2128bf80f4bSopenharmony_ci */ 2138bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, GetSetWeakPointer, TestSize.Level1) 2148bf80f4bSopenharmony_ci{ 2158bf80f4bSopenharmony_ci auto p = CreateTestType<IObject>(); 2168bf80f4bSopenharmony_ci auto p2 = CreateTestType<IObject>(); 2178bf80f4bSopenharmony_ci WeakPtrIInterface weak = interface_pointer_cast<CORE_NS::IInterface>(p2); 2188bf80f4bSopenharmony_ci 2198bf80f4bSopenharmony_ci { 2208bf80f4bSopenharmony_ci Any<IObject::WeakPtr> any { p }; 2218bf80f4bSopenharmony_ci IObject::WeakPtr v; 2228bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetValue(v)); 2238bf80f4bSopenharmony_ci EXPECT_EQ(v.lock(), p); 2248bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::WeakPtr>(any).lock(), p); 2258bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(GetValue<WeakPtrIInterface>(any)), p); 2268bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(GetValue<WeakPtrConstIInterface>(any)), p); 2278bf80f4bSopenharmony_ci EXPECT_TRUE(any.SetValue(weak)); 2288bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::WeakPtr>(any).lock(), p2); 2298bf80f4bSopenharmony_ci } 2308bf80f4bSopenharmony_ci { 2318bf80f4bSopenharmony_ci Any<IObject::WeakPtr> any { p }; 2328bf80f4bSopenharmony_ci SharedPtrIInterface v; 2338bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetValue(v)); 2348bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(v), p); 2358bf80f4bSopenharmony_ci EXPECT_EQ(interface_pointer_cast<IObject>(GetValue<SharedPtrIInterface>(any)), p); 2368bf80f4bSopenharmony_ci } 2378bf80f4bSopenharmony_ci} 2388bf80f4bSopenharmony_ci 2398bf80f4bSopenharmony_ci/** 2408bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 2418bf80f4bSopenharmony_ci * @tc.desc: test PtrCopyFrom function 2428bf80f4bSopenharmony_ci * @tc.type: FUNC 2438bf80f4bSopenharmony_ci * @tc.require: I7DMS1 2448bf80f4bSopenharmony_ci */ 2458bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, PtrCopyFrom, TestSize.Level1) 2468bf80f4bSopenharmony_ci{ 2478bf80f4bSopenharmony_ci auto p1 = CreateTestType<IObject>(); 2488bf80f4bSopenharmony_ci auto p2 = CreateTestType<IObject>(); 2498bf80f4bSopenharmony_ci { 2508bf80f4bSopenharmony_ci Any<IObject::Ptr> any { p1 }; 2518bf80f4bSopenharmony_ci Any<IObject::Ptr> source { p2 }; 2528bf80f4bSopenharmony_ci EXPECT_TRUE(any.CopyFrom(source)); 2538bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::Ptr>(any), p2); 2548bf80f4bSopenharmony_ci } 2558bf80f4bSopenharmony_ci { 2568bf80f4bSopenharmony_ci Any<IObject::Ptr> any { p1 }; 2578bf80f4bSopenharmony_ci Any<SharedPtrIInterface> source { interface_pointer_cast<CORE_NS::IInterface>(p2) }; 2588bf80f4bSopenharmony_ci EXPECT_TRUE(any.CopyFrom(source)); 2598bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::Ptr>(any), p2); 2608bf80f4bSopenharmony_ci } 2618bf80f4bSopenharmony_ci { 2628bf80f4bSopenharmony_ci Any<IObject::Ptr> any { p1 }; 2638bf80f4bSopenharmony_ci Any<ITestType::Ptr> source { interface_pointer_cast<ITestType>(p2) }; 2648bf80f4bSopenharmony_ci EXPECT_TRUE(any.CopyFrom(source)); 2658bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::Ptr>(any), p2); 2668bf80f4bSopenharmony_ci } 2678bf80f4bSopenharmony_ci { 2688bf80f4bSopenharmony_ci Any<IObject::ConstPtr> any { p1 }; 2698bf80f4bSopenharmony_ci Any<IObject::Ptr> source { p2 }; 2708bf80f4bSopenharmony_ci EXPECT_TRUE(any.CopyFrom(source)); 2718bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::ConstPtr>(any), p2); 2728bf80f4bSopenharmony_ci } 2738bf80f4bSopenharmony_ci { 2748bf80f4bSopenharmony_ci Any<IObject::ConstPtr> any { p1 }; 2758bf80f4bSopenharmony_ci Any<SharedPtrIInterface> source { interface_pointer_cast<CORE_NS::IInterface>(p2) }; 2768bf80f4bSopenharmony_ci EXPECT_TRUE(any.CopyFrom(source)); 2778bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::ConstPtr>(any), p2); 2788bf80f4bSopenharmony_ci } 2798bf80f4bSopenharmony_ci { 2808bf80f4bSopenharmony_ci Any<IObject::ConstPtr> any { p1 }; 2818bf80f4bSopenharmony_ci Any<ITestType::Ptr> source { interface_pointer_cast<ITestType>(p2) }; 2828bf80f4bSopenharmony_ci EXPECT_TRUE(any.CopyFrom(source)); 2838bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::ConstPtr>(any), p2); 2848bf80f4bSopenharmony_ci } 2858bf80f4bSopenharmony_ci { 2868bf80f4bSopenharmony_ci Any<IObject::ConstPtr> any { p1 }; 2878bf80f4bSopenharmony_ci Any<IObject::ConstPtr> source { p2 }; 2888bf80f4bSopenharmony_ci EXPECT_TRUE(any.CopyFrom(source)); 2898bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::ConstPtr>(any), p2); 2908bf80f4bSopenharmony_ci } 2918bf80f4bSopenharmony_ci { 2928bf80f4bSopenharmony_ci Any<IObject::ConstPtr> any { p1 }; 2938bf80f4bSopenharmony_ci Any<SharedPtrConstIInterface> source { interface_pointer_cast<CORE_NS::IInterface>(p2) }; 2948bf80f4bSopenharmony_ci EXPECT_TRUE(any.CopyFrom(source)); 2958bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::ConstPtr>(any), p2); 2968bf80f4bSopenharmony_ci } 2978bf80f4bSopenharmony_ci { 2988bf80f4bSopenharmony_ci Any<IObject::ConstPtr> any { p1 }; 2998bf80f4bSopenharmony_ci Any<ITestType::ConstPtr> source { interface_pointer_cast<ITestType>(p2) }; 3008bf80f4bSopenharmony_ci EXPECT_TRUE(any.CopyFrom(source)); 3018bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<IObject::ConstPtr>(any), p2); 3028bf80f4bSopenharmony_ci } 3038bf80f4bSopenharmony_ci} 3048bf80f4bSopenharmony_ci 3058bf80f4bSopenharmony_ci/** 3068bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 3078bf80f4bSopenharmony_ci * @tc.desc: test BasicCompatibility002 function 3088bf80f4bSopenharmony_ci * @tc.type: FUNC 3098bf80f4bSopenharmony_ci * @tc.require: I7DMS1 3108bf80f4bSopenharmony_ci */ 3118bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, BasicCompatibility002, TestSize.Level1) 3128bf80f4bSopenharmony_ci{ 3138bf80f4bSopenharmony_ci ArrayAny<uint32_t> any { 1, 2, 3 }; 3148bf80f4bSopenharmony_ci using Type = uint32_t[]; 3158bf80f4bSopenharmony_ci 3168bf80f4bSopenharmony_ci TypeId arrayUid = ArrayUidFromType<uint32_t>(); 3178bf80f4bSopenharmony_ci TypeId vectorUid = UidFromType<BASE_NS::vector<uint32_t>>(); 3188bf80f4bSopenharmony_ci 3198bf80f4bSopenharmony_ci EXPECT_THAT(any.GetCompatibleTypes(CompatibilityDirection::BOTH), UnorderedElementsAre(arrayUid, vectorUid)); 3208bf80f4bSopenharmony_ci EXPECT_TRUE(IsCompatible(any, arrayUid)); 3218bf80f4bSopenharmony_ci EXPECT_TRUE(IsCompatibleWith<Type>(any)); 3228bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatible(any, arrayUid)); 3238bf80f4bSopenharmony_ci EXPECT_TRUE(IsSetCompatibleWith<Type>(any)); 3248bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatible(any, arrayUid)); 3258bf80f4bSopenharmony_ci EXPECT_TRUE(IsGetCompatibleWith<Type>(any)); 3268bf80f4bSopenharmony_ci EXPECT_EQ(any.GetTypeId(), arrayUid); 3278bf80f4bSopenharmony_ci} 3288bf80f4bSopenharmony_ci 3298bf80f4bSopenharmony_ci/** 3308bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 3318bf80f4bSopenharmony_ci * @tc.desc: test GetSetTypes function 3328bf80f4bSopenharmony_ci * @tc.type: FUNC 3338bf80f4bSopenharmony_ci * @tc.require: I7DMS1 3348bf80f4bSopenharmony_ci */ 3358bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, GetSetTypes, TestSize.Level1) 3368bf80f4bSopenharmony_ci{ 3378bf80f4bSopenharmony_ci static constexpr auto valueCount = 3; 3388bf80f4bSopenharmony_ci const uint32_t valuesArr[valueCount] = { 1, 2, 3 }; 3398bf80f4bSopenharmony_ci const BASE_NS::vector<uint32_t> vectorArr = { 4, 5, 6 }; 3408bf80f4bSopenharmony_ci 3418bf80f4bSopenharmony_ci auto arrayUid = UidFromType<uint32_t[]>(); 3428bf80f4bSopenharmony_ci auto vectorUid = UidFromType<BASE_NS::vector<uint32_t>>(); 3438bf80f4bSopenharmony_ci 3448bf80f4bSopenharmony_ci ArrayAny<uint32_t> any { valuesArr }; 3458bf80f4bSopenharmony_ci 3468bf80f4bSopenharmony_ci uint32_t values[valueCount]; 3478bf80f4bSopenharmony_ci auto valuesSize = sizeof(uint32_t) * valueCount; 3488bf80f4bSopenharmony_ci 3498bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetData(arrayUid, values, valuesSize)); 3508bf80f4bSopenharmony_ci EXPECT_THAT(values, ::ElementsAreArray(valuesArr)); 3518bf80f4bSopenharmony_ci 3528bf80f4bSopenharmony_ci BASE_NS::vector<uint32_t> valuesVec; 3538bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetData(vectorUid, &valuesVec, sizeof(valuesVec))); 3548bf80f4bSopenharmony_ci EXPECT_THAT(values, ::ElementsAreArray(valuesArr)); 3558bf80f4bSopenharmony_ci 3568bf80f4bSopenharmony_ci EXPECT_TRUE(any.SetData(vectorUid, &vectorArr, sizeof(vectorArr))); 3578bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetData(arrayUid, values, valuesSize)); 3588bf80f4bSopenharmony_ci EXPECT_THAT(values, ::ElementsAreArray(vectorArr)); 3598bf80f4bSopenharmony_ci 3608bf80f4bSopenharmony_ci EXPECT_TRUE(any.SetData(arrayUid, vectorArr.data(), sizeof(uint32_t) * vectorArr.size())); 3618bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetData(arrayUid, values, valuesSize)); 3628bf80f4bSopenharmony_ci EXPECT_THAT(values, ::ElementsAreArray(vectorArr)); 3638bf80f4bSopenharmony_ci} 3648bf80f4bSopenharmony_ci 3658bf80f4bSopenharmony_ci/** 3668bf80f4bSopenharmony_ci * @tc.name: IntfAnyTest 3678bf80f4bSopenharmony_ci * @tc.desc: test GetSet002 function 3688bf80f4bSopenharmony_ci * @tc.type: FUNC 3698bf80f4bSopenharmony_ci * @tc.require: I7DMS1 3708bf80f4bSopenharmony_ci */ 3718bf80f4bSopenharmony_ciHWTEST_F(IntfAnyTest, GetSet002, TestSize.Level1) 3728bf80f4bSopenharmony_ci{ 3738bf80f4bSopenharmony_ci using ArrayType = BASE_NS::vector<uint32_t>; 3748bf80f4bSopenharmony_ci 3758bf80f4bSopenharmony_ci BASE_NS::vector<uint32_t> vv { 1 }; 3768bf80f4bSopenharmony_ci ArrayAny<uint32_t> any { vv }; 3778bf80f4bSopenharmony_ci uint32_t v = 0; 3788bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetValueAt(0, v)); 3798bf80f4bSopenharmony_ci EXPECT_EQ(v, 1); 3808bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<BASE_NS::vector<uint32_t>>(any), vv); 3818bf80f4bSopenharmony_ci 3828bf80f4bSopenharmony_ci EXPECT_FALSE(any.GetValue(1, v)); 3838bf80f4bSopenharmony_ci EXPECT_FALSE(any.SetValue(1, v)); 3848bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<ArrayType>(any), vv); 3858bf80f4bSopenharmony_ci 3868bf80f4bSopenharmony_ci EXPECT_TRUE(any.SetValueAt(0, static_cast<uint32_t>(42))); 3878bf80f4bSopenharmony_ci EXPECT_TRUE(any.GetValueAt(0, v)); 3888bf80f4bSopenharmony_ci EXPECT_EQ(v, 42); 3898bf80f4bSopenharmony_ci 3908bf80f4bSopenharmony_ci vv = { 1, 2 }; 3918bf80f4bSopenharmony_ci EXPECT_TRUE(any.SetValue(vv)); 3928bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<ArrayType>(any), vv); 3938bf80f4bSopenharmony_ci 3948bf80f4bSopenharmony_ci EXPECT_FALSE(any.SetValue(3.0f)); 3958bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<ArrayType>(any), vv); 3968bf80f4bSopenharmony_ci 3978bf80f4bSopenharmony_ci ArrayAny<uint32_t> other; 3988bf80f4bSopenharmony_ci EXPECT_TRUE(other.CopyFrom(any)); 3998bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<ArrayType>(other), vv); 4008bf80f4bSopenharmony_ci 4018bf80f4bSopenharmony_ci auto c1 = interface_pointer_cast<IArrayAny>(other.Clone(false)); 4028bf80f4bSopenharmony_ci ASSERT_TRUE(c1); 4038bf80f4bSopenharmony_ci EXPECT_EQ(c1->GetSize(), 0); 4048bf80f4bSopenharmony_ci auto c2 = interface_pointer_cast<IArrayAny>(other.Clone(true)); 4058bf80f4bSopenharmony_ci ASSERT_TRUE(c2); 4068bf80f4bSopenharmony_ci EXPECT_EQ(GetValue<ArrayType>(*c2), vv); 4078bf80f4bSopenharmony_ci 4088bf80f4bSopenharmony_ci ArrayAny<float> otherType; 4098bf80f4bSopenharmony_ci EXPECT_FALSE(otherType.CopyFrom(any)); 4108bf80f4bSopenharmony_ci} 4118bf80f4bSopenharmony_ci 4128bf80f4bSopenharmony_ciMETA_END_NAMESPACE()