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 16e0dac50fSopenharmony_ci// gtest 17e0dac50fSopenharmony_ci#include <gtest/gtest.h> 18e0dac50fSopenharmony_ci#include <ability_context.h> 19e0dac50fSopenharmony_ci#include "window.h" 20e0dac50fSopenharmony_ci#include "window_option.h" 21e0dac50fSopenharmony_ci#include "window_scene.h" 22e0dac50fSopenharmony_ci#include "wm_common.h" 23e0dac50fSopenharmony_ci 24e0dac50fSopenharmony_ciusing namespace testing; 25e0dac50fSopenharmony_ciusing namespace testing::ext; 26e0dac50fSopenharmony_ci 27e0dac50fSopenharmony_cinamespace OHOS { 28e0dac50fSopenharmony_cinamespace Rosen { 29e0dac50fSopenharmony_ciclass WindowSubWindowTest : public testing::Test { 30e0dac50fSopenharmony_cipublic: 31e0dac50fSopenharmony_ci static void SetUpTestCase(); 32e0dac50fSopenharmony_ci static void TearDownTestCase(); 33e0dac50fSopenharmony_ci virtual void SetUp() override; 34e0dac50fSopenharmony_ci virtual void TearDown() override; 35e0dac50fSopenharmony_ci}; 36e0dac50fSopenharmony_ci 37e0dac50fSopenharmony_civoid WindowSubWindowTest::SetUpTestCase() 38e0dac50fSopenharmony_ci{ 39e0dac50fSopenharmony_ci} 40e0dac50fSopenharmony_ci 41e0dac50fSopenharmony_civoid WindowSubWindowTest::TearDownTestCase() 42e0dac50fSopenharmony_ci{ 43e0dac50fSopenharmony_ci} 44e0dac50fSopenharmony_ci 45e0dac50fSopenharmony_civoid WindowSubWindowTest::SetUp() 46e0dac50fSopenharmony_ci{ 47e0dac50fSopenharmony_ci} 48e0dac50fSopenharmony_ci 49e0dac50fSopenharmony_civoid WindowSubWindowTest::TearDown() 50e0dac50fSopenharmony_ci{ 51e0dac50fSopenharmony_ci} 52e0dac50fSopenharmony_ci 53e0dac50fSopenharmony_cistatic sptr<WindowScene> CreateWindowScene() 54e0dac50fSopenharmony_ci{ 55e0dac50fSopenharmony_ci sptr<IWindowLifeCycle> listener = nullptr; 56e0dac50fSopenharmony_ci std::shared_ptr<AbilityRuntime::AbilityContext> abilityContext = nullptr; 57e0dac50fSopenharmony_ci 58e0dac50fSopenharmony_ci sptr<WindowScene> scene = new WindowScene(); 59e0dac50fSopenharmony_ci scene->Init(0, abilityContext, listener); 60e0dac50fSopenharmony_ci return scene; 61e0dac50fSopenharmony_ci} 62e0dac50fSopenharmony_ci 63e0dac50fSopenharmony_cistatic sptr<Window> CreateSubWindow(sptr<WindowScene> scene, WindowType type, 64e0dac50fSopenharmony_ci struct Rect rect, uint32_t flags, std::string name = "") 65e0dac50fSopenharmony_ci{ 66e0dac50fSopenharmony_ci sptr<WindowOption> subOp = new WindowOption(); 67e0dac50fSopenharmony_ci subOp->SetWindowType(type); 68e0dac50fSopenharmony_ci subOp->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING); 69e0dac50fSopenharmony_ci subOp->SetWindowRect(rect); 70e0dac50fSopenharmony_ci subOp->SetWindowFlags(flags); 71e0dac50fSopenharmony_ci 72e0dac50fSopenharmony_ci static int cnt = 0; 73e0dac50fSopenharmony_ci std::string subWinName = (name == "") ? "SubWindow" + std::to_string(cnt++) : name; 74e0dac50fSopenharmony_ci 75e0dac50fSopenharmony_ci return scene->CreateWindow(subWinName, subOp); 76e0dac50fSopenharmony_ci} 77e0dac50fSopenharmony_ci 78e0dac50fSopenharmony_ci/** 79e0dac50fSopenharmony_ci * @tc.name: SubWindow01 80e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating SubWindow 81e0dac50fSopenharmony_ci * @tc.type: FUNC 82e0dac50fSopenharmony_ci */ 83e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow01, Function | MediumTest | Level2) 84e0dac50fSopenharmony_ci{ 85e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 86e0dac50fSopenharmony_ci 87e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 88e0dac50fSopenharmony_ci uint32_t flags = 0; 89e0dac50fSopenharmony_ci sptr<Window> subWindow = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, flags); 90e0dac50fSopenharmony_ci if (subWindow == nullptr) { 91e0dac50fSopenharmony_ci return; 92e0dac50fSopenharmony_ci } 93e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 94e0dac50fSopenharmony_ci 95e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 96e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 97e0dac50fSopenharmony_ci 98e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Hide()); 99e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 100e0dac50fSopenharmony_ci sleep(1); 101e0dac50fSopenharmony_ci 102e0dac50fSopenharmony_ci subWindow->Destroy(); 103e0dac50fSopenharmony_ci scene->GoDestroy(); 104e0dac50fSopenharmony_ci} 105e0dac50fSopenharmony_ci 106e0dac50fSopenharmony_ci/** 107e0dac50fSopenharmony_ci * @tc.name: SubWindow02 108e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating SubWindow & Parent Limit work 109e0dac50fSopenharmony_ci * @tc.type: FUNC 110e0dac50fSopenharmony_ci */ 111e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow02, Function | MediumTest | Level2) 112e0dac50fSopenharmony_ci{ 113e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 114e0dac50fSopenharmony_ci 115e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 116e0dac50fSopenharmony_ci uint32_t flags = static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_PARENT_LIMIT); 117e0dac50fSopenharmony_ci sptr<Window> subWindow = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, flags); 118e0dac50fSopenharmony_ci if (subWindow == nullptr) { 119e0dac50fSopenharmony_ci return; 120e0dac50fSopenharmony_ci } 121e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 122e0dac50fSopenharmony_ci 123e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 124e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 125e0dac50fSopenharmony_ci 126e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Hide()); 127e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 128e0dac50fSopenharmony_ci sleep(1); 129e0dac50fSopenharmony_ci 130e0dac50fSopenharmony_ci subWindow->Destroy(); 131e0dac50fSopenharmony_ci scene->GoDestroy(); 132e0dac50fSopenharmony_ci} 133e0dac50fSopenharmony_ci 134e0dac50fSopenharmony_ci/** 135e0dac50fSopenharmony_ci * @tc.name: SubWindow03 136e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating MediaWindow 137e0dac50fSopenharmony_ci * @tc.type: FUNC 138e0dac50fSopenharmony_ci */ 139e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow03, Function | MediumTest | Level2) 140e0dac50fSopenharmony_ci{ 141e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 142e0dac50fSopenharmony_ci 143e0dac50fSopenharmony_ci struct Rect rect = {0, 2000, 100, 200}; 144e0dac50fSopenharmony_ci uint32_t flags = static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_PARENT_LIMIT); 145e0dac50fSopenharmony_ci sptr<Window> subWindow = CreateSubWindow(scene, WindowType::WINDOW_TYPE_MEDIA, rect, flags); 146e0dac50fSopenharmony_ci if (subWindow == nullptr) { 147e0dac50fSopenharmony_ci return; 148e0dac50fSopenharmony_ci } 149e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 150e0dac50fSopenharmony_ci 151e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 152e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 153e0dac50fSopenharmony_ci 154e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Hide()); 155e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 156e0dac50fSopenharmony_ci sleep(1); 157e0dac50fSopenharmony_ci 158e0dac50fSopenharmony_ci subWindow->Destroy(); 159e0dac50fSopenharmony_ci scene->GoDestroy(); 160e0dac50fSopenharmony_ci} 161e0dac50fSopenharmony_ci 162e0dac50fSopenharmony_ci/** 163e0dac50fSopenharmony_ci * @tc.name: SubWindow04 164e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating MediaWindow 165e0dac50fSopenharmony_ci * @tc.type: FUNC 166e0dac50fSopenharmony_ci */ 167e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow04, Function | MediumTest | Level2) 168e0dac50fSopenharmony_ci{ 169e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 170e0dac50fSopenharmony_ci 171e0dac50fSopenharmony_ci struct Rect rect = {0, 2000, 3000, 2000}; 172e0dac50fSopenharmony_ci uint32_t flags = static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_PARENT_LIMIT); 173e0dac50fSopenharmony_ci sptr<Window> subWindow = CreateSubWindow(scene, WindowType::WINDOW_TYPE_MEDIA, rect, flags); 174e0dac50fSopenharmony_ci if (subWindow == nullptr) { 175e0dac50fSopenharmony_ci return; 176e0dac50fSopenharmony_ci } 177e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 178e0dac50fSopenharmony_ci 179e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 180e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 181e0dac50fSopenharmony_ci 182e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Hide()); 183e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 184e0dac50fSopenharmony_ci sleep(1); 185e0dac50fSopenharmony_ci 186e0dac50fSopenharmony_ci subWindow->Destroy(); 187e0dac50fSopenharmony_ci scene->GoDestroy(); 188e0dac50fSopenharmony_ci} 189e0dac50fSopenharmony_ci 190e0dac50fSopenharmony_ci/** 191e0dac50fSopenharmony_ci * @tc.name: SubWindow05 192e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating MediaWindow + Floating SubWindow 193e0dac50fSopenharmony_ci * @tc.type: FUNC 194e0dac50fSopenharmony_ci */ 195e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow05, Function | MediumTest | Level3) 196e0dac50fSopenharmony_ci{ 197e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 198e0dac50fSopenharmony_ci 199e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 200e0dac50fSopenharmony_ci uint32_t flags = static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_PARENT_LIMIT); 201e0dac50fSopenharmony_ci sptr<Window> subWindow = CreateSubWindow(scene, WindowType::WINDOW_TYPE_MEDIA, rect, flags); 202e0dac50fSopenharmony_ci if (subWindow == nullptr) { 203e0dac50fSopenharmony_ci return; 204e0dac50fSopenharmony_ci } 205e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 206e0dac50fSopenharmony_ci 207e0dac50fSopenharmony_ci sptr<Window> subWindow2 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, flags); 208e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow2); 209e0dac50fSopenharmony_ci 210e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 211e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 212e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow2->Show()); 213e0dac50fSopenharmony_ci 214e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Hide()); 215e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow2->Hide()); 216e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 217e0dac50fSopenharmony_ci sleep(1); 218e0dac50fSopenharmony_ci 219e0dac50fSopenharmony_ci subWindow->Destroy(); 220e0dac50fSopenharmony_ci subWindow2->Destroy(); 221e0dac50fSopenharmony_ci scene->GoDestroy(); 222e0dac50fSopenharmony_ci} 223e0dac50fSopenharmony_ci 224e0dac50fSopenharmony_ci/** 225e0dac50fSopenharmony_ci * @tc.name: SubWindow06 226e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + 2 SubWindows 227e0dac50fSopenharmony_ci * @tc.type: FUNC 228e0dac50fSopenharmony_ci */ 229e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow06, Function | MediumTest | Level3) 230e0dac50fSopenharmony_ci{ 231e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 232e0dac50fSopenharmony_ci 233e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 234e0dac50fSopenharmony_ci sptr<Window> subWindow0 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0); 235e0dac50fSopenharmony_ci if (subWindow0 == nullptr) { 236e0dac50fSopenharmony_ci return; 237e0dac50fSopenharmony_ci } 238e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow0); 239e0dac50fSopenharmony_ci 240e0dac50fSopenharmony_ci sptr<Window> subWindow1 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0); 241e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow1); 242e0dac50fSopenharmony_ci 243e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 244e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow0->Show()); 245e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow1->Show()); 246e0dac50fSopenharmony_ci 247e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow0->Hide()); 248e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow1->Hide()); 249e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 250e0dac50fSopenharmony_ci sleep(1); 251e0dac50fSopenharmony_ci 252e0dac50fSopenharmony_ci subWindow0->Destroy(); 253e0dac50fSopenharmony_ci subWindow1->Destroy(); 254e0dac50fSopenharmony_ci scene->GoDestroy(); 255e0dac50fSopenharmony_ci} 256e0dac50fSopenharmony_ci 257e0dac50fSopenharmony_ci/** 258e0dac50fSopenharmony_ci * @tc.name: SubWindow07 259e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating SubWindow & MainWindow First GoBackground 260e0dac50fSopenharmony_ci * @tc.type: FUNC 261e0dac50fSopenharmony_ci */ 262e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow07, Function | MediumTest | Level4) 263e0dac50fSopenharmony_ci{ 264e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 265e0dac50fSopenharmony_ci 266e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 267e0dac50fSopenharmony_ci uint32_t flags = static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_PARENT_LIMIT); 268e0dac50fSopenharmony_ci sptr<Window> subWindow = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, flags); 269e0dac50fSopenharmony_ci if (subWindow == nullptr) { 270e0dac50fSopenharmony_ci return; 271e0dac50fSopenharmony_ci } 272e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 273e0dac50fSopenharmony_ci 274e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 275e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 276e0dac50fSopenharmony_ci 277e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 278e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Hide()); 279e0dac50fSopenharmony_ci sleep(1); 280e0dac50fSopenharmony_ci 281e0dac50fSopenharmony_ci subWindow->Destroy(); 282e0dac50fSopenharmony_ci scene->GoDestroy(); 283e0dac50fSopenharmony_ci} 284e0dac50fSopenharmony_ci 285e0dac50fSopenharmony_ci/** 286e0dac50fSopenharmony_ci * @tc.name: SubWindow08 287e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating SubWindow & only show SubWindow 288e0dac50fSopenharmony_ci * @tc.type: FUNC 289e0dac50fSopenharmony_ci */ 290e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow08, Function | MediumTest | Level4) 291e0dac50fSopenharmony_ci{ 292e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 293e0dac50fSopenharmony_ci 294e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 295e0dac50fSopenharmony_ci uint32_t flags = static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_PARENT_LIMIT); 296e0dac50fSopenharmony_ci sptr<Window> subWindow = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, flags); 297e0dac50fSopenharmony_ci if (subWindow == nullptr) { 298e0dac50fSopenharmony_ci return; 299e0dac50fSopenharmony_ci } 300e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 301e0dac50fSopenharmony_ci 302e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, subWindow->Show()); 303e0dac50fSopenharmony_ci} 304e0dac50fSopenharmony_ci 305e0dac50fSopenharmony_ci/** 306e0dac50fSopenharmony_ci * @tc.name: SubWindow09 307e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating SubWindow & first destroy SubWindow, then destroy MainWindow 308e0dac50fSopenharmony_ci * @tc.type: FUNC 309e0dac50fSopenharmony_ci */ 310e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow09, Function | MediumTest | Level2) 311e0dac50fSopenharmony_ci{ 312e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 313e0dac50fSopenharmony_ci 314e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 315e0dac50fSopenharmony_ci uint32_t flags = static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_PARENT_LIMIT); 316e0dac50fSopenharmony_ci sptr<Window> subWindow = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, flags); 317e0dac50fSopenharmony_ci if (subWindow == nullptr) { 318e0dac50fSopenharmony_ci return; 319e0dac50fSopenharmony_ci } 320e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 321e0dac50fSopenharmony_ci 322e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 323e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 324e0dac50fSopenharmony_ci 325e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Hide()); 326e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 327e0dac50fSopenharmony_ci sleep(1); 328e0dac50fSopenharmony_ci 329e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Destroy()); 330e0dac50fSopenharmony_ci 331e0dac50fSopenharmony_ci subWindow->Destroy(); 332e0dac50fSopenharmony_ci scene->GoDestroy(); 333e0dac50fSopenharmony_ci} 334e0dac50fSopenharmony_ci 335e0dac50fSopenharmony_ci/** 336e0dac50fSopenharmony_ci * @tc.name: SubWindow10 337e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + Floating SubWindow & first destroy MainWindow, then destroy SubWindow 338e0dac50fSopenharmony_ci * @tc.type: FUNC 339e0dac50fSopenharmony_ci */ 340e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow10, Function | MediumTest | Level2) 341e0dac50fSopenharmony_ci{ 342e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 343e0dac50fSopenharmony_ci 344e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 345e0dac50fSopenharmony_ci uint32_t flags = static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_PARENT_LIMIT); 346e0dac50fSopenharmony_ci sptr<Window> subWindow = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, flags); 347e0dac50fSopenharmony_ci if (subWindow == nullptr) { 348e0dac50fSopenharmony_ci return; 349e0dac50fSopenharmony_ci } 350e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 351e0dac50fSopenharmony_ci 352e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 353e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 354e0dac50fSopenharmony_ci sleep(1); 355e0dac50fSopenharmony_ci 356e0dac50fSopenharmony_ci sptr<Window> mainWindow = scene->GetMainWindow(); 357e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow->Destroy()); 358e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Destroy()); 359e0dac50fSopenharmony_ci 360e0dac50fSopenharmony_ci scene->GoDestroy(); 361e0dac50fSopenharmony_ci} 362e0dac50fSopenharmony_ci 363e0dac50fSopenharmony_ci/** 364e0dac50fSopenharmony_ci * @tc.name: SubWindow11 365e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + 5 subWindows 366e0dac50fSopenharmony_ci * @tc.type: FUNC 367e0dac50fSopenharmony_ci */ 368e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow11, Function | MediumTest | Level3) 369e0dac50fSopenharmony_ci{ 370e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 371e0dac50fSopenharmony_ci 372e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 373e0dac50fSopenharmony_ci sptr<Window> subWindow0 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0); 374e0dac50fSopenharmony_ci if (subWindow0 == nullptr) { 375e0dac50fSopenharmony_ci return; 376e0dac50fSopenharmony_ci } 377e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow0); 378e0dac50fSopenharmony_ci 379e0dac50fSopenharmony_ci sptr<Window> subWindow1 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0); 380e0dac50fSopenharmony_ci if (subWindow1 == nullptr) { 381e0dac50fSopenharmony_ci return; 382e0dac50fSopenharmony_ci } 383e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow1); 384e0dac50fSopenharmony_ci 385e0dac50fSopenharmony_ci sptr<Window> subWindow2 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0); 386e0dac50fSopenharmony_ci if (subWindow2 == nullptr) { 387e0dac50fSopenharmony_ci return; 388e0dac50fSopenharmony_ci } 389e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow2); 390e0dac50fSopenharmony_ci 391e0dac50fSopenharmony_ci sptr<Window> subWindow3 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0); 392e0dac50fSopenharmony_ci if (subWindow3 == nullptr) { 393e0dac50fSopenharmony_ci return; 394e0dac50fSopenharmony_ci } 395e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow3); 396e0dac50fSopenharmony_ci 397e0dac50fSopenharmony_ci sptr<Window> subWindow4 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0); 398e0dac50fSopenharmony_ci if (subWindow4 == nullptr) { 399e0dac50fSopenharmony_ci return; 400e0dac50fSopenharmony_ci } 401e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow4); 402e0dac50fSopenharmony_ci if (scene->GoForeground() == WMError::WM_OK) { 403e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 404e0dac50fSopenharmony_ci } 405e0dac50fSopenharmony_ci 406e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow0->Show()); 407e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow1->Show()); 408e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow2->Show()); 409e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow3->Show()); 410e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow4->Show()); 411e0dac50fSopenharmony_ci 412e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow0->Hide()); 413e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow1->Hide()); 414e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow2->Hide()); 415e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow3->Hide()); 416e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow4->Hide()); 417e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 418e0dac50fSopenharmony_ci sleep(1); 419e0dac50fSopenharmony_ci 420e0dac50fSopenharmony_ci subWindow0->Destroy(); 421e0dac50fSopenharmony_ci subWindow1->Destroy(); 422e0dac50fSopenharmony_ci subWindow2->Destroy(); 423e0dac50fSopenharmony_ci subWindow3->Destroy(); 424e0dac50fSopenharmony_ci subWindow4->Destroy(); 425e0dac50fSopenharmony_ci scene->GoDestroy(); 426e0dac50fSopenharmony_ci} 427e0dac50fSopenharmony_ci 428e0dac50fSopenharmony_ci/** 429e0dac50fSopenharmony_ci * @tc.name: SubWindow12 430e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + 2 SubWindows with the same name 431e0dac50fSopenharmony_ci * @tc.type: FUNC 432e0dac50fSopenharmony_ci */ 433e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow12, Function | MediumTest | Level3) 434e0dac50fSopenharmony_ci{ 435e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 436e0dac50fSopenharmony_ci 437e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 438e0dac50fSopenharmony_ci sptr<Window> subWindow0 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0, "sub0"); 439e0dac50fSopenharmony_ci sptr<Window> subWindow1 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0, "sub0"); 440e0dac50fSopenharmony_ci if (subWindow0 == nullptr) { 441e0dac50fSopenharmony_ci return; 442e0dac50fSopenharmony_ci } 443e0dac50fSopenharmony_ci if (subWindow1 == nullptr) { 444e0dac50fSopenharmony_ci return; 445e0dac50fSopenharmony_ci } 446e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow0); 447e0dac50fSopenharmony_ci ASSERT_EQ(nullptr, subWindow1); 448e0dac50fSopenharmony_ci 449e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 450e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow0->Show()); 451e0dac50fSopenharmony_ci 452e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow0->Hide()); 453e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 454e0dac50fSopenharmony_ci sleep(1); 455e0dac50fSopenharmony_ci 456e0dac50fSopenharmony_ci subWindow0->Destroy(); 457e0dac50fSopenharmony_ci scene->GoDestroy(); 458e0dac50fSopenharmony_ci} 459e0dac50fSopenharmony_ci 460e0dac50fSopenharmony_ci/** 461e0dac50fSopenharmony_ci * @tc.name: SubWindow13 462e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + 2 subwindows with the same name but one create after another destroyed 463e0dac50fSopenharmony_ci * @tc.type: FUNC 464e0dac50fSopenharmony_ci */ 465e0dac50fSopenharmony_ciHWTEST_F(WindowSubWindowTest, SubWindow13, Function | MediumTest | Level3) 466e0dac50fSopenharmony_ci{ 467e0dac50fSopenharmony_ci sptr<WindowScene> scene = CreateWindowScene(); 468e0dac50fSopenharmony_ci if (scene->GoForeground() == WMError::WM_OK) { 469e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoForeground()); 470e0dac50fSopenharmony_ci } 471e0dac50fSopenharmony_ci 472e0dac50fSopenharmony_ci struct Rect rect = {0, 0, 100, 200}; 473e0dac50fSopenharmony_ci sptr<Window> subWindow0 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0, "sub1"); 474e0dac50fSopenharmony_ci if (subWindow0 == nullptr) { 475e0dac50fSopenharmony_ci return; 476e0dac50fSopenharmony_ci } 477e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow0); 478e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow0->Show()); 479e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow0->Destroy()); 480e0dac50fSopenharmony_ci 481e0dac50fSopenharmony_ci sptr<Window> subWindow1 = CreateSubWindow(scene, WindowType::WINDOW_TYPE_APP_SUB_WINDOW, rect, 0, "sub1"); 482e0dac50fSopenharmony_ci if (subWindow1 == nullptr) { 483e0dac50fSopenharmony_ci return; 484e0dac50fSopenharmony_ci } 485e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow1); 486e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow1->Show()); 487e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow1->Destroy()); 488e0dac50fSopenharmony_ci 489e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, scene->GoBackground()); 490e0dac50fSopenharmony_ci sleep(1); 491e0dac50fSopenharmony_ci scene->GoDestroy(); 492e0dac50fSopenharmony_ci} 493e0dac50fSopenharmony_ci} // namespace Rosen 494e0dac50fSopenharmony_ci} // namespace OHOS 495