1 /*
2 * Copyright (c) 2021 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 <gtest/gtest.h>
16 #include "singleton.h"
17 #include <algorithm>
18 #include <iostream>
19 #include <fstream>
20 using namespace testing::ext;
21 using namespace OHOS;
22 using namespace std;
23
24
25 class DelayedSingletonDeclearTest {
26 DECLARE_DELAYED_SINGLETON(DelayedSingletonDeclearTest);
27 public:
GetObjAddr()28 void* GetObjAddr() { return (void*)this; }
29 };
30
~DelayedSingletonDeclearTest()31 DelayedSingletonDeclearTest::~DelayedSingletonDeclearTest() {};
DelayedSingletonDeclearTest()32 DelayedSingletonDeclearTest::DelayedSingletonDeclearTest() {};
33
34 class SingletonDeclearTest {
35 DECLARE_SINGLETON(SingletonDeclearTest);
36 public:
GetObjAddr()37 void* GetObjAddr() { return (void*)this; }
38 };
39
~SingletonDeclearTest()40 SingletonDeclearTest::~SingletonDeclearTest() {};
SingletonDeclearTest()41 SingletonDeclearTest::SingletonDeclearTest() {};
42
43 class SingletonTest: public Singleton<SingletonTest> {
44 public:
GetObjAddr()45 void* GetObjAddr() { return (void*)this; }
46 };
47
48 class DelayedSingletonTest: public DelayedSingleton<DelayedSingletonTest> {
49 public:
GetObjAddr()50 void* GetObjAddr() { return (void*)this; }
51 };
52
53
54 class DelayedRefSingletonDeclearTest {
55 DECLARE_DELAYED_REF_SINGLETON(DelayedRefSingletonDeclearTest);
56 public:
GetObjAddr()57 void* GetObjAddr() { return (void*)this; }
58 };
59
DelayedRefSingletonDeclearTest()60 DelayedRefSingletonDeclearTest::DelayedRefSingletonDeclearTest() {};
~DelayedRefSingletonDeclearTest()61 DelayedRefSingletonDeclearTest::~DelayedRefSingletonDeclearTest() {};
62
63 class DelayedRefSingletonTest: public DelayedRefSingleton<DelayedRefSingletonTest> {
64 public:
GetObjAddr()65 void* GetObjAddr() { return (void*)this; }
66 };
67
68
69 class UtilsSingletonTest : public testing::Test
70 {
71 public :
72 static void SetUpTestCase(void);
73 static void TearDownTestCase(void);
74 void SetUp();
75 void TearDown();
76 };
77
SetUpTestCase(void)78 void UtilsSingletonTest::SetUpTestCase(void)
79 {
80 // step 2: input testsuit setup step
81 }
82
TearDownTestCase(void)83 void UtilsSingletonTest::TearDownTestCase(void)
84 {
85 // step 2: input testsuit teardown step
86 }
87
SetUp(void)88 void UtilsSingletonTest::SetUp(void)
89 {
90 // step 3: input testcase setup step
91 }
92
TearDown(void)93 void UtilsSingletonTest::TearDown(void)
94 {
95 // step 3: input testcase teardown step
96 }
97
98
99 HWTEST_F(UtilsSingletonTest, test_DelayedSingletonDeclearTest, TestSize.Level0)
100 {
101 shared_ptr<DelayedSingletonDeclearTest> sp1 = DelayedSingleton<DelayedSingletonDeclearTest>::GetInstance();
102 EXPECT_EQ(sp1.use_count(), 2);
103 shared_ptr<DelayedSingletonDeclearTest> sp2 = DelayedSingleton<DelayedSingletonDeclearTest>::GetInstance();
104 EXPECT_EQ(sp1->GetObjAddr(), sp2->GetObjAddr());
105 EXPECT_EQ(sp1.get(), sp2.get());
106 EXPECT_EQ(sp2.use_count(), 3);
107 }
108
109
110 HWTEST_F(UtilsSingletonTest, test_SingletonDeclearTest, TestSize.Level0)
111 {
112 SingletonDeclearTest &st1 = Singleton<SingletonDeclearTest>::GetInstance();
113 SingletonDeclearTest &st2 = Singleton<SingletonDeclearTest>::GetInstance();
114 EXPECT_EQ(st1.GetObjAddr(), st2.GetObjAddr());
115 }
116
117
118 HWTEST_F(UtilsSingletonTest, test_SingletonTest, TestSize.Level0)
119 {
120 SingletonTest &st1 = SingletonTest::GetInstance();
121 SingletonTest &st2 = SingletonTest::GetInstance();
122 EXPECT_EQ(st1.GetObjAddr(), st2.GetObjAddr());
123 }
124
125
126 HWTEST_F(UtilsSingletonTest, test_DelayedSingletonTest, TestSize.Level0)
127 {
128 shared_ptr<DelayedSingletonTest> sp1 = DelayedSingletonTest::GetInstance();
129 EXPECT_EQ(sp1.use_count(), 2);
130 shared_ptr<DelayedSingletonTest> sp2 = DelayedSingletonTest::GetInstance();
131 EXPECT_EQ(sp1->GetObjAddr(), sp2->GetObjAddr());
132 EXPECT_EQ(sp1.get(), sp2.get());
133 EXPECT_EQ(sp2.use_count(), 3);
134 }
135
136 HWTEST_F(UtilsSingletonTest, test_DelayedRefSingletonTest, TestSize.Level0)
137 {
138 DelayedRefSingletonTest& p1 = DelayedRefSingletonTest::GetInstance();
139 DelayedRefSingletonTest& p2 = DelayedRefSingletonTest::GetInstance();
140 EXPECT_EQ(p1.GetObjAddr(), p2.GetObjAddr());
141 }
142
143 HWTEST_F(UtilsSingletonTest, test_DelayedRefSingletonDeclearTest, TestSize.Level0)
144 {
145 DelayedRefSingletonDeclearTest& p1 = DelayedRefSingleton<DelayedRefSingletonDeclearTest>::GetInstance();
146 DelayedRefSingletonDeclearTest& p2 = DelayedRefSingleton<DelayedRefSingletonDeclearTest>::GetInstance();
147 EXPECT_EQ(p1.GetObjAddr(), p2.GetObjAddr());
148 }
149
150
151