• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <gtest/gtest.h>
16 #include "ability_context_impl.h"
17 #include "window.h"
18 #include "window_manager.h"
19 #include "window_option.h"
20 #include "window_scene.h"
21 #include "wm_common.h"
22 
23 using namespace testing;
24 using namespace testing::ext;
25 
26 namespace OHOS {
27 namespace Rosen {
28 class WindowDialogWindowTest : public testing::Test {
29 public:
30     static void SetUpTestCase();
31     static void TearDownTestCase();
32     virtual void SetUp() override;
33     virtual void TearDown() override;
34 
35     static inline std::shared_ptr<AbilityRuntime::AbilityContext> abilityContext_ = nullptr;
36 };
37 
SetUpTestCase()38 void WindowDialogWindowTest::SetUpTestCase()
39 {
40 }
41 
TearDownTestCase()42 void WindowDialogWindowTest::TearDownTestCase()
43 {
44 }
45 
SetUp()46 void WindowDialogWindowTest::SetUp()
47 {
48 }
49 
TearDown()50 void WindowDialogWindowTest::TearDown()
51 {
52 }
53 
CreateWindowScene()54 static sptr<WindowScene> CreateWindowScene()
55 {
56     sptr<IWindowLifeCycle> listener = nullptr;
57     WindowDialogWindowTest::abilityContext_ = std::make_shared<AbilityRuntime::AbilityContextImpl>();
58 
59     sptr<WindowScene> scene = new WindowScene();
60     scene->Init(0, WindowDialogWindowTest::abilityContext_, listener);
61     return scene;
62 }
63 
CreateDialogWindow(sptr<WindowScene> scene,WindowType type,Rect rect,std::string name="")64 static sptr<Window> CreateDialogWindow(sptr<WindowScene> scene, WindowType type, Rect rect, std::string name = "")
65 {
66     sptr<WindowOption> option = new WindowOption();
67     option->SetWindowType(type);
68     option->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
69     option->SetWindowRect(rect);
70 
71     static int cnt = 0;
72     std::string winName = (name == "") ? "DialogWindowTest" + std::to_string(cnt++) : name;
73 
74     return Window::Create(winName, option, scene->GetMainWindow()->GetContext());
75 }
76 
77 /**
78  * @tc.name: dialogWindow01
79  * @tc.desc: FullScreen Main Window + Floating dialogWindow
80  * @tc.type: FUNC
81  * @tc.require: issueI5GKWZ
82  */
83 HWTEST_F(WindowDialogWindowTest, DialogWindow01, Function | MediumTest | Level2)
84 {
85     sptr<WindowScene> scene = CreateWindowScene();
86 
87     struct Rect rect = {0, 0, 100, 200};
88     sptr<Window> dialogWindow = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect);
89     ASSERT_NE(nullptr, dialogWindow);
90 
91     ASSERT_EQ(WMError::WM_OK, scene->GoForeground());
92     ASSERT_EQ(WMError::WM_OK, dialogWindow->Show());
93 
94     ASSERT_EQ(WMError::WM_OK, dialogWindow->Hide());
95     ASSERT_EQ(WMError::WM_OK, scene->GoBackground());
96 
97     dialogWindow->Destroy();
98     scene->GoDestroy();
99 }
100 
101 /**
102  * @tc.name: dialogWindow02
103  * @tc.desc: FullScreen Main Window + 2 dialogWindow
104  * @tc.type: FUNC
105  * @tc.require: issueI5GKWZ
106  */
107 HWTEST_F(WindowDialogWindowTest, DialogWindow02, Function | MediumTest | Level2)
108 {
109     sptr<WindowScene> scene = CreateWindowScene();
110 
111     struct Rect rect = {0, 0, 100, 200};
112     sptr<Window> dialogWindow0 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect);
113     ASSERT_NE(nullptr, dialogWindow0);
114 
115     sptr<Window> dialogWindow1 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect);
116     ASSERT_EQ(nullptr, dialogWindow1);
117 
118     ASSERT_EQ(WMError::WM_OK, scene->GoForeground());
119     ASSERT_EQ(WMError::WM_OK, dialogWindow0->Show());
120 
121     ASSERT_EQ(WMError::WM_OK, dialogWindow0->Hide());
122     ASSERT_EQ(WMError::WM_OK, scene->GoBackground());
123 
124     dialogWindow0->Destroy();
125     scene->GoDestroy();
126 }
127 
128 /**
129  * @tc.name: dialogWindow03
130  * @tc.desc: FullScreen Main Window + 2 dialogWindow with the same name
131  * @tc.type: FUNC
132  * @tc.require: issueI5GKWZ
133  */
134 HWTEST_F(WindowDialogWindowTest, DialogWindow03, Function | MediumTest | Level2)
135 {
136     sptr<WindowScene> scene = CreateWindowScene();
137 
138     struct Rect rect = {0, 0, 100, 200};
139     sptr<Window> dialogWindow0 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect, "dialog0");
140     sptr<Window> dialogWindow1 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect, "dialog0");
141     ASSERT_NE(nullptr, dialogWindow0);
142     ASSERT_EQ(nullptr, dialogWindow1);
143 
144     ASSERT_EQ(WMError::WM_OK, scene->GoForeground());
145     ASSERT_EQ(WMError::WM_OK, dialogWindow0->Show());
146 
147     ASSERT_EQ(WMError::WM_OK, dialogWindow0->Hide());
148     ASSERT_EQ(WMError::WM_OK, scene->GoBackground());
149 
150     dialogWindow0->Destroy();
151     scene->GoDestroy();
152 }
153 
154 /**
155  * @tc.name: dialogWindow04
156  * @tc.desc: FullScreen Main Window + 2 dialogWindow with the same name but one create after another destroyed
157  * @tc.type: FUNC
158  * @tc.require: issueI5GKWZ
159  */
160 HWTEST_F(WindowDialogWindowTest, DialogWindow04, Function | MediumTest | Level2)
161 {
162     sptr<WindowScene> scene = CreateWindowScene();
163     ASSERT_EQ(WMError::WM_OK, scene->GoForeground());
164 
165     struct Rect rect = {0, 0, 100, 200};
166     sptr<Window> dialogWindow0 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect, "dialog0");
167     ASSERT_NE(nullptr, dialogWindow0);
168     ASSERT_EQ(WMError::WM_OK, dialogWindow0->Show());
169     ASSERT_EQ(WMError::WM_OK, dialogWindow0->Destroy());
170 
171 
172     sptr<Window> dialogWindow1 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect, "dialog0");
173     ASSERT_NE(nullptr, dialogWindow1);
174     ASSERT_EQ(WMError::WM_OK, dialogWindow1->Show());
175     ASSERT_EQ(WMError::WM_OK, dialogWindow1->Destroy());
176 
177     ASSERT_EQ(WMError::WM_OK, scene->GoBackground());
178     scene->GoDestroy();
179 }
180 
181 /**
182  * @tc.name: dialogWindow05
183  * @tc.desc: FullScreen Main Window + dialogWindow & MainWindow First GoBackground
184  * @tc.type: FUNC
185  * @tc.require: issueI5GKWZ
186  */
187 HWTEST_F(WindowDialogWindowTest, DialogWindow05, Function | MediumTest | Level2)
188 {
189     sptr<WindowScene> scene = CreateWindowScene();
190 
191     struct Rect rect = {0, 0, 100, 200};
192     sptr<Window> dialogWindow = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect);
193     ASSERT_NE(nullptr, dialogWindow);
194 
195     ASSERT_EQ(WMError::WM_OK, scene->GoForeground());
196     ASSERT_EQ(WMError::WM_OK, dialogWindow->Show());
197 
198     ASSERT_EQ(WMError::WM_OK, scene->GoBackground());
199     ASSERT_EQ(WMError::WM_OK, dialogWindow->Hide());
200 
201     dialogWindow->Destroy();
202     scene->GoDestroy();
203 }
204 
205 /**
206  * @tc.name: dialogWindow06
207  * @tc.desc: FullScreen Main Window + dialogWindow & first destroy dialogWindow, then destroy MainWindow
208  * @tc.type: FUNC
209  * @tc.require: issueI5GKWZ
210  */
211 HWTEST_F(WindowDialogWindowTest, DialogWindow06, Function | MediumTest | Level2)
212 {
213     sptr<WindowScene> scene = CreateWindowScene();
214 
215     struct Rect rect = {0, 0, 100, 200};
216     sptr<Window> dialogWindow = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect);
217     ASSERT_NE(nullptr, dialogWindow);
218 
219     ASSERT_EQ(WMError::WM_OK, scene->GoForeground());
220     ASSERT_EQ(WMError::WM_OK, dialogWindow->Show());
221 
222     ASSERT_EQ(WMError::WM_OK, dialogWindow->Hide());
223     ASSERT_EQ(WMError::WM_OK, scene->GoBackground());
224 
225     ASSERT_EQ(WMError::WM_OK, dialogWindow->Destroy());
226 
227     dialogWindow->Destroy();
228     scene->GoDestroy();
229 }
230 
231 /**
232  * @tc.name: dialogWindow07
233  * @tc.desc: FullScreen Main Window + dialogWindow & first destroy MainWindow, then destroy dialogWindow
234  * @tc.type: FUNC
235  * @tc.require: issueI5GKWZ
236  */
237 HWTEST_F(WindowDialogWindowTest, DialogWindow07, Function | MediumTest | Level2)
238 {
239     sptr<WindowScene> scene = CreateWindowScene();
240 
241     struct Rect rect = {0, 0, 100, 200};
242     sptr<Window> dialogWindow = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect);
243     ASSERT_NE(nullptr, dialogWindow);
244 
245     ASSERT_EQ(WMError::WM_OK, scene->GoForeground());
246     ASSERT_EQ(WMError::WM_OK, dialogWindow->Show());
247 
248     sptr<Window> mainWindow = scene->GetMainWindow();
249     ASSERT_EQ(WMError::WM_OK, mainWindow->Destroy());
250     ASSERT_EQ(WMError::WM_OK, dialogWindow->Destroy());
251 
252     scene->GoDestroy();
253 }
254 } // namespace Rosen
255 } // namespace OHOS
256