1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 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 "display_manager_proxy.h" 19e0dac50fSopenharmony_ci#include "window_test_utils.h" 20e0dac50fSopenharmony_ci#include "wm_common.h" 21e0dac50fSopenharmony_ciusing namespace testing; 22e0dac50fSopenharmony_ciusing namespace testing::ext; 23e0dac50fSopenharmony_ci 24e0dac50fSopenharmony_cinamespace OHOS { 25e0dac50fSopenharmony_cinamespace Rosen { 26e0dac50fSopenharmony_cinamespace { 27e0dac50fSopenharmony_ciconstexpr uint32_t WAIT_ASYNC_US = 100000; // 100ms 28e0dac50fSopenharmony_ci} 29e0dac50fSopenharmony_ciusing Utils = WindowTestUtils; 30e0dac50fSopenharmony_ciclass WindowInputTest : public testing::Test { 31e0dac50fSopenharmony_cipublic: 32e0dac50fSopenharmony_ci static void SetUpTestCase(); 33e0dac50fSopenharmony_ci static void TearDownTestCase(); 34e0dac50fSopenharmony_ci virtual void SetUp() override; 35e0dac50fSopenharmony_ci virtual void TearDown() override; 36e0dac50fSopenharmony_ci Utils::TestWindowInfo fullScreenWindow_; 37e0dac50fSopenharmony_ci}; 38e0dac50fSopenharmony_ci 39e0dac50fSopenharmony_civoid WindowInputTest::SetUpTestCase() 40e0dac50fSopenharmony_ci{ 41e0dac50fSopenharmony_ci auto display = DisplayManager::GetInstance().GetDisplayById(0); 42e0dac50fSopenharmony_ci ASSERT_TRUE((display != nullptr)); 43e0dac50fSopenharmony_ci Rect displayRect = {0, 0, display->GetWidth(), display->GetHeight()}; 44e0dac50fSopenharmony_ci Utils::InitByDisplayRect(displayRect); 45e0dac50fSopenharmony_ci} 46e0dac50fSopenharmony_ci 47e0dac50fSopenharmony_civoid WindowInputTest::TearDownTestCase() 48e0dac50fSopenharmony_ci{ 49e0dac50fSopenharmony_ci} 50e0dac50fSopenharmony_ci 51e0dac50fSopenharmony_civoid WindowInputTest::SetUp() 52e0dac50fSopenharmony_ci{ 53e0dac50fSopenharmony_ci fullScreenWindow_ = { 54e0dac50fSopenharmony_ci .name = "FullWindow", 55e0dac50fSopenharmony_ci .rect = Utils::customAppRect_, 56e0dac50fSopenharmony_ci .type = WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, 57e0dac50fSopenharmony_ci .mode = WindowMode::WINDOW_MODE_FULLSCREEN, 58e0dac50fSopenharmony_ci .needAvoid = false, 59e0dac50fSopenharmony_ci .parentLimit = false, 60e0dac50fSopenharmony_ci .parentId = INVALID_WINDOW_ID, 61e0dac50fSopenharmony_ci }; 62e0dac50fSopenharmony_ci} 63e0dac50fSopenharmony_ci 64e0dac50fSopenharmony_civoid WindowInputTest::TearDown() 65e0dac50fSopenharmony_ci{ 66e0dac50fSopenharmony_ci} 67e0dac50fSopenharmony_ci 68e0dac50fSopenharmony_cinamespace { 69e0dac50fSopenharmony_ci/** 70e0dac50fSopenharmony_ci * @tc.name: SetTouchHotAreas01 71e0dac50fSopenharmony_ci * @tc.desc: Normal scenario testing for Window#SetTouchHotAreas 72e0dac50fSopenharmony_ci * @tc.type: FUNC 73e0dac50fSopenharmony_ci */ 74e0dac50fSopenharmony_ciHWTEST_F(WindowInputTest, SetTouchHotAreas01, Function | MediumTest | Level3) 75e0dac50fSopenharmony_ci{ 76e0dac50fSopenharmony_ci fullScreenWindow_.name = "window_hot_areas.1"; 77e0dac50fSopenharmony_ci const sptr<Window>& window = Utils::CreateTestWindow(fullScreenWindow_); 78e0dac50fSopenharmony_ci if (window == nullptr) { 79e0dac50fSopenharmony_ci return; 80e0dac50fSopenharmony_ci } 81e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window->Show()); 82e0dac50fSopenharmony_ci 83e0dac50fSopenharmony_ci std::vector<Rect> requestedTouchHotAreas; 84e0dac50fSopenharmony_ci window->GetRequestedTouchHotAreas(requestedTouchHotAreas); 85e0dac50fSopenharmony_ci ASSERT_TRUE(requestedTouchHotAreas.empty()); 86e0dac50fSopenharmony_ci 87e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 88e0dac50fSopenharmony_ci Rect windowRect = window->GetRect(); 89e0dac50fSopenharmony_ci 90e0dac50fSopenharmony_ci std::vector<Rect> rects; 91e0dac50fSopenharmony_ci uint32_t hotAreasNum = 10; 92e0dac50fSopenharmony_ci uint32_t hotAreaWidth = windowRect.width_ / hotAreasNum; 93e0dac50fSopenharmony_ci uint32_t hotAreaHeight = windowRect.height_ / hotAreasNum; 94e0dac50fSopenharmony_ci for (uint32_t i = 0; i < hotAreasNum; ++i) { 95e0dac50fSopenharmony_ci rects.emplace_back(Rect{ hotAreaWidth * i, hotAreaHeight * i, hotAreaWidth, hotAreaHeight }); 96e0dac50fSopenharmony_ci } 97e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window->SetTouchHotAreas(rects)); 98e0dac50fSopenharmony_ci window->GetRequestedTouchHotAreas(requestedTouchHotAreas); 99e0dac50fSopenharmony_ci ASSERT_EQ(rects.size(), requestedTouchHotAreas.size()); 100e0dac50fSopenharmony_ci for (uint32_t i = 0; i < rects.size(); ++i) { 101e0dac50fSopenharmony_ci ASSERT_TRUE(rects[i] == requestedTouchHotAreas[i]); 102e0dac50fSopenharmony_ci } 103e0dac50fSopenharmony_ci 104e0dac50fSopenharmony_ci rects.clear(); 105e0dac50fSopenharmony_ci rects.emplace_back(Rect{ 0, 0, hotAreaWidth, hotAreaHeight }); 106e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window->SetTouchHotAreas(rects)); 107e0dac50fSopenharmony_ci window->GetRequestedTouchHotAreas(requestedTouchHotAreas); 108e0dac50fSopenharmony_ci ASSERT_EQ(rects.size(), requestedTouchHotAreas.size()); 109e0dac50fSopenharmony_ci for (uint32_t i = 0; i < rects.size(); ++i) { 110e0dac50fSopenharmony_ci ASSERT_TRUE(rects[i] == requestedTouchHotAreas[i]); 111e0dac50fSopenharmony_ci } 112e0dac50fSopenharmony_ci 113e0dac50fSopenharmony_ci rects.clear(); 114e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window->SetTouchHotAreas(rects)); 115e0dac50fSopenharmony_ci window->GetRequestedTouchHotAreas(requestedTouchHotAreas); 116e0dac50fSopenharmony_ci ASSERT_TRUE(requestedTouchHotAreas.empty()); 117e0dac50fSopenharmony_ci 118e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window->Destroy()); 119e0dac50fSopenharmony_ci} 120e0dac50fSopenharmony_ci 121e0dac50fSopenharmony_ci/** 122e0dac50fSopenharmony_ci * @tc.name: SetTouchHotAreas02 123e0dac50fSopenharmony_ci * @tc.desc: Abnormal scenario testing for Window#SetTouchHotAreas 124e0dac50fSopenharmony_ci * @tc.type: FUNC 125e0dac50fSopenharmony_ci */ 126e0dac50fSopenharmony_ciHWTEST_F(WindowInputTest, SetTouchHotAreas02, Function | MediumTest | Level3) 127e0dac50fSopenharmony_ci{ 128e0dac50fSopenharmony_ci fullScreenWindow_.name = "window_hot_areas.2"; 129e0dac50fSopenharmony_ci const sptr<Window>& window = Utils::CreateTestWindow(fullScreenWindow_); 130e0dac50fSopenharmony_ci if (window == nullptr) { 131e0dac50fSopenharmony_ci return; 132e0dac50fSopenharmony_ci } 133e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window->Show()); 134e0dac50fSopenharmony_ci 135e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 136e0dac50fSopenharmony_ci Rect windowRect = window->GetRect(); 137e0dac50fSopenharmony_ci 138e0dac50fSopenharmony_ci std::vector<Rect> rects; 139e0dac50fSopenharmony_ci /* maximum hot areas: 10, test exceeding maximum hot areas */ 140e0dac50fSopenharmony_ci uint32_t hotAreasNum = 11; 141e0dac50fSopenharmony_ci uint32_t hotAreaWidth = windowRect.width_ / hotAreasNum; 142e0dac50fSopenharmony_ci uint32_t hotAreaHeight = windowRect.height_ / hotAreasNum; 143e0dac50fSopenharmony_ci for (uint32_t i = 0; i < hotAreasNum; ++i) { 144e0dac50fSopenharmony_ci rects.emplace_back(Rect{ hotAreaWidth * i, hotAreaHeight * i, hotAreaWidth, hotAreaHeight }); 145e0dac50fSopenharmony_ci } 146e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window->SetTouchHotAreas(rects)); 147e0dac50fSopenharmony_ci 148e0dac50fSopenharmony_ci rects.clear(); 149e0dac50fSopenharmony_ci rects.emplace_back(Rect{ -1, 0, windowRect.width_ / 2, windowRect.height_ / 2 }); 150e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetTouchHotAreas(rects)); 151e0dac50fSopenharmony_ci 152e0dac50fSopenharmony_ci rects.clear(); 153e0dac50fSopenharmony_ci rects.emplace_back(Rect{ 0, -1, windowRect.width_ / 2, windowRect.height_ / 2 }); 154e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetTouchHotAreas(rects)); 155e0dac50fSopenharmony_ci 156e0dac50fSopenharmony_ci rects.clear(); 157e0dac50fSopenharmony_ci rects.emplace_back(Rect{ 0, 0, 0, windowRect.height_ / 2 }); 158e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetTouchHotAreas(rects)); 159e0dac50fSopenharmony_ci 160e0dac50fSopenharmony_ci rects.clear(); 161e0dac50fSopenharmony_ci rects.emplace_back(Rect{ 0, 0, windowRect.width_ / 2, 0 }); 162e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetTouchHotAreas(rects)); 163e0dac50fSopenharmony_ci 164e0dac50fSopenharmony_ci rects.clear(); 165e0dac50fSopenharmony_ci rects.emplace_back(Rect{ windowRect.width_, 0, windowRect.width_ / 2, windowRect.height_ / 2 }); 166e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetTouchHotAreas(rects)); 167e0dac50fSopenharmony_ci 168e0dac50fSopenharmony_ci rects.clear(); 169e0dac50fSopenharmony_ci rects.emplace_back(Rect{ 0, windowRect.height_, windowRect.width_ / 2, windowRect.height_ / 2 }); 170e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_ERROR_INVALID_PARAM, window->SetTouchHotAreas(rects)); 171e0dac50fSopenharmony_ci 172e0dac50fSopenharmony_ci std::vector<Rect> requestedTouchHotAreas; 173e0dac50fSopenharmony_ci window->GetRequestedTouchHotAreas(requestedTouchHotAreas); 174e0dac50fSopenharmony_ci ASSERT_FALSE(requestedTouchHotAreas.empty()); 175e0dac50fSopenharmony_ci 176e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window->Destroy()); 177e0dac50fSopenharmony_ci} 178e0dac50fSopenharmony_ci} // namespace 179e0dac50fSopenharmony_ci} // namespace Rosen 180e0dac50fSopenharmony_ci} // namespace OHOS