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