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