1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License. 5e0dac50fSopenharmony_ci * You may obtain a copy of the License at 6e0dac50fSopenharmony_ci * 7e0dac50fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0dac50fSopenharmony_ci * 9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and 13e0dac50fSopenharmony_ci * limitations under the License. 14e0dac50fSopenharmony_ci */ 15e0dac50fSopenharmony_ci#include <gtest/gtest.h> 16e0dac50fSopenharmony_ci#include "ability_context_impl.h" 17e0dac50fSopenharmony_ci#include "window.h" 18e0dac50fSopenharmony_ci#include "window_manager.h" 19e0dac50fSopenharmony_ci#include "window_option.h" 20e0dac50fSopenharmony_ci#include "window_scene.h" 21e0dac50fSopenharmony_ci#include "wm_common.h" 22e0dac50fSopenharmony_ci 23e0dac50fSopenharmony_ciusing namespace testing; 24e0dac50fSopenharmony_ciusing namespace testing::ext; 25e0dac50fSopenharmony_ci 26e0dac50fSopenharmony_cinamespace OHOS { 27e0dac50fSopenharmony_cinamespace Rosen { 28e0dac50fSopenharmony_ciclass WindowDialogWindowTest : public testing::Test { 29e0dac50fSopenharmony_cipublic: 30e0dac50fSopenharmony_ci static void SetUpTestCase(); 31e0dac50fSopenharmony_ci static void TearDownTestCase(); 32e0dac50fSopenharmony_ci virtual void SetUp() override; 33e0dac50fSopenharmony_ci virtual void TearDown() override; 34e0dac50fSopenharmony_ci 35e0dac50fSopenharmony_ci static inline std::shared_ptr<AbilityRuntime::AbilityContext> abilityContext_ = nullptr; 36e0dac50fSopenharmony_ci}; 37e0dac50fSopenharmony_ci 38e0dac50fSopenharmony_civoid WindowDialogWindowTest::SetUpTestCase() 39e0dac50fSopenharmony_ci{ 40e0dac50fSopenharmony_ci} 41e0dac50fSopenharmony_ci 42e0dac50fSopenharmony_civoid WindowDialogWindowTest::TearDownTestCase() 43e0dac50fSopenharmony_ci{ 44e0dac50fSopenharmony_ci} 45e0dac50fSopenharmony_ci 46e0dac50fSopenharmony_civoid WindowDialogWindowTest::SetUp() 47e0dac50fSopenharmony_ci{ 48e0dac50fSopenharmony_ci} 49e0dac50fSopenharmony_ci 50e0dac50fSopenharmony_civoid WindowDialogWindowTest::TearDown() 51e0dac50fSopenharmony_ci{ 52e0dac50fSopenharmony_ci} 53e0dac50fSopenharmony_ci 54e0dac50fSopenharmony_cistatic sptr<WindowScene> CreateWindowScene() 55e0dac50fSopenharmony_ci{ 56e0dac50fSopenharmony_ci sptr<IWindowLifeCycle> listener = nullptr; 57e0dac50fSopenharmony_ci WindowDialogWindowTest::abilityContext_ = std::make_shared<AbilityRuntime::AbilityContextImpl>(); 58e0dac50fSopenharmony_ci 59e0dac50fSopenharmony_ci sptr<WindowScene> scene = new WindowScene(); 60e0dac50fSopenharmony_ci scene->Init(0, WindowDialogWindowTest::abilityContext_, listener); 61e0dac50fSopenharmony_ci return scene; 62e0dac50fSopenharmony_ci} 63e0dac50fSopenharmony_ci 64e0dac50fSopenharmony_cistatic sptr<Window> CreateDialogWindow(sptr<WindowScene> scene, WindowType type, Rect rect, std::string name = "") 65e0dac50fSopenharmony_ci{ 66e0dac50fSopenharmony_ci sptr<WindowOption> option = new WindowOption(); 67e0dac50fSopenharmony_ci option->SetWindowType(type); 68e0dac50fSopenharmony_ci option->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING); 69e0dac50fSopenharmony_ci option->SetWindowRect(rect); 70e0dac50fSopenharmony_ci 71e0dac50fSopenharmony_ci static int cnt = 0; 72e0dac50fSopenharmony_ci std::string winName = (name == "") ? "DialogWindowTest" + std::to_string(cnt++) : name; 73e0dac50fSopenharmony_ci if (scene->GetMainWindow() == nullptr) { 74e0dac50fSopenharmony_ci return nullptr; 75e0dac50fSopenharmony_ci } 76e0dac50fSopenharmony_ci return Window::Create(winName, option, scene->GetMainWindow()->GetContext()); 77e0dac50fSopenharmony_ci} 78e0dac50fSopenharmony_ci 79e0dac50fSopenharmony_ci/** 80e0dac50fSopenharmony_ci * @tc.name: dialogWindow01 81e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating dialogWindow 82e0dac50fSopenharmony_ci * @tc.type: FUNC 83e0dac50fSopenharmony_ci * @tc.require: issueI5GKWZ 84e0dac50fSopenharmony_ci */ 85e0dac50fSopenharmony_ciHWTEST_F(WindowDialogWindowTest, DialogWindow01, Function | MediumTest | Level2) 86e0dac50fSopenharmony_ci{ 87e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 88e0dac50fSopenharmony_ci 89e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 90e0dac50fSopenharmony_ci sptr<Window> dialogWindow = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect); 91e0dac50fSopenharmony_ci if (dialogWindow == nullptr) { 92e0dac50fSopenharmony_ci return; 93e0dac50fSopenharmony_ci } 94e0dac50fSopenharmony_ci ASSERT_NE(nullptr, dialogWindow); 95e0dac50fSopenharmony_ci 96e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 97e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow->Show()); 98e0dac50fSopenharmony_ci 99e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow->Hide()); 100e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 101e0dac50fSopenharmony_ci 102e0dac50fSopenharmony_ci dialogWindow->Destroy(); 103e0dac50fSopenharmony_ci scene->GoDestroy(); 104e0dac50fSopenharmony_ci} 105e0dac50fSopenharmony_ci 106e0dac50fSopenharmony_ci/** 107e0dac50fSopenharmony_ci * @tc.name: dialogWindow02 108e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + 2 dialogWindow 109e0dac50fSopenharmony_ci * @tc.type: FUNC 110e0dac50fSopenharmony_ci * @tc.require: issueI5GKWZ 111e0dac50fSopenharmony_ci */ 112e0dac50fSopenharmony_ciHWTEST_F(WindowDialogWindowTest, DialogWindow02, Function | MediumTest | Level2) 113e0dac50fSopenharmony_ci{ 114e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 115e0dac50fSopenharmony_ci 116e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 117e0dac50fSopenharmony_ci sptr<Window> dialogWindow0 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect); 118e0dac50fSopenharmony_ci if (dialogWindow0 == nullptr) { 119e0dac50fSopenharmony_ci return; 120e0dac50fSopenharmony_ci } 121e0dac50fSopenharmony_ci ASSERT_NE(nullptr, dialogWindow0); 122e0dac50fSopenharmony_ci 123e0dac50fSopenharmony_ci sptr<Window> dialogWindow1 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect); 124e0dac50fSopenharmony_ci ASSERT_NE(nullptr, dialogWindow1); 125e0dac50fSopenharmony_ci 126e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 127e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow0->Show()); 128e0dac50fSopenharmony_ci 129e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow0->Hide()); 130e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 131e0dac50fSopenharmony_ci 132e0dac50fSopenharmony_ci dialogWindow0->Destroy(); 133e0dac50fSopenharmony_ci scene->GoDestroy(); 134e0dac50fSopenharmony_ci} 135e0dac50fSopenharmony_ci 136e0dac50fSopenharmony_ci/** 137e0dac50fSopenharmony_ci * @tc.name: dialogWindow03 138e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + 2 dialogWindow with the same name 139e0dac50fSopenharmony_ci * @tc.type: FUNC 140e0dac50fSopenharmony_ci * @tc.require: issueI5GKWZ 141e0dac50fSopenharmony_ci */ 142e0dac50fSopenharmony_ciHWTEST_F(WindowDialogWindowTest, DialogWindow03, Function | MediumTest | Level2) 143e0dac50fSopenharmony_ci{ 144e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 145e0dac50fSopenharmony_ci 146e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 147e0dac50fSopenharmony_ci sptr<Window> dialogWindow0 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect, "dialog0"); 148e0dac50fSopenharmony_ci sptr<Window> dialogWindow1 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect, "dialog0"); 149e0dac50fSopenharmony_ci if (dialogWindow0 == nullptr) { 150e0dac50fSopenharmony_ci return; 151e0dac50fSopenharmony_ci } 152e0dac50fSopenharmony_ci if (dialogWindow1 == nullptr) { 153e0dac50fSopenharmony_ci return; 154e0dac50fSopenharmony_ci } 155e0dac50fSopenharmony_ci ASSERT_NE(nullptr, dialogWindow0); 156e0dac50fSopenharmony_ci ASSERT_EQ(nullptr, dialogWindow1); 157e0dac50fSopenharmony_ci 158e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 159e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow0->Show()); 160e0dac50fSopenharmony_ci 161e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow0->Hide()); 162e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 163e0dac50fSopenharmony_ci 164e0dac50fSopenharmony_ci dialogWindow0->Destroy(); 165e0dac50fSopenharmony_ci scene->GoDestroy(); 166e0dac50fSopenharmony_ci} 167e0dac50fSopenharmony_ci 168e0dac50fSopenharmony_ci/** 169e0dac50fSopenharmony_ci * @tc.name: dialogWindow04 170e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + 2 dialogWindow with the same name but one create after another destroyed 171e0dac50fSopenharmony_ci * @tc.type: FUNC 172e0dac50fSopenharmony_ci * @tc.require: issueI5GKWZ 173e0dac50fSopenharmony_ci */ 174e0dac50fSopenharmony_ciHWTEST_F(WindowDialogWindowTest, DialogWindow04, Function | MediumTest | Level2) 175e0dac50fSopenharmony_ci{ 176e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 177e0dac50fSopenharmony_ci if (scene->GoForeground() == WMError::WM_OK) { 178e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 179e0dac50fSopenharmony_ci } 180e0dac50fSopenharmony_ci 181e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 182e0dac50fSopenharmony_ci sptr<Window> dialogWindow0 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect, "dialog0"); 183e0dac50fSopenharmony_ci if (dialogWindow0 == nullptr) { 184e0dac50fSopenharmony_ci return; 185e0dac50fSopenharmony_ci } 186e0dac50fSopenharmony_ci ASSERT_NE(nullptr, dialogWindow0); 187e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow0->Show()); 188e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow0->Destroy()); 189e0dac50fSopenharmony_ci 190e0dac50fSopenharmony_ci 191e0dac50fSopenharmony_ci sptr<Window> dialogWindow1 = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect, "dialog0"); 192e0dac50fSopenharmony_ci if (dialogWindow1 == nullptr) { 193e0dac50fSopenharmony_ci return; 194e0dac50fSopenharmony_ci } 195e0dac50fSopenharmony_ci ASSERT_NE(nullptr, dialogWindow1); 196e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow1->Show()); 197e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow1->Destroy()); 198e0dac50fSopenharmony_ci 199e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 200e0dac50fSopenharmony_ci scene->GoDestroy(); 201e0dac50fSopenharmony_ci} 202e0dac50fSopenharmony_ci 203e0dac50fSopenharmony_ci/** 204e0dac50fSopenharmony_ci * @tc.name: dialogWindow05 205e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + dialogWindow & MainWindow First GoBackground 206e0dac50fSopenharmony_ci * @tc.type: FUNC 207e0dac50fSopenharmony_ci * @tc.require: issueI5GKWZ 208e0dac50fSopenharmony_ci */ 209e0dac50fSopenharmony_ciHWTEST_F(WindowDialogWindowTest, DialogWindow05, Function | MediumTest | Level2) 210e0dac50fSopenharmony_ci{ 211e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 212e0dac50fSopenharmony_ci 213e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 214e0dac50fSopenharmony_ci sptr<Window> dialogWindow = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect); 215e0dac50fSopenharmony_ci if (dialogWindow == nullptr) { 216e0dac50fSopenharmony_ci return; 217e0dac50fSopenharmony_ci } 218e0dac50fSopenharmony_ci ASSERT_NE(nullptr, dialogWindow); 219e0dac50fSopenharmony_ci 220e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 221e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow->Show()); 222e0dac50fSopenharmony_ci 223e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 224e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow->Hide()); 225e0dac50fSopenharmony_ci 226e0dac50fSopenharmony_ci dialogWindow->Destroy(); 227e0dac50fSopenharmony_ci scene->GoDestroy(); 228e0dac50fSopenharmony_ci} 229e0dac50fSopenharmony_ci 230e0dac50fSopenharmony_ci/** 231e0dac50fSopenharmony_ci * @tc.name: dialogWindow06 232e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + dialogWindow & first destroy dialogWindow, then destroy MainWindow 233e0dac50fSopenharmony_ci * @tc.type: FUNC 234e0dac50fSopenharmony_ci * @tc.require: issueI5GKWZ 235e0dac50fSopenharmony_ci */ 236e0dac50fSopenharmony_ciHWTEST_F(WindowDialogWindowTest, DialogWindow06, Function | MediumTest | Level2) 237e0dac50fSopenharmony_ci{ 238e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 239e0dac50fSopenharmony_ci 240e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 241e0dac50fSopenharmony_ci sptr<Window> dialogWindow = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect); 242e0dac50fSopenharmony_ci if (dialogWindow == nullptr) { 243e0dac50fSopenharmony_ci return; 244e0dac50fSopenharmony_ci } 245e0dac50fSopenharmony_ci 246e0dac50fSopenharmony_ci ASSERT_NE(nullptr, dialogWindow); 247e0dac50fSopenharmony_ci 248e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 249e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow->Show()); 250e0dac50fSopenharmony_ci 251e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow->Hide()); 252e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 253e0dac50fSopenharmony_ci 254e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow->Destroy()); 255e0dac50fSopenharmony_ci 256e0dac50fSopenharmony_ci dialogWindow->Destroy(); 257e0dac50fSopenharmony_ci scene->GoDestroy(); 258e0dac50fSopenharmony_ci} 259e0dac50fSopenharmony_ci 260e0dac50fSopenharmony_ci/** 261e0dac50fSopenharmony_ci * @tc.name: dialogWindow07 262e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + dialogWindow & first destroy MainWindow, then destroy dialogWindow 263e0dac50fSopenharmony_ci * @tc.type: FUNC 264e0dac50fSopenharmony_ci * @tc.require: issueI5GKWZ 265e0dac50fSopenharmony_ci */ 266e0dac50fSopenharmony_ciHWTEST_F(WindowDialogWindowTest, DialogWindow07, Function | MediumTest | Level2) 267e0dac50fSopenharmony_ci{ 268e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 269e0dac50fSopenharmony_ci 270e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 271e0dac50fSopenharmony_ci sptr<Window> dialogWindow = CreateDialogWindow(scene, WindowType::WINDOW_TYPE_DIALOG, rect); 272e0dac50fSopenharmony_ci if (dialogWindow == nullptr) { 273e0dac50fSopenharmony_ci return; 274e0dac50fSopenharmony_ci } 275e0dac50fSopenharmony_ci ASSERT_NE(nullptr, dialogWindow); 276e0dac50fSopenharmony_ci 277e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 278e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow->Show()); 279e0dac50fSopenharmony_ci 280e0dac50fSopenharmony_ci sptr<Window> mainWindow = scene->GetMainWindow(); 281e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow->Destroy()); 282e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, dialogWindow->Destroy()); 283e0dac50fSopenharmony_ci 284e0dac50fSopenharmony_ci scene->GoDestroy(); 285e0dac50fSopenharmony_ci} 286e0dac50fSopenharmony_ci} // namespace Rosen 287e0dac50fSopenharmony_ci} // namespace OHOS 288