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}