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()