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