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#include <gtest/gtest.h> 17e0dac50fSopenharmony_ci 18e0dac50fSopenharmony_ci#include "surface_draw.h" 19e0dac50fSopenharmony_ci#include "display.h" 20e0dac50fSopenharmony_ci#include "display_info.h" 21e0dac50fSopenharmony_ci#include "display_manager.h" 22e0dac50fSopenharmony_ci#include "display_manager_proxy.h" 23e0dac50fSopenharmony_ci#include "window_impl.h" 24e0dac50fSopenharmony_ci 25e0dac50fSopenharmony_ciusing namespace testing; 26e0dac50fSopenharmony_ciusing namespace testing::ext; 27e0dac50fSopenharmony_ci 28e0dac50fSopenharmony_cinamespace OHOS { 29e0dac50fSopenharmony_cinamespace Rosen { 30e0dac50fSopenharmony_cinamespace { 31e0dac50fSopenharmony_ciconst std::string IMAGE_PLACE_HOLDER_PNG_PATH = "/etc/window/resources/bg_place_holder.png"; 32e0dac50fSopenharmony_ciconst int WAIT_FOR_SYNC_US = 1000 * 500; // 500ms 33e0dac50fSopenharmony_ci} 34e0dac50fSopenharmony_ciclass SurfaceDrawTest : public testing::Test { 35e0dac50fSopenharmony_cipublic: 36e0dac50fSopenharmony_ci static void SetUpTestCase(); 37e0dac50fSopenharmony_ci static void TearDownTestCase(); 38e0dac50fSopenharmony_ci void SetUp() override; 39e0dac50fSopenharmony_ci void TearDown() override; 40e0dac50fSopenharmony_ci 41e0dac50fSopenharmony_cipublic: 42e0dac50fSopenharmony_ci struct WindowTestInfo { 43e0dac50fSopenharmony_ci std::string name; 44e0dac50fSopenharmony_ci Rect rect; 45e0dac50fSopenharmony_ci WindowType type; 46e0dac50fSopenharmony_ci WindowMode mode; 47e0dac50fSopenharmony_ci bool needAvoid; 48e0dac50fSopenharmony_ci bool parentLimit; 49e0dac50fSopenharmony_ci bool forbidSplitMove {false}; 50e0dac50fSopenharmony_ci bool showWhenLocked; 51e0dac50fSopenharmony_ci uint32_t parentId; 52e0dac50fSopenharmony_ci }; 53e0dac50fSopenharmony_ci sptr<Window> CreateTestWindow(const std::string& name); 54e0dac50fSopenharmony_ci 55e0dac50fSopenharmony_ci static inline DisplayId displayId_; 56e0dac50fSopenharmony_ci static inline int32_t displayWidth_; 57e0dac50fSopenharmony_ci static inline int32_t displayHeight_; 58e0dac50fSopenharmony_ci WindowTestInfo windowInfo_; 59e0dac50fSopenharmony_ci}; 60e0dac50fSopenharmony_ci 61e0dac50fSopenharmony_civoid SurfaceDrawTest::SetUpTestCase() 62e0dac50fSopenharmony_ci{ 63e0dac50fSopenharmony_ci displayId_ = DisplayManager::GetInstance().GetDefaultDisplayId(); 64e0dac50fSopenharmony_ci sptr<Display> display = DisplayManager::GetInstance().GetDefaultDisplay(); 65e0dac50fSopenharmony_ci if (display == nullptr) { 66e0dac50fSopenharmony_ci return; 67e0dac50fSopenharmony_ci } 68e0dac50fSopenharmony_ci displayWidth_ = display->GetWidth(); 69e0dac50fSopenharmony_ci displayHeight_ = display->GetHeight(); 70e0dac50fSopenharmony_ci} 71e0dac50fSopenharmony_ci 72e0dac50fSopenharmony_civoid SurfaceDrawTest::TearDownTestCase() 73e0dac50fSopenharmony_ci{ 74e0dac50fSopenharmony_ci} 75e0dac50fSopenharmony_ci 76e0dac50fSopenharmony_civoid SurfaceDrawTest::SetUp() 77e0dac50fSopenharmony_ci{ 78e0dac50fSopenharmony_ci windowInfo_ = { 79e0dac50fSopenharmony_ci .name = "main", 80e0dac50fSopenharmony_ci .rect = {100, 100, 250, 300}, 81e0dac50fSopenharmony_ci .type = WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, 82e0dac50fSopenharmony_ci .mode = WindowMode::WINDOW_MODE_FLOATING, 83e0dac50fSopenharmony_ci .needAvoid = true, 84e0dac50fSopenharmony_ci .parentLimit = false, 85e0dac50fSopenharmony_ci .parentId = INVALID_WINDOW_ID, 86e0dac50fSopenharmony_ci }; 87e0dac50fSopenharmony_ci} 88e0dac50fSopenharmony_ci 89e0dac50fSopenharmony_civoid SurfaceDrawTest::TearDown() 90e0dac50fSopenharmony_ci{ 91e0dac50fSopenharmony_ci} 92e0dac50fSopenharmony_ci 93e0dac50fSopenharmony_cisptr<Window> SurfaceDrawTest::CreateTestWindow(const std::string& name) 94e0dac50fSopenharmony_ci{ 95e0dac50fSopenharmony_ci sptr<WindowOption> option = new (std::nothrow)WindowOption(); 96e0dac50fSopenharmony_ci if (option == nullptr) { 97e0dac50fSopenharmony_ci return nullptr; 98e0dac50fSopenharmony_ci } 99e0dac50fSopenharmony_ci option->SetDisplayId(displayId_); 100e0dac50fSopenharmony_ci option->SetWindowType(windowInfo_.type); 101e0dac50fSopenharmony_ci option->SetWindowRect(windowInfo_.rect); 102e0dac50fSopenharmony_ci option->SetWindowMode(windowInfo_.mode); 103e0dac50fSopenharmony_ci option->SetWindowName(name); 104e0dac50fSopenharmony_ci sptr<Window> window = Window::Create(option->GetWindowName(), option); 105e0dac50fSopenharmony_ci if (window == nullptr) { 106e0dac50fSopenharmony_ci return nullptr; 107e0dac50fSopenharmony_ci } 108e0dac50fSopenharmony_ci window->AddWindowFlag(WindowFlag::WINDOW_FLAG_SHOW_WHEN_LOCKED); 109e0dac50fSopenharmony_ci return window; 110e0dac50fSopenharmony_ci} 111e0dac50fSopenharmony_ci 112e0dac50fSopenharmony_cinamespace { 113e0dac50fSopenharmony_ci/** 114e0dac50fSopenharmony_ci * @tc.name: DrawImage 115e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::DrawImage test 116e0dac50fSopenharmony_ci * @tc.type: FUNC 117e0dac50fSopenharmony_ci */ 118e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, DrawImage01, Function | SmallTest | Level1) 119e0dac50fSopenharmony_ci{ 120e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DrawImage(nullptr, 0, 0, "")); 121e0dac50fSopenharmony_ci sptr<Window> window = CreateTestWindow("testDrawImage"); 122e0dac50fSopenharmony_ci if (window == nullptr) { 123e0dac50fSopenharmony_ci return; 124e0dac50fSopenharmony_ci } 125e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window); 126e0dac50fSopenharmony_ci window->Show(); 127e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 128e0dac50fSopenharmony_ci 129e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 130e0dac50fSopenharmony_ci ASSERT_NE(surfaceNode, nullptr); 131e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 132e0dac50fSopenharmony_ci uint32_t width = window->GetRect().width_; 133e0dac50fSopenharmony_ci uint32_t height = window->GetRect().height_; 134e0dac50fSopenharmony_ci SurfaceDraw::DrawImage(surfaceNode, width, height, IMAGE_PLACE_HOLDER_PNG_PATH); 135e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DrawImage(surfaceNode, -1, -1, IMAGE_PLACE_HOLDER_PNG_PATH)); 136e0dac50fSopenharmony_ci window->Destroy(); 137e0dac50fSopenharmony_ci} 138e0dac50fSopenharmony_ci/** 139e0dac50fSopenharmony_ci * @tc.name: DecodeImageToPixelMap 140e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::DecodeImageToPixelMap test 141e0dac50fSopenharmony_ci * @tc.type: FUNC 142e0dac50fSopenharmony_ci */ 143e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, DecodeImageToPixelMap01, Function | SmallTest | Level1) 144e0dac50fSopenharmony_ci{ 145e0dac50fSopenharmony_ci ASSERT_EQ(SurfaceDraw::DecodeImageToPixelMap(""), nullptr); 146e0dac50fSopenharmony_ci ASSERT_NE(SurfaceDraw::DecodeImageToPixelMap(IMAGE_PLACE_HOLDER_PNG_PATH), nullptr); 147e0dac50fSopenharmony_ci} 148e0dac50fSopenharmony_ci/** 149e0dac50fSopenharmony_ci * @tc.name: DrawMasking 150e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::DrawMasking test 151e0dac50fSopenharmony_ci * @tc.type: FUNC 152e0dac50fSopenharmony_ci */ 153e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, DrawMasking01, Function | SmallTest | Level1) 154e0dac50fSopenharmony_ci{ 155e0dac50fSopenharmony_ci OHOS::Rosen::Rect screenRect = {0, 0, 0, 0}; 156e0dac50fSopenharmony_ci OHOS::Rosen::Rect transRect = {0, 0, 0, 0}; 157e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DrawMasking(nullptr, screenRect, transRect)); 158e0dac50fSopenharmony_ci 159e0dac50fSopenharmony_ci sptr<Window> window = CreateTestWindow("testDrawMasking"); 160e0dac50fSopenharmony_ci if (window == nullptr) { 161e0dac50fSopenharmony_ci return; 162e0dac50fSopenharmony_ci } 163e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window); 164e0dac50fSopenharmony_ci window->Show(); 165e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 166e0dac50fSopenharmony_ci 167e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 168e0dac50fSopenharmony_ci ASSERT_NE(surfaceNode, nullptr); 169e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DrawMasking(surfaceNode, screenRect, transRect)); 170e0dac50fSopenharmony_ci 171e0dac50fSopenharmony_ci screenRect.width_ = displayWidth_; 172e0dac50fSopenharmony_ci screenRect.height_ = displayHeight_; 173e0dac50fSopenharmony_ci transRect.width_ = displayWidth_; 174e0dac50fSopenharmony_ci transRect.height_ = displayHeight_; 175e0dac50fSopenharmony_ci SurfaceDraw::DrawMasking(surfaceNode, screenRect, transRect); 176e0dac50fSopenharmony_ci window->Destroy(); 177e0dac50fSopenharmony_ci} 178e0dac50fSopenharmony_ci/** 179e0dac50fSopenharmony_ci * @tc.name: DoDrawImageRect 180e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::DoDrawImageRect test 181e0dac50fSopenharmony_ci * @tc.type: FUNC 182e0dac50fSopenharmony_ci */ 183e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, DoDrawImageRect01, Function | SmallTest | Level1) 184e0dac50fSopenharmony_ci{ 185e0dac50fSopenharmony_ci sptr<Window> window = CreateTestWindow("testDoDrawImageRect"); 186e0dac50fSopenharmony_ci if (window == nullptr) { 187e0dac50fSopenharmony_ci return; 188e0dac50fSopenharmony_ci } 189e0dac50fSopenharmony_ci ASSERT_NE(window, nullptr); 190e0dac50fSopenharmony_ci window->Show(); 191e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 192e0dac50fSopenharmony_ci 193e0dac50fSopenharmony_ci OHOS::Rosen::Rect rect = window->GetRect(); 194e0dac50fSopenharmony_ci uint32_t color = 0x00660000; 195e0dac50fSopenharmony_ci 196e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 197e0dac50fSopenharmony_ci ASSERT_NE(surfaceNode, nullptr); 198e0dac50fSopenharmony_ci sptr<OHOS::Surface> layer = SurfaceDraw::GetLayer(surfaceNode); 199e0dac50fSopenharmony_ci ASSERT_NE(layer, nullptr); 200e0dac50fSopenharmony_ci sptr<OHOS::SurfaceBuffer> buffer = SurfaceDraw::GetSurfaceBuffer(layer, rect.width_, rect.height_); 201e0dac50fSopenharmony_ci if (buffer == nullptr) { 202e0dac50fSopenharmony_ci return; 203e0dac50fSopenharmony_ci } 204e0dac50fSopenharmony_ci 205e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DoDrawImageRect(buffer, rect, nullptr, color, false)); 206e0dac50fSopenharmony_ci 207e0dac50fSopenharmony_ci std::shared_ptr<Media::PixelMap> pixelMap = SurfaceDraw::DecodeImageToPixelMap(IMAGE_PLACE_HOLDER_PNG_PATH); 208e0dac50fSopenharmony_ci ASSERT_NE(pixelMap, nullptr); 209e0dac50fSopenharmony_ci 210e0dac50fSopenharmony_ci ASSERT_TRUE(SurfaceDraw::DoDrawImageRect(buffer, rect, pixelMap, color, false)); 211e0dac50fSopenharmony_ci window->Destroy(); 212e0dac50fSopenharmony_ci} 213e0dac50fSopenharmony_ci/** 214e0dac50fSopenharmony_ci * @tc.name: GetSurfaceSnapshot 215e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::GetSurfaceSnapshot test 216e0dac50fSopenharmony_ci * @tc.type: FUNC 217e0dac50fSopenharmony_ci */ 218e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, GetSurfaceSnapshot01, Function | SmallTest | Level1) 219e0dac50fSopenharmony_ci{ 220e0dac50fSopenharmony_ci sptr<Window> window = CreateTestWindow("testDoDrawImageRect"); 221e0dac50fSopenharmony_ci if (window == nullptr) { 222e0dac50fSopenharmony_ci return; 223e0dac50fSopenharmony_ci } 224e0dac50fSopenharmony_ci ASSERT_NE(window, nullptr); 225e0dac50fSopenharmony_ci window->Show(); 226e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 227e0dac50fSopenharmony_ci 228e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 229e0dac50fSopenharmony_ci ASSERT_NE(surfaceNode, nullptr); 230e0dac50fSopenharmony_ci 231e0dac50fSopenharmony_ci std::shared_ptr<Media::PixelMap> pixelMap = SurfaceDraw::DecodeImageToPixelMap(IMAGE_PLACE_HOLDER_PNG_PATH); 232e0dac50fSopenharmony_ci ASSERT_NE(pixelMap, nullptr); 233e0dac50fSopenharmony_ci 234e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::GetSurfaceSnapshot(nullptr, pixelMap, 0, 0, 0)); 235e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::GetSurfaceSnapshot(surfaceNode, pixelMap, 0, 0, 0)); 236e0dac50fSopenharmony_ci window->Destroy(); 237e0dac50fSopenharmony_ci} 238e0dac50fSopenharmony_ci 239e0dac50fSopenharmony_ci/** 240e0dac50fSopenharmony_ci * @tc.name: DrawColor 241e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::DrawColor test 242e0dac50fSopenharmony_ci * @tc.type: FUNC 243e0dac50fSopenharmony_ci */ 244e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, DrawColor01, Function | SmallTest | Level1) 245e0dac50fSopenharmony_ci{ 246e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DrawColor(nullptr, 0, 0, 0)); 247e0dac50fSopenharmony_ci sptr<Window> window = CreateTestWindow("DrawColor"); 248e0dac50fSopenharmony_ci if (window == nullptr) { 249e0dac50fSopenharmony_ci return; 250e0dac50fSopenharmony_ci } 251e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window); 252e0dac50fSopenharmony_ci window->Show(); 253e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 254e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 255e0dac50fSopenharmony_ci ASSERT_NE(surfaceNode, nullptr); 256e0dac50fSopenharmony_ci uint32_t width = window->GetRect().width_; 257e0dac50fSopenharmony_ci uint32_t height = window->GetRect().height_; 258e0dac50fSopenharmony_ci uint32_t color = 0x00660000; 259e0dac50fSopenharmony_ci SurfaceDraw::DrawColor(surfaceNode, width, height, color); 260e0dac50fSopenharmony_ci SurfaceDraw::DrawColor(surfaceNode, -1, -1, color); 261e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window->Destroy()); 262e0dac50fSopenharmony_ci} 263e0dac50fSopenharmony_ci 264e0dac50fSopenharmony_ci/** 265e0dac50fSopenharmony_ci * @tc.name: DoDraw 266e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::DoDraw test 267e0dac50fSopenharmony_ci * @tc.type: FUNC 268e0dac50fSopenharmony_ci */ 269e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, DoDraw01, Function | SmallTest | Level1) 270e0dac50fSopenharmony_ci{ 271e0dac50fSopenharmony_ci sptr<Window> window = CreateTestWindow("DoDrawTest01"); 272e0dac50fSopenharmony_ci if (window == nullptr) { 273e0dac50fSopenharmony_ci return; 274e0dac50fSopenharmony_ci } 275e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window); 276e0dac50fSopenharmony_ci window->Show(); 277e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 278e0dac50fSopenharmony_ci OHOS::Rosen::Rect rect = window->GetRect(); 279e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 280e0dac50fSopenharmony_ci ASSERT_NE(surfaceNode, nullptr); 281e0dac50fSopenharmony_ci sptr<OHOS::Surface> layer = SurfaceDraw::GetLayer(surfaceNode); 282e0dac50fSopenharmony_ci ASSERT_NE(layer, nullptr); 283e0dac50fSopenharmony_ci sptr<OHOS::SurfaceBuffer> buffer = SurfaceDraw::GetSurfaceBuffer(layer, rect.width_, rect.height_); 284e0dac50fSopenharmony_ci ASSERT_NE(buffer, nullptr); 285e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DoDraw(nullptr, 0, 0, "")); 286e0dac50fSopenharmony_ci window->Destroy(); 287e0dac50fSopenharmony_ci} 288e0dac50fSopenharmony_ci 289e0dac50fSopenharmony_ci/** 290e0dac50fSopenharmony_ci * @tc.name: DoDraw 291e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::DoDraw02 test 292e0dac50fSopenharmony_ci * @tc.type: FUNC 293e0dac50fSopenharmony_ci */ 294e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, DoDraw02, Function | SmallTest | Level1) 295e0dac50fSopenharmony_ci{ 296e0dac50fSopenharmony_ci sptr<Window> window = CreateTestWindow("DoDraw02"); 297e0dac50fSopenharmony_ci if (window == nullptr) { 298e0dac50fSopenharmony_ci return; 299e0dac50fSopenharmony_ci } 300e0dac50fSopenharmony_ci ASSERT_NE(window, nullptr); 301e0dac50fSopenharmony_ci window->Show(); 302e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 303e0dac50fSopenharmony_ci OHOS::Rosen::Rect rect = window->GetRect(); 304e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 305e0dac50fSopenharmony_ci ASSERT_NE(surfaceNode, nullptr); 306e0dac50fSopenharmony_ci sptr<OHOS::Surface> layer = SurfaceDraw::GetLayer(surfaceNode); 307e0dac50fSopenharmony_ci ASSERT_NE(layer, nullptr); 308e0dac50fSopenharmony_ci sptr<OHOS::SurfaceBuffer> buffer = SurfaceDraw::GetSurfaceBuffer(layer, rect.width_, rect.height_); 309e0dac50fSopenharmony_ci if (buffer == nullptr) { 310e0dac50fSopenharmony_ci return; 311e0dac50fSopenharmony_ci } 312e0dac50fSopenharmony_ci std::shared_ptr<Media::PixelMap> pixelMap = SurfaceDraw::DecodeImageToPixelMap(IMAGE_PLACE_HOLDER_PNG_PATH); 313e0dac50fSopenharmony_ci ASSERT_NE(pixelMap, nullptr); 314e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DoDraw(nullptr, 0, 0, pixelMap)); 315e0dac50fSopenharmony_ci window->Destroy(); 316e0dac50fSopenharmony_ci} 317e0dac50fSopenharmony_ci 318e0dac50fSopenharmony_ci/** 319e0dac50fSopenharmony_ci * @tc.name: DoDraw03 320e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::DoDraw03 test 321e0dac50fSopenharmony_ci * @tc.type: FUNC 322e0dac50fSopenharmony_ci */ 323e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, DoDraw03, Function | SmallTest | Level1) 324e0dac50fSopenharmony_ci{ 325e0dac50fSopenharmony_ci sptr<Window> window = CreateTestWindow("DoDrawTest03"); 326e0dac50fSopenharmony_ci if (window == nullptr) { 327e0dac50fSopenharmony_ci return; 328e0dac50fSopenharmony_ci } 329e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window); 330e0dac50fSopenharmony_ci window->Show(); 331e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 332e0dac50fSopenharmony_ci OHOS::Rosen::Rect rect = window->GetRect(); 333e0dac50fSopenharmony_ci uint32_t color = 0x00660000; 334e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 335e0dac50fSopenharmony_ci ASSERT_NE(surfaceNode, nullptr); 336e0dac50fSopenharmony_ci sptr<OHOS::Surface> layer = SurfaceDraw::GetLayer(surfaceNode); 337e0dac50fSopenharmony_ci ASSERT_NE(layer, nullptr); 338e0dac50fSopenharmony_ci sptr<OHOS::SurfaceBuffer> buffer = SurfaceDraw::GetSurfaceBuffer(layer, rect.width_, rect.height_); 339e0dac50fSopenharmony_ci if (buffer == nullptr) { 340e0dac50fSopenharmony_ci return; 341e0dac50fSopenharmony_ci } 342e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DoDraw(nullptr, 0, 0, color)); 343e0dac50fSopenharmony_ci window->Destroy(); 344e0dac50fSopenharmony_ci} 345e0dac50fSopenharmony_ci 346e0dac50fSopenharmony_ci/** 347e0dac50fSopenharmony_ci * @tc.name: DrawImageRect 348e0dac50fSopenharmony_ci * @tc.desc: SurfaceDraw::DoDrawImageRect test 349e0dac50fSopenharmony_ci * @tc.type: FUNC 350e0dac50fSopenharmony_ci */ 351e0dac50fSopenharmony_ciHWTEST_F(SurfaceDrawTest, DrawImageRect01, Function | SmallTest | Level1) 352e0dac50fSopenharmony_ci{ 353e0dac50fSopenharmony_ci sptr<Window> window = CreateTestWindow("DrawImageRect"); 354e0dac50fSopenharmony_ci if (window == nullptr) { 355e0dac50fSopenharmony_ci return; 356e0dac50fSopenharmony_ci } 357e0dac50fSopenharmony_ci ASSERT_NE(window, nullptr); 358e0dac50fSopenharmony_ci window->Show(); 359e0dac50fSopenharmony_ci usleep(WAIT_FOR_SYNC_US / 20); // wait for rect updated 360e0dac50fSopenharmony_ci OHOS::Rosen::Rect rect = window->GetRect(); 361e0dac50fSopenharmony_ci uint32_t color = 0x00660000; 362e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 363e0dac50fSopenharmony_ci ASSERT_NE(surfaceNode, nullptr); 364e0dac50fSopenharmony_ci ASSERT_FALSE(SurfaceDraw::DrawImageRect(surfaceNode, rect, nullptr, color, false)); 365e0dac50fSopenharmony_ci std::shared_ptr<Media::PixelMap> pixelMap = SurfaceDraw::DecodeImageToPixelMap(IMAGE_PLACE_HOLDER_PNG_PATH); 366e0dac50fSopenharmony_ci ASSERT_NE(pixelMap, nullptr); 367e0dac50fSopenharmony_ci SurfaceDraw::DrawImageRect(surfaceNode, rect, pixelMap, color, false); 368e0dac50fSopenharmony_ci window->Destroy(); 369e0dac50fSopenharmony_ci} 370e0dac50fSopenharmony_ci} 371e0dac50fSopenharmony_ci} // namespace Rosen 372e0dac50fSopenharmony_ci} // namespace OHOS