• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "TestRunner.h"
16 
17 #include <gmock/gmock.h>
18 #include <gtest/gtest.h>
19 
20 #include <meta/ext/metadata_helpers.h>
21 #include <meta/ext/object_fwd.h>
22 #include <meta/interface/intf_attach.h>
23 #include <meta/interface/intf_derived.h>
24 #include <meta/interface/intf_object.h>
25 #include <meta/interface/intf_object_registry.h>
26 
27 META_BEGIN_NAMESPACE()
28 
29 using namespace ::testing;
30 using namespace testing::ext;
31 
32 META_REGISTER_CLASS(BaseObjectDerived, "ecc59f20-2bac-4521-8fbe-18d02cfa2ddf", META_NS::ObjectCategoryBits::NO_CATEGORY)
33 META_REGISTER_CLASS(MetaObjectDerived, "9e29e701-a3c6-439f-be85-e2d3106fcb4e", META_NS::ObjectCategoryBits::NO_CATEGORY)
34 META_REGISTER_CLASS(ObjectDerived, "aabee314-238c-4263-b295-8139bde9933d", META_NS::ObjectCategoryBits::NO_CATEGORY)
35 
36 class BaseObjectDerived final : public META_NS::BaseObjectFwd {
37     META_OBJECT(BaseObjectDerived, ClassId::BaseObjectDerived, BaseObjectFwd)
38 };
39 
40 class MetaObjectDerived final : public META_NS::ObjectFwd {
41     META_OBJECT(MetaObjectDerived, ClassId::MetaObjectDerived, ObjectFwd)
42 };
43 
44 class ObjectDerived final : public META_NS::ObjectFwd {
45     META_OBJECT(ObjectDerived, ClassId::ObjectDerived, ObjectFwd)
46 };
47 
48 class BaseObjectTest : public ::testing::Test {
49 public:
SetUpTestSuite()50     static void SetUpTestSuite()
51     {
52         SetTest();
53         RegisterObjectType<BaseObjectDerived>();
54         RegisterObjectType<MetaObjectDerived>();
55         RegisterObjectType<ObjectDerived>();
56     }
TearDownTestSuite()57     static void TearDownTestSuite()
58     {
59         UnregisterObjectType<ObjectDerived>();
60         UnregisterObjectType<MetaObjectDerived>();
61         UnregisterObjectType<BaseObjectDerived>();
62         TearDownTest();
63     }
64 
SetUp()65     void SetUp() override {}
TearDown()66     void TearDown() override {}
67 
68 protected:
69     // ClassId::BaseObject interfaces
70     const BASE_NS::vector<BASE_NS::Uid> BASE_OBJECT_INTERFACES { IObject::UID, IObjectInstance::UID, IObjectFlags::UID,
71         IDerived::UID, ILifecycle::UID, IStaticMetadata::UID };
72     const BASE_NS::vector<BASE_NS::Uid> OBJECT_INTERFACES { IMetadata::UID, IOwner::UID, IAttach::UID };
73 
CheckInterface(const IObject::ConstPtr & object,BASE_NS::Uid uid,bool implements)74     void CheckInterface(const IObject::ConstPtr& object, BASE_NS::Uid uid, bool implements)
75     {
76         ASSERT_NE(object, nullptr);
77         if (implements) {
78             EXPECT_NE(object->GetInterface(uid), nullptr) << "uid: " << BASE_NS::to_string(uid).c_str();
79             EXPECT_THAT(object->GetInterfaces(), Contains(uid)) << "uid: " << BASE_NS::to_string(uid).c_str();
80         } else {
81             EXPECT_EQ(object->GetInterface(uid), nullptr) << "uid: " << BASE_NS::to_string(uid).c_str();
82             EXPECT_THAT(object->GetInterfaces(), Not(Contains(uid))) << "uid: " << BASE_NS::to_string(uid).c_str();
83         }
84     }
85 
CheckInterfaces(const IObject::ConstPtr & object,bool implements,const BASE_NS::vector<BASE_NS::Uid> & uids)86     void CheckInterfaces(const IObject::ConstPtr& object, bool implements, const BASE_NS::vector<BASE_NS::Uid>& uids)
87     {
88         for (const auto& uid : uids) {
89             CheckInterface(object, uid, implements);
90         }
91     }
92 };
93 
94 HWTEST_F(BaseObjectTest, BaseObject, TestSize.Level1)
95 {
96     auto object = GetObjectRegistry().Create(META_NS::ClassId::BaseObject);
97     ASSERT_NE(object, nullptr);
98     CheckInterfaces(object, true, BASE_OBJECT_INTERFACES);
99     CheckInterfaces(object, false, OBJECT_INTERFACES);
100     EXPECT_THAT(object->GetInterfaces(), SizeIs(BASE_OBJECT_INTERFACES.size()));
101 }
102 
103 HWTEST_F(BaseObjectTest, Object, TestSize.Level1)
104 {
105     auto object = GetObjectRegistry().Create(META_NS::ClassId::Object);
106     ASSERT_NE(object, nullptr);
107     CheckInterfaces(object, true, BASE_OBJECT_INTERFACES);
108     CheckInterfaces(object, true, OBJECT_INTERFACES);
109     EXPECT_THAT(object->GetInterfaces(), SizeIs(BASE_OBJECT_INTERFACES.size() + OBJECT_INTERFACES.size()));
110 }
111 
112 HWTEST_F(BaseObjectTest, DeriveBaseObject, TestSize.Level1)
113 {
114     auto object = GetObjectRegistry().Create(ClassId::BaseObjectDerived);
115     ASSERT_NE(object, nullptr);
116     CheckInterfaces(object, true, BASE_OBJECT_INTERFACES);
117     CheckInterfaces(object, false, OBJECT_INTERFACES);
118     EXPECT_THAT(object->GetInterfaces(), SizeIs(BASE_OBJECT_INTERFACES.size()));
119     EXPECT_EQ(GetBaseClass(object), META_NS::ClassId::BaseObject);
120 }
121 
122 HWTEST_F(BaseObjectTest, DeriveObject, TestSize.Level1)
123 {
124     auto object = GetObjectRegistry().Create(ClassId::ObjectDerived);
125     ASSERT_NE(object, nullptr);
126     CheckInterfaces(object, true, BASE_OBJECT_INTERFACES);
127     CheckInterfaces(object, true, OBJECT_INTERFACES);
128     EXPECT_THAT(object->GetInterfaces(), SizeIs(BASE_OBJECT_INTERFACES.size() + OBJECT_INTERFACES.size()));
129     EXPECT_EQ(GetBaseClass(object), META_NS::ClassId::Object);
130 }
131 
132 META_END_NAMESPACE()
133