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#include <fcntl.h> 16e0dac50fSopenharmony_ci#include <gtest/gtest.h> 17e0dac50fSopenharmony_ci 18e0dac50fSopenharmony_ci#include "display_manager.h" 19e0dac50fSopenharmony_ci#include "window_dumper.h" 20e0dac50fSopenharmony_ci#include "window_manager_service.h" 21e0dac50fSopenharmony_ci#include "window_impl.h" 22e0dac50fSopenharmony_ci#include "window_agent.h" 23e0dac50fSopenharmony_ci 24e0dac50fSopenharmony_ciusing namespace testing; 25e0dac50fSopenharmony_ciusing namespace testing::ext; 26e0dac50fSopenharmony_ci 27e0dac50fSopenharmony_cinamespace OHOS { 28e0dac50fSopenharmony_cinamespace Rosen { 29e0dac50fSopenharmony_ciclass WindowDumperTest : public testing::Test { 30e0dac50fSopenharmony_cipublic: 31e0dac50fSopenharmony_ci static void SetUpTestCase(); 32e0dac50fSopenharmony_ci static void TearDownTestCase(); 33e0dac50fSopenharmony_ci void SetUp() override; 34e0dac50fSopenharmony_ci void TearDown() override; 35e0dac50fSopenharmony_ci static const std::string dumpFile_; 36e0dac50fSopenharmony_ci}; 37e0dac50fSopenharmony_ci 38e0dac50fSopenharmony_ciconst std::string WindowDumperTest::dumpFile_ = "data/window_dump_test.txt"; 39e0dac50fSopenharmony_ci 40e0dac50fSopenharmony_civoid WindowDumperTest::SetUpTestCase() 41e0dac50fSopenharmony_ci{ 42e0dac50fSopenharmony_ci auto display = DisplayManager::GetInstance().GetDefaultDisplay(); 43e0dac50fSopenharmony_ci ASSERT_TRUE((display != nullptr)); 44e0dac50fSopenharmony_ci sptr<DisplayInfo> displayInfo = display->GetDisplayInfo(); 45e0dac50fSopenharmony_ci ASSERT_TRUE((displayInfo != nullptr)); 46e0dac50fSopenharmony_ci 47e0dac50fSopenharmony_ci displayInfo->SetScreenGroupId(0); 48e0dac50fSopenharmony_ci WindowManagerService::GetInstance().windowRoot_->CreateWindowNodeContainer(0, displayInfo); 49e0dac50fSopenharmony_ci} 50e0dac50fSopenharmony_ci 51e0dac50fSopenharmony_civoid WindowDumperTest::TearDownTestCase() 52e0dac50fSopenharmony_ci{ 53e0dac50fSopenharmony_ci unlink(dumpFile_.c_str()); 54e0dac50fSopenharmony_ci} 55e0dac50fSopenharmony_ci 56e0dac50fSopenharmony_civoid WindowDumperTest::SetUp() 57e0dac50fSopenharmony_ci{ 58e0dac50fSopenharmony_ci} 59e0dac50fSopenharmony_ci 60e0dac50fSopenharmony_civoid WindowDumperTest::TearDown() 61e0dac50fSopenharmony_ci{ 62e0dac50fSopenharmony_ci} 63e0dac50fSopenharmony_ci 64e0dac50fSopenharmony_cinamespace { 65e0dac50fSopenharmony_ci/** 66e0dac50fSopenharmony_ci * @tc.name: Dump01 67e0dac50fSopenharmony_ci * @tc.desc: Dump 68e0dac50fSopenharmony_ci * @tc.type: FUNC 69e0dac50fSopenharmony_ci */ 70e0dac50fSopenharmony_ciHWTEST_F(WindowDumperTest, Dump01, Function | SmallTest | Level1) 71e0dac50fSopenharmony_ci{ 72e0dac50fSopenharmony_ci sptr<WindowDumper> windowDumper; 73e0dac50fSopenharmony_ci windowDumper = new WindowDumper(WindowManagerService::GetInstance().windowRoot_); 74e0dac50fSopenharmony_ci int fd = open(dumpFile_.c_str(), O_RDWR | O_CREAT | O_TRUNC, 0666); 75e0dac50fSopenharmony_ci if (fd == -1) { 76e0dac50fSopenharmony_ci return; 77e0dac50fSopenharmony_ci } 78e0dac50fSopenharmony_ci std::vector<std::u16string> args; 79e0dac50fSopenharmony_ci WMError ret = windowDumper->Dump(fd, args); 80e0dac50fSopenharmony_ci ASSERT_EQ(ret, WMError::WM_OK); 81e0dac50fSopenharmony_ci close(fd); 82e0dac50fSopenharmony_ci} 83e0dac50fSopenharmony_ci 84e0dac50fSopenharmony_ci/** 85e0dac50fSopenharmony_ci * @tc.name: Dump02 86e0dac50fSopenharmony_ci * @tc.desc: Dump fd less 0 87e0dac50fSopenharmony_ci * @tc.type: FUNC 88e0dac50fSopenharmony_ci */ 89e0dac50fSopenharmony_ciHWTEST_F(WindowDumperTest, Dump02, Function | SmallTest | Level1) 90e0dac50fSopenharmony_ci{ 91e0dac50fSopenharmony_ci sptr<WindowDumper> windowDumper; 92e0dac50fSopenharmony_ci windowDumper = new WindowDumper(WindowManagerService::GetInstance().windowRoot_); 93e0dac50fSopenharmony_ci int fd = -1; 94e0dac50fSopenharmony_ci std::vector<std::u16string> args; 95e0dac50fSopenharmony_ci WMError ret = windowDumper->Dump(fd, args); 96e0dac50fSopenharmony_ci ASSERT_EQ(ret, WMError::WM_ERROR_INVALID_PARAM); 97e0dac50fSopenharmony_ci} 98e0dac50fSopenharmony_ci 99e0dac50fSopenharmony_ci/** 100e0dac50fSopenharmony_ci * @tc.name: Dump04 101e0dac50fSopenharmony_ci * @tc.desc: Dump one param with '-x' 102e0dac50fSopenharmony_ci * @tc.type: FUNC 103e0dac50fSopenharmony_ci */ 104e0dac50fSopenharmony_ciHWTEST_F(WindowDumperTest, Dump04, Function | SmallTest | Level1) 105e0dac50fSopenharmony_ci{ 106e0dac50fSopenharmony_ci sptr<WindowDumper> windowDumper; 107e0dac50fSopenharmony_ci windowDumper = new WindowDumper(WindowManagerService::GetInstance().windowRoot_); 108e0dac50fSopenharmony_ci int fd = 2; 109e0dac50fSopenharmony_ci std::vector<std::u16string> args; 110e0dac50fSopenharmony_ci const std::u16string DUMP_HELP = u"-x"; 111e0dac50fSopenharmony_ci args.emplace_back(DUMP_HELP); 112e0dac50fSopenharmony_ci WMError ret = windowDumper->Dump(fd, args); 113e0dac50fSopenharmony_ci ASSERT_EQ(ret, WMError::WM_OK); 114e0dac50fSopenharmony_ci} 115e0dac50fSopenharmony_ci 116e0dac50fSopenharmony_ci/** 117e0dac50fSopenharmony_ci * @tc.name: Dump05 118e0dac50fSopenharmony_ci * @tc.desc: Dump two param with '-a' 119e0dac50fSopenharmony_ci * @tc.type: FUNC 120e0dac50fSopenharmony_ci */ 121e0dac50fSopenharmony_ciHWTEST_F(WindowDumperTest, Dump05, Function | SmallTest | Level1) 122e0dac50fSopenharmony_ci{ 123e0dac50fSopenharmony_ci sptr<WindowDumper> windowDumper; 124e0dac50fSopenharmony_ci windowDumper = new WindowDumper(WindowManagerService::GetInstance().windowRoot_); 125e0dac50fSopenharmony_ci int fd = 3; 126e0dac50fSopenharmony_ci std::vector<std::u16string> args; 127e0dac50fSopenharmony_ci const std::u16string DUMP_ALL = u"-a"; 128e0dac50fSopenharmony_ci args.emplace_back(DUMP_ALL); 129e0dac50fSopenharmony_ci WMError ret = windowDumper->Dump(fd, args); 130e0dac50fSopenharmony_ci ASSERT_TRUE(ret == WMError::WM_OK || ret == WMError::WM_ERROR_INVALID_OPERATION); 131e0dac50fSopenharmony_ci} 132e0dac50fSopenharmony_ci 133e0dac50fSopenharmony_ci/** 134e0dac50fSopenharmony_ci * @tc.name: Dump06 135e0dac50fSopenharmony_ci * @tc.desc: Dump two param with '-w 1' 136e0dac50fSopenharmony_ci * @tc.type: FUNC 137e0dac50fSopenharmony_ci */ 138e0dac50fSopenharmony_ciHWTEST_F(WindowDumperTest, Dump06, Function | SmallTest | Level1) 139e0dac50fSopenharmony_ci{ 140e0dac50fSopenharmony_ci sptr<WindowDumper> windowDumper; 141e0dac50fSopenharmony_ci windowDumper = new WindowDumper(WindowManagerService::GetInstance().windowRoot_); 142e0dac50fSopenharmony_ci int fd = 4; 143e0dac50fSopenharmony_ci std::vector<std::u16string> args; 144e0dac50fSopenharmony_ci const std::u16string DUMP_WINDOW = u"-w"; 145e0dac50fSopenharmony_ci const std::u16string DUMP_WINDOW_ID = u"3"; 146e0dac50fSopenharmony_ci args.emplace_back(DUMP_WINDOW); 147e0dac50fSopenharmony_ci args.emplace_back(DUMP_WINDOW_ID); 148e0dac50fSopenharmony_ci WMError ret = windowDumper->Dump(fd, args); 149e0dac50fSopenharmony_ci ASSERT_TRUE(ret == WMError::WM_OK || ret == WMError::WM_ERROR_INVALID_OPERATION); 150e0dac50fSopenharmony_ci} 151e0dac50fSopenharmony_ci 152e0dac50fSopenharmony_ci/** 153e0dac50fSopenharmony_ci * @tc.name: Dump07 154e0dac50fSopenharmony_ci * @tc.desc: Dump two param with '-w n' 155e0dac50fSopenharmony_ci * @tc.type: FUNC 156e0dac50fSopenharmony_ci */ 157e0dac50fSopenharmony_ciHWTEST_F(WindowDumperTest, Dump07, Function | SmallTest | Level1) 158e0dac50fSopenharmony_ci{ 159e0dac50fSopenharmony_ci sptr<WindowDumper> windowDumper; 160e0dac50fSopenharmony_ci windowDumper = new WindowDumper(WindowManagerService::GetInstance().windowRoot_); 161e0dac50fSopenharmony_ci int fd = 5; 162e0dac50fSopenharmony_ci std::vector<std::u16string> args; 163e0dac50fSopenharmony_ci const std::u16string DUMP_WINDOW = u"-w"; 164e0dac50fSopenharmony_ci const std::u16string DUMP_WINDOW_ID = u"n"; 165e0dac50fSopenharmony_ci args.emplace_back(DUMP_WINDOW); 166e0dac50fSopenharmony_ci args.emplace_back(DUMP_WINDOW_ID); 167e0dac50fSopenharmony_ci WMError ret = windowDumper->Dump(fd, args); 168e0dac50fSopenharmony_ci ASSERT_EQ(ret, WMError::WM_ERROR_INVALID_OPERATION); 169e0dac50fSopenharmony_ci} 170e0dac50fSopenharmony_ci 171e0dac50fSopenharmony_ci/** 172e0dac50fSopenharmony_ci * @tc.name: ShowAceDumpHelp01 173e0dac50fSopenharmony_ci * @tc.desc: ShowAceDumpHelp 174e0dac50fSopenharmony_ci * @tc.type: FUNC 175e0dac50fSopenharmony_ci */ 176e0dac50fSopenharmony_ciHWTEST_F(WindowDumperTest, ShowAceDumpHelp01, Function | SmallTest | Level1) 177e0dac50fSopenharmony_ci{ 178e0dac50fSopenharmony_ci sptr<WindowDumper> windowDumper; 179e0dac50fSopenharmony_ci windowDumper = new WindowDumper(WindowManagerService::GetInstance().windowRoot_); 180e0dac50fSopenharmony_ci std::string dumpInfo; 181e0dac50fSopenharmony_ci windowDumper->ShowAceDumpHelp(dumpInfo); 182e0dac50fSopenharmony_ci WindowManagerService::GetInstance().windowRoot_->windowNodeMap_.clear(); 183e0dac50fSopenharmony_ci ASSERT_TRUE(dumpInfo.empty()); 184e0dac50fSopenharmony_ci} 185e0dac50fSopenharmony_ci 186e0dac50fSopenharmony_ci/** 187e0dac50fSopenharmony_ci * @tc.name: ShowAceDumpHelp02 188e0dac50fSopenharmony_ci * @tc.desc: ShowAceDumpHelp 189e0dac50fSopenharmony_ci * @tc.type: FUNC 190e0dac50fSopenharmony_ci */ 191e0dac50fSopenharmony_ciHWTEST_F(WindowDumperTest, ShowAceDumpHelp02, Function | SmallTest | Level1) 192e0dac50fSopenharmony_ci{ 193e0dac50fSopenharmony_ci sptr<WindowDumper> windowDumper; 194e0dac50fSopenharmony_ci windowDumper = new WindowDumper(WindowManagerService::GetInstance().windowRoot_); 195e0dac50fSopenharmony_ci std::string dumpInfo; 196e0dac50fSopenharmony_ci windowDumper->ShowAceDumpHelp(dumpInfo); 197e0dac50fSopenharmony_ci WindowManagerService::GetInstance().windowRoot_->windowNodeMap_.clear(); 198e0dac50fSopenharmony_ci ASSERT_TRUE(dumpInfo.empty()); 199e0dac50fSopenharmony_ci} 200e0dac50fSopenharmony_ci} 201e0dac50fSopenharmony_ci} 202e0dac50fSopenharmony_ci}