1 /*
2 * Copyright (c) 2021-2022 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 #include "display_manager_proxy.h"
18 #include "mock_window_adapter.h"
19 #include "singleton_mocker.h"
20 #include "window_impl.h"
21
22 using namespace testing;
23 using namespace testing::ext;
24
25 namespace OHOS {
26 namespace Rosen {
27 using Mocker = SingletonMocker<WindowAdapter, MockWindowAdapter>;
28 class WindowEffectTest : public testing::Test {
29 public:
30 static void SetUpTestCase();
31 static void TearDownTestCase();
32 virtual void SetUp() override;
33 virtual void TearDown() override;
34 private:
35 static constexpr uint32_t WAIT_SYNC_IN_NS = 500000;
36 };
SetUpTestCase()37 void WindowEffectTest::SetUpTestCase()
38 {
39 }
40
TearDownTestCase()41 void WindowEffectTest::TearDownTestCase()
42 {
43 }
44
SetUp()45 void WindowEffectTest::SetUp()
46 {
47 }
48
TearDown()49 void WindowEffectTest::TearDown()
50 {
51 usleep(WAIT_SYNC_IN_NS);
52 }
53
54 namespace {
55 /**
56 * @tc.name: WindowEffect01
57 * @tc.desc: set window corner radius
58 * @tc.type: FUNC
59 * @tc.require: issueI5IUGI
60 */
61 HWTEST_F(WindowEffectTest, WindowEffect01, Function | SmallTest | Level2)
62 {
63 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
64 sptr<WindowOption> option = new WindowOption();
65 sptr<WindowImpl> window = new WindowImpl(option);
66 ASSERT_NE(nullptr, window);
67 EXPECT_CALL(m->Mock(), GetSystemConfig(_)).WillOnce(Return(WMError::WM_OK));
68 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
69 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
70
71 ASSERT_EQ(WMError::WM_OK, window->SetCornerRadius(0.0));
72 ASSERT_EQ(WMError::WM_OK, window->SetCornerRadius(16.0));
73 ASSERT_EQ(WMError::WM_OK, window->SetCornerRadius(1000.0));
74 ASSERT_EQ(WMError::WM_OK, window->SetCornerRadius(-1.0));
75
76 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
77 ASSERT_EQ(WMError::WM_OK, window->Destroy());
78 }
79
80 /**
81 * @tc.name: WindowEffect02
82 * @tc.desc: set window shadow radius
83 * @tc.type: FUNC
84 * @tc.require: issueI5IUGI
85 */
86 HWTEST_F(WindowEffectTest, WindowEffect02, Function | SmallTest | Level2)
87 {
88 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
89 sptr<WindowOption> option = new WindowOption();
90 sptr<WindowImpl> window = new WindowImpl(option);
91 ASSERT_NE(nullptr, window);
92 EXPECT_CALL(m->Mock(), GetSystemConfig(_)).WillOnce(Return(WMError::WM_OK));
93 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
94 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
95
96 ASSERT_EQ(WMError::WM_OK, window->SetShadowRadius(0.0));
97 ASSERT_EQ(WMError::WM_OK, window->SetShadowRadius(16.0));
98 ASSERT_EQ(WMError::WM_OK, window->SetShadowRadius(1000.0));
99 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetShadowRadius(-1.0));
100
101 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
102 ASSERT_EQ(WMError::WM_OK, window->Destroy());
103 }
104
105 /**
106 * @tc.name: WindowEffect03
107 * @tc.desc: set window shadow color
108 * @tc.type: FUNC
109 * @tc.require: issueI5IUGI
110 */
111 HWTEST_F(WindowEffectTest, WindowEffect03, Function | SmallTest | Level2)
112 {
113 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
114 sptr<WindowOption> option = new WindowOption();
115 sptr<WindowImpl> window = new WindowImpl(option);
116 ASSERT_NE(nullptr, window);
117 EXPECT_CALL(m->Mock(), GetSystemConfig(_)).WillOnce(Return(WMError::WM_OK));
118 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
119 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
120
121 ASSERT_EQ(WMError::WM_OK, window->SetShadowColor("#FF22EE44"));
122 ASSERT_EQ(WMError::WM_OK, window->SetShadowColor("#22EE44"));
123 ASSERT_EQ(WMError::WM_OK, window->SetShadowColor("#ff22ee44"));
124
125 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetShadowColor("ff22ee44"));
126 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetShadowColor("22ee44"));
127 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetShadowColor("#ppEE44"));
128 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetShadowColor("#eepp44"));
129 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetShadowColor("#ffeePP44"));
130 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetShadowColor("#ff22ee4422"));
131 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetShadowColor("#ff"));
132
133 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
134 ASSERT_EQ(WMError::WM_OK, window->Destroy());
135 }
136
137 /**
138 * @tc.name: WindowEffect04
139 * @tc.desc: set window shadow offset
140 * @tc.type: FUNC
141 * @tc.require: issueI5IUGI
142 */
143 HWTEST_F(WindowEffectTest, WindowEffect04, Function | SmallTest | Level2)
144 {
145 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
146 sptr<WindowOption> option = new WindowOption();
147 sptr<WindowImpl> window = new WindowImpl(option);
148 ASSERT_NE(nullptr, window);
149 EXPECT_CALL(m->Mock(), GetSystemConfig(_)).WillOnce(Return(WMError::WM_OK));
150 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
151 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
152
153 window->SetShadowOffsetX(0.0);
154 window->SetShadowOffsetX(16.0);
155 window->SetShadowOffsetX(1000.0);
156 window->SetShadowOffsetX(-1.0);
157
158 window->SetShadowOffsetY(0.0);
159 window->SetShadowOffsetY(16.0);
160 window->SetShadowOffsetY(1000.0);
161 window->SetShadowOffsetY(-1.0);
162
163 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
164 ASSERT_EQ(WMError::WM_OK, window->Destroy());
165 }
166
167 /**
168 * @tc.name: WindowEffect05
169 * @tc.desc: set window blur radius
170 * @tc.type: FUNC
171 * @tc.require: issueI5IUGI
172 */
173 HWTEST_F(WindowEffectTest, WindowEffect05, Function | SmallTest | Level2)
174 {
175 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
176 sptr<WindowOption> option = new WindowOption();
177 sptr<WindowImpl> window = new WindowImpl(option);
178 ASSERT_NE(nullptr, window);
179 EXPECT_CALL(m->Mock(), GetSystemConfig(_)).WillOnce(Return(WMError::WM_OK));
180 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
181 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
182
183 ASSERT_EQ(WMError::WM_OK, window->SetBlur(0.0));
184 ASSERT_EQ(WMError::WM_OK, window->SetBlur(16.0));
185 ASSERT_EQ(WMError::WM_OK, window->SetBlur(1000.0));
186 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetBlur(-1.0));
187
188 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
189 ASSERT_EQ(WMError::WM_OK, window->Destroy());
190 }
191
192 /**
193 * @tc.name: WindowEffect06
194 * @tc.desc: set window backdrop blur radius
195 * @tc.type: FUNC
196 * @tc.require: issueI5IUGI
197 */
198 HWTEST_F(WindowEffectTest, WindowEffect06, Function | SmallTest | Level2)
199 {
200 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
201 sptr<WindowOption> option = new WindowOption();
202 sptr<WindowImpl> window = new WindowImpl(option);
203 ASSERT_NE(nullptr, window);
204 EXPECT_CALL(m->Mock(), GetSystemConfig(_)).WillOnce(Return(WMError::WM_OK));
205 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
206 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
207
208 ASSERT_EQ(WMError::WM_OK, window->SetBackdropBlur(0.0));
209 ASSERT_EQ(WMError::WM_OK, window->SetBackdropBlur(16.0));
210 ASSERT_EQ(WMError::WM_OK, window->SetBackdropBlur(1000.0));
211 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetBackdropBlur(-1.0));
212
213 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
214 ASSERT_EQ(WMError::WM_OK, window->Destroy());
215 }
216
217 /**
218 * @tc.name: WindowEffect07
219 * @tc.desc: set window backdrop blur style
220 * @tc.type: FUNC
221 * @tc.require: issueI5IUGI
222 */
223 HWTEST_F(WindowEffectTest, WindowEffect07, Function | SmallTest | Level2)
224 {
225 std::unique_ptr<Mocker> m = std::make_unique<Mocker>();
226 sptr<WindowOption> option = new WindowOption();
227 sptr<WindowImpl> window = new WindowImpl(option);
228 ASSERT_NE(nullptr, window);
229 EXPECT_CALL(m->Mock(), GetSystemConfig(_)).WillOnce(Return(WMError::WM_OK));
230 EXPECT_CALL(m->Mock(), CreateWindow(_, _, _, _, _)).Times(1).WillOnce(Return(WMError::WM_OK));
231 ASSERT_EQ(WMError::WM_OK, window->Create(INVALID_WINDOW_ID));
232
233 ASSERT_EQ(WMError::WM_OK, window->SetBackdropBlurStyle(WindowBlurStyle::WINDOW_BLUR_OFF));
234 ASSERT_EQ(WMError::WM_OK, window->SetBackdropBlurStyle(WindowBlurStyle::WINDOW_BLUR_THIN));
235 ASSERT_EQ(WMError::WM_OK, window->SetBackdropBlurStyle(WindowBlurStyle::WINDOW_BLUR_REGULAR));
236 ASSERT_EQ(WMError::WM_OK, window->SetBackdropBlurStyle(WindowBlurStyle::WINDOW_BLUR_THICK));
237
238 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetBackdropBlurStyle(static_cast<WindowBlurStyle>(-1)));
239 ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetBackdropBlurStyle(static_cast<WindowBlurStyle>(5)));
240
241 EXPECT_CALL(m->Mock(), DestroyWindow(_)).Times(1).WillOnce(Return(WMError::WM_OK));
242 ASSERT_EQ(WMError::WM_OK, window->Destroy());
243 }
244 }
245 } // namespace Rosen
246 } // namespace OHOS
247