• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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