1 /*
2  * Copyright (c) 2024 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 
16 #include <gtest/gtest.h>
17 
18 #include "render_state_observer_proxy.h"
19 #define private public
20 #include "render_state_observer_manager.h"
21 #undef private
22 #include "render_state_observer_stub.h"
23 
24 using namespace testing;
25 using namespace testing::ext;
26 
27 int32_t onRenderStateChangedResult = 0;
28 
29 namespace OHOS {
30 namespace AppExecFwk {
31 class MockRenderStateObserver : public RenderStateObserverStub {
32 public:
33     MockRenderStateObserver() = default;
34     virtual ~MockRenderStateObserver() = default;
OnRenderStateChanged(const RenderStateData & renderStateData)35     void OnRenderStateChanged(const RenderStateData &renderStateData) override
36     {
37         onRenderStateChangedResult = 1;
38     }
39 };
40 
41 class RenderStateObserverManagerTest : public testing::Test {
42 public:
43     static void SetUpTestCase();
44     static void TearDownTestCase();
45     void SetUp();
46     void TearDown();
47 };
48 
SetUpTestCase()49 void RenderStateObserverManagerTest::SetUpTestCase()
50 {}
51 
TearDownTestCase()52 void RenderStateObserverManagerTest::TearDownTestCase()
53 {}
54 
SetUp()55 void RenderStateObserverManagerTest::SetUp()
56 {
57     onRenderStateChangedResult = 0;
58 }
59 
TearDown()60 void RenderStateObserverManagerTest::TearDown()
61 {}
62 
63 /**
64  * @tc.name: RegisterRenderStateObserver_0100
65  * @tc.desc: Test regiter nullptr return error.
66  * @tc.type: FUNC
67  */
68 HWTEST_F(RenderStateObserverManagerTest, RegisterRenderStateObserver_0100, TestSize.Level1)
69 {
70     auto manager = std::make_shared<RenderStateObserverManager>();
71     manager->Init();
72     int32_t res = manager->RegisterRenderStateObserver(nullptr);
73     EXPECT_EQ(res, ERR_INVALID_VALUE);
74 }
75 
76 /**
77  * @tc.name: RegisterRenderStateObserver_0200
78  * @tc.desc: Test register observer return OK.
79  * @tc.type: FUNC
80  */
81 HWTEST_F(RenderStateObserverManagerTest, RegisterRenderStateObserver_0200, TestSize.Level1)
82 {
83     auto manager = std::make_shared<RenderStateObserverManager>();
84     manager->Init();
85     sptr<IRenderStateObserver> observer = new MockRenderStateObserver();
86     int32_t res = manager->RegisterRenderStateObserver(observer);
87     EXPECT_EQ(res, ERR_OK);
88 }
89 
90 /**
91  * @tc.name: RegisterRenderStateObserver_0300
92  * @tc.desc: Test handler_ nullptr return error.
93  * @tc.type: FUNC
94  */
95 HWTEST_F(RenderStateObserverManagerTest, RegisterRenderStateObserver_0300, TestSize.Level1)
96 {
97     auto manager = std::make_shared<RenderStateObserverManager>();
98     sptr<IRenderStateObserver> observer = new MockRenderStateObserver();
99     int32_t res = manager->RegisterRenderStateObserver(observer);
100     EXPECT_EQ(res, ERR_INVALID_VALUE);
101 }
102 
103 /**
104  * @tc.name: HandleRegisterRenderStateObserver_0100
105  * @tc.desc: Test handle register.
106  * @tc.type: FUNC
107  */
108 HWTEST_F(RenderStateObserverManagerTest, HandleRegisterRenderStateObserver_0100, TestSize.Level1)
109 {
110     auto manager = std::make_shared<RenderStateObserverManager>();
111     sptr<IRenderStateObserver> observer = new MockRenderStateObserver();
112     manager->HandleRegisterRenderStateObserver(observer);
113     EXPECT_TRUE(manager != nullptr);
114 }
115 
116 /**
117  * @tc.name: HandleUnregisterRenderStateObserver_0100
118  * @tc.desc: Test handle unregister.
119  * @tc.type: FUNC
120  */
121 HWTEST_F(RenderStateObserverManagerTest, HandleUnregisterRenderStateObserver_0100, TestSize.Level1)
122 {
123     auto manager = std::make_shared<RenderStateObserverManager>();
124     sptr<IRenderStateObserver> observer = new MockRenderStateObserver();
125     manager->HandleUnregisterRenderStateObserver(observer);
126     EXPECT_TRUE(manager != nullptr);
127 }
128 
129 /**
130  * @tc.name: UnregisterRenderStateObserver_0100
131  * @tc.desc: Test unregister nullptr return error.
132  * @tc.type: FUNC
133  */
134 HWTEST_F(RenderStateObserverManagerTest, UnregisterRenderStateObserver_0100, TestSize.Level1)
135 {
136     auto manager = std::make_shared<RenderStateObserverManager>();
137     manager->Init();
138     int32_t res = manager->UnregisterRenderStateObserver(nullptr);
139     EXPECT_EQ(res, ERR_INVALID_VALUE);
140 }
141 
142 /**
143  * @tc.name: UnregisterRenderStateObserver_0200
144  * @tc.desc: Test unregister observer return OK.
145  * @tc.type: FUNC
146  */
147 HWTEST_F(RenderStateObserverManagerTest, UnregisterRenderStateObserver_0200, TestSize.Level1)
148 {
149     auto manager = std::make_shared<RenderStateObserverManager>();
150     manager->Init();
151     sptr<IRenderStateObserver> observer = new MockRenderStateObserver();
152     int32_t res = manager->RegisterRenderStateObserver(observer);
153     EXPECT_EQ(res, ERR_OK);
154 }
155 
156 /**
157  * @tc.name: UnregisterRenderStateObserver_0300
158  * @tc.desc: Test unregister handler_ nullptr return error.
159  * @tc.type: FUNC
160  */
161 HWTEST_F(RenderStateObserverManagerTest, UnregisterRenderStateObserver_0300, TestSize.Level1)
162 {
163     auto manager = std::make_shared<RenderStateObserverManager>();
164     sptr<IRenderStateObserver> observer = new MockRenderStateObserver();
165     int32_t res = manager->RegisterRenderStateObserver(observer);
166     EXPECT_EQ(res, ERR_INVALID_VALUE);
167 }
168 
169 /**
170  * @tc.name: OnRenderStateChanged_0100
171  * @tc.desc: Test observer can be handled.
172  * @tc.type: FUNC
173  */
174 HWTEST_F(RenderStateObserverManagerTest, OnRenderStateChanged_0100, TestSize.Level1)
175 {
176     auto manager = std::make_shared<RenderStateObserverManager>();
177     manager->Init();
178     sptr<IRenderStateObserver> observer = new MockRenderStateObserver();
179     manager->RegisterRenderStateObserver(observer);
180     std::shared_ptr<RenderRecord> renderRecord;
181     int res = manager->OnRenderStateChanged(renderRecord, 0);
182     EXPECT_EQ(res, ERR_OK);
183 }
184 
185 /**
186  * @tc.name: OnRenderStateChanged_0200
187  * @tc.desc: Test handle nothing without observer.
188  * @tc.type: FUNC
189  */
190 HWTEST_F(RenderStateObserverManagerTest, OnRenderStateChanged_0200, TestSize.Level1)
191 {
192     auto manager = std::make_shared<RenderStateObserverManager>();
193     manager->Init();
194     std::shared_ptr<RenderRecord> renderRecord;
195     int res = manager->OnRenderStateChanged(renderRecord, 0);
196     EXPECT_EQ(res, ERR_OK);
197     EXPECT_EQ(onRenderStateChangedResult, 0);
198 }
199 
200 /**
201  * @tc.name: OnRenderStateChanged_0300
202  * @tc.desc: Test handle nothing without observer.
203  * @tc.type: FUNC
204  */
205 HWTEST_F(RenderStateObserverManagerTest, OnRenderStateChanged_0300, TestSize.Level1)
206 {
207     auto manager = std::make_shared<RenderStateObserverManager>();
208     std::shared_ptr<RenderRecord> renderRecord;
209     int32_t state = 0;
210     int res = manager->OnRenderStateChanged(renderRecord, state);
211     EXPECT_EQ(res, ERR_INVALID_VALUE);
212     EXPECT_EQ(onRenderStateChangedResult, 0);
213 }
214 
215 /**
216  * @tc.name: HandleOnRenderStateChanged_0100
217  * @tc.desc: Test unregister handler_ nullptr return error.
218  * @tc.type: FUNC
219  */
220 HWTEST_F(RenderStateObserverManagerTest, HandleOnRenderStateChanged_0100, TestSize.Level1)
221 {
222     auto manager = std::make_shared<RenderStateObserverManager>();
223     std::shared_ptr<RenderRecord> renderRecord;
224     int32_t state = 0;
225     manager->HandleOnRenderStateChanged(renderRecord, state);
226     EXPECT_TRUE(manager != nullptr);
227 }
228 
229 /**
230  * @tc.name: OnObserverDied_0100
231  * @tc.desc: Test handle nothing when the observer died.
232  * @tc.type: FUNC
233  */
234 HWTEST_F(RenderStateObserverManagerTest, OnObserverDied_0100, TestSize.Level1)
235 {
236     auto manager = std::make_shared<RenderStateObserverManager>();
237     manager->Init();
238     sptr<IRenderStateObserver> observer = new MockRenderStateObserver();
239     manager->RegisterRenderStateObserver(observer);
240     wptr<IRemoteObject> remote;
241     manager->OnObserverDied(remote);
242     std::shared_ptr<RenderRecord> renderRecord;
243     int res = manager->OnRenderStateChanged(renderRecord, 0);
244     EXPECT_EQ(res, ERR_OK);
245     EXPECT_EQ(onRenderStateChangedResult, 0);
246 }
247 } // namespace AppExecFwk
248 } // namespace OHOS