1885b47fbSopenharmony_ci/*
2885b47fbSopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
3885b47fbSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4885b47fbSopenharmony_ci * you may not use this file except in compliance with the License.
5885b47fbSopenharmony_ci * You may obtain a copy of the License at
6885b47fbSopenharmony_ci *
7885b47fbSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8885b47fbSopenharmony_ci *
9885b47fbSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10885b47fbSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11885b47fbSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12885b47fbSopenharmony_ci * See the License for the specific language governing permissions and
13885b47fbSopenharmony_ci * limitations under the License.
14885b47fbSopenharmony_ci */
15885b47fbSopenharmony_ci
16885b47fbSopenharmony_ci#include <fcntl.h>
17885b47fbSopenharmony_ci#include <gtest/gtest.h>
18885b47fbSopenharmony_ci#include <unistd.h>
19885b47fbSopenharmony_ci#include "accessibility_dumper.h"
20885b47fbSopenharmony_ci#include "accessibility_ut_helper.h"
21885b47fbSopenharmony_ci#include "mock_accessible_ability_connection.h"
22885b47fbSopenharmony_ci#include "mock_accessible_ability_manager_service.h"
23885b47fbSopenharmony_ci#include "string_ex.h"
24885b47fbSopenharmony_ci
25885b47fbSopenharmony_ciusing namespace testing;
26885b47fbSopenharmony_ciusing namespace testing::ext;
27885b47fbSopenharmony_ci
28885b47fbSopenharmony_cinamespace OHOS {
29885b47fbSopenharmony_cinamespace Accessibility {
30885b47fbSopenharmony_ciclass AccessibilityDumperUnitTest : public ::testing::Test {
31885b47fbSopenharmony_cipublic:
32885b47fbSopenharmony_ci    AccessibilityDumperUnitTest()
33885b47fbSopenharmony_ci    {}
34885b47fbSopenharmony_ci    ~AccessibilityDumperUnitTest()
35885b47fbSopenharmony_ci    {}
36885b47fbSopenharmony_ci
37885b47fbSopenharmony_ci    static void SetUpTestCase();
38885b47fbSopenharmony_ci    static void TearDownTestCase();
39885b47fbSopenharmony_ci    void SetUp() override;
40885b47fbSopenharmony_ci    void TearDown() override;
41885b47fbSopenharmony_ci
42885b47fbSopenharmony_ci    int fd_ = -1;
43885b47fbSopenharmony_ci    sptr<AccessibilityDumper> dumper_ = nullptr;
44885b47fbSopenharmony_ci};
45885b47fbSopenharmony_ci
46885b47fbSopenharmony_civoid AccessibilityDumperUnitTest::SetUpTestCase()
47885b47fbSopenharmony_ci{
48885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "###################### AccessibilityDumperUnitTest Start ######################";
49885b47fbSopenharmony_ci}
50885b47fbSopenharmony_ci
51885b47fbSopenharmony_civoid AccessibilityDumperUnitTest::TearDownTestCase()
52885b47fbSopenharmony_ci{
53885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "###################### AccessibilityDumperUnitTest End ######################";
54885b47fbSopenharmony_ci}
55885b47fbSopenharmony_ci
56885b47fbSopenharmony_civoid AccessibilityDumperUnitTest::SetUp()
57885b47fbSopenharmony_ci{
58885b47fbSopenharmony_ci    fd_ = open("/dev/stdout", O_WRONLY);
59885b47fbSopenharmony_ci    dumper_ = new AccessibilityDumper();
60885b47fbSopenharmony_ci}
61885b47fbSopenharmony_ci
62885b47fbSopenharmony_civoid AccessibilityDumperUnitTest::TearDown()
63885b47fbSopenharmony_ci{
64885b47fbSopenharmony_ci    close(fd_);
65885b47fbSopenharmony_ci    fd_ = -1;
66885b47fbSopenharmony_ci    dumper_ = nullptr;
67885b47fbSopenharmony_ci}
68885b47fbSopenharmony_ci
69885b47fbSopenharmony_ci/**
70885b47fbSopenharmony_ci * @tc.number: AccessibilityDumper_Unittest_Dump_001
71885b47fbSopenharmony_ci * @tc.name: Dump
72885b47fbSopenharmony_ci * @tc.desc: Test function Dump
73885b47fbSopenharmony_ci */
74885b47fbSopenharmony_ciHWTEST_F(AccessibilityDumperUnitTest, AccessibilityDumper_Unittest_Dump_001, TestSize.Level1)
75885b47fbSopenharmony_ci{
76885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_001 start";
77885b47fbSopenharmony_ci
78885b47fbSopenharmony_ci    std::vector<std::u16string> args;
79885b47fbSopenharmony_ci    int ret = dumper_->Dump(-1, args);
80885b47fbSopenharmony_ci    EXPECT_EQ(-1, ret);
81885b47fbSopenharmony_ci
82885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_001 end";
83885b47fbSopenharmony_ci}
84885b47fbSopenharmony_ci
85885b47fbSopenharmony_ci/**
86885b47fbSopenharmony_ci * @tc.number: AccessibilityDumper_Unittest_Dump_002
87885b47fbSopenharmony_ci * @tc.name: Dump
88885b47fbSopenharmony_ci * @tc.desc: Test function Dump
89885b47fbSopenharmony_ci */
90885b47fbSopenharmony_ciHWTEST_F(AccessibilityDumperUnitTest, AccessibilityDumper_Unittest_Dump_002, TestSize.Level1)
91885b47fbSopenharmony_ci{
92885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_002 start";
93885b47fbSopenharmony_ci
94885b47fbSopenharmony_ci    std::vector<std::u16string> args;
95885b47fbSopenharmony_ci    int ret = dumper_->Dump(fd_, args);
96885b47fbSopenharmony_ci    EXPECT_GE(ret, -1);
97885b47fbSopenharmony_ci
98885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_002 end";
99885b47fbSopenharmony_ci}
100885b47fbSopenharmony_ci
101885b47fbSopenharmony_ci/**
102885b47fbSopenharmony_ci * @tc.number: AccessibilityDumper_Unittest_Dump_003
103885b47fbSopenharmony_ci * @tc.name: Dump
104885b47fbSopenharmony_ci * @tc.desc: Test function Dump
105885b47fbSopenharmony_ci */
106885b47fbSopenharmony_ciHWTEST_F(AccessibilityDumperUnitTest, AccessibilityDumper_Unittest_Dump_003, TestSize.Level1)
107885b47fbSopenharmony_ci{
108885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_003 start";
109885b47fbSopenharmony_ci
110885b47fbSopenharmony_ci    std::string cmdHelp("-h");
111885b47fbSopenharmony_ci    std::vector<std::u16string> args;
112885b47fbSopenharmony_ci    args.emplace_back(Str8ToStr16(cmdHelp));
113885b47fbSopenharmony_ci    int ret = dumper_->Dump(fd_, args);
114885b47fbSopenharmony_ci    EXPECT_GE(ret, -1);
115885b47fbSopenharmony_ci
116885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_003 end";
117885b47fbSopenharmony_ci}
118885b47fbSopenharmony_ci
119885b47fbSopenharmony_ci/**
120885b47fbSopenharmony_ci * @tc.number: AccessibilityDumper_Unittest_Dump_004
121885b47fbSopenharmony_ci * @tc.name: Dump
122885b47fbSopenharmony_ci * @tc.desc: Test function Dump
123885b47fbSopenharmony_ci */
124885b47fbSopenharmony_ciHWTEST_F(AccessibilityDumperUnitTest, AccessibilityDumper_Unittest_Dump_004, TestSize.Level1)
125885b47fbSopenharmony_ci{
126885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_004 start";
127885b47fbSopenharmony_ci    sptr<AccessibilityAccountData> currentAccount =
128885b47fbSopenharmony_ci        Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
129885b47fbSopenharmony_ci    if (!currentAccount) {
130885b47fbSopenharmony_ci        GTEST_LOG_(ERROR) << "Account data is nullptr";
131885b47fbSopenharmony_ci        return;
132885b47fbSopenharmony_ci    }
133885b47fbSopenharmony_ci    std::shared_ptr<AccessibilitySettingsConfig> config = currentAccount->GetConfig();
134885b47fbSopenharmony_ci    if (!config) {
135885b47fbSopenharmony_ci        GTEST_LOG_(ERROR) << "Config is nullptr";
136885b47fbSopenharmony_ci        return;
137885b47fbSopenharmony_ci    }
138885b47fbSopenharmony_ci    config->SetCaptionState(true);
139885b47fbSopenharmony_ci
140885b47fbSopenharmony_ci    std::string cmdUser("-u");
141885b47fbSopenharmony_ci    std::vector<std::u16string> args;
142885b47fbSopenharmony_ci    args.emplace_back(Str8ToStr16(cmdUser));
143885b47fbSopenharmony_ci    int ret = dumper_->Dump(fd_, args);
144885b47fbSopenharmony_ci    EXPECT_GE(ret, -1);
145885b47fbSopenharmony_ci
146885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_004 end";
147885b47fbSopenharmony_ci}
148885b47fbSopenharmony_ci
149885b47fbSopenharmony_ci/**
150885b47fbSopenharmony_ci * @tc.number: AccessibilityDumper_Unittest_Dump_005
151885b47fbSopenharmony_ci * @tc.name: Dump
152885b47fbSopenharmony_ci * @tc.desc: Test function Dump
153885b47fbSopenharmony_ci */
154885b47fbSopenharmony_ciHWTEST_F(AccessibilityDumperUnitTest, AccessibilityDumper_Unittest_Dump_005, TestSize.Level1)
155885b47fbSopenharmony_ci{
156885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_005 start";
157885b47fbSopenharmony_ci    AccessibilityAbilityInitParams initParams;
158885b47fbSopenharmony_ci    initParams.bundleName = "ohos";
159885b47fbSopenharmony_ci    initParams.moduleName = "accessibility";
160885b47fbSopenharmony_ci    initParams.name = "test";
161885b47fbSopenharmony_ci    initParams.description = "for dumper-ut";
162885b47fbSopenharmony_ci    std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
163885b47fbSopenharmony_ci    sptr<AccessibilityAccountData> currentAccount =
164885b47fbSopenharmony_ci        Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
165885b47fbSopenharmony_ci    if (!currentAccount) {
166885b47fbSopenharmony_ci        GTEST_LOG_(ERROR) << "Account data is nullptr";
167885b47fbSopenharmony_ci        return;
168885b47fbSopenharmony_ci    }
169885b47fbSopenharmony_ci    sptr<AccessibleAbilityConnection> connection =
170885b47fbSopenharmony_ci        new MockAccessibleAbilityConnection(currentAccount->GetAccountId(), 0, *abilityInfo);
171885b47fbSopenharmony_ci    if (!connection) {
172885b47fbSopenharmony_ci        GTEST_LOG_(ERROR) << "Connection is nullptr";
173885b47fbSopenharmony_ci        return;
174885b47fbSopenharmony_ci    }
175885b47fbSopenharmony_ci    currentAccount->AddConnectedAbility(connection);
176885b47fbSopenharmony_ci
177885b47fbSopenharmony_ci    std::string cmdClient("-c");
178885b47fbSopenharmony_ci    std::vector<std::u16string> args;
179885b47fbSopenharmony_ci    args.emplace_back(Str8ToStr16(cmdClient));
180885b47fbSopenharmony_ci    int ret = dumper_->Dump(fd_, args);
181885b47fbSopenharmony_ci    EXPECT_GE(ret, -1);
182885b47fbSopenharmony_ci
183885b47fbSopenharmony_ci    currentAccount->RemoveConnectedAbility(connection->GetElementName());
184885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_005 end";
185885b47fbSopenharmony_ci}
186885b47fbSopenharmony_ci
187885b47fbSopenharmony_ci/**
188885b47fbSopenharmony_ci * @tc.number: AccessibilityDumper_Unittest_Dump_006
189885b47fbSopenharmony_ci * @tc.name: Dump
190885b47fbSopenharmony_ci * @tc.desc: Test function Dump.
191885b47fbSopenharmony_ci */
192885b47fbSopenharmony_ciHWTEST_F(AccessibilityDumperUnitTest, AccessibilityDumper_Unittest_Dump_006, TestSize.Level1)
193885b47fbSopenharmony_ci{
194885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_006 start";
195885b47fbSopenharmony_ci    const int32_t accountId = 1;
196885b47fbSopenharmony_ci    const int32_t windowId = 1;
197885b47fbSopenharmony_ci    sptr<AccessibilityAccountData> currentAccount =
198885b47fbSopenharmony_ci        Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
199885b47fbSopenharmony_ci    if (!currentAccount) {
200885b47fbSopenharmony_ci        GTEST_LOG_(ERROR) << "Account data is nullptr";
201885b47fbSopenharmony_ci        return;
202885b47fbSopenharmony_ci    }
203885b47fbSopenharmony_ci    sptr<AccessibilityWindowConnection> operationConnection =
204885b47fbSopenharmony_ci        new AccessibilityWindowConnection(windowId, nullptr, accountId);
205885b47fbSopenharmony_ci    /* add asacConnections */
206885b47fbSopenharmony_ci    currentAccount->AddAccessibilityWindowConnection(windowId, operationConnection);
207885b47fbSopenharmony_ci
208885b47fbSopenharmony_ci    std::string cmdWindow("-w");
209885b47fbSopenharmony_ci    std::vector<std::u16string> args;
210885b47fbSopenharmony_ci    args.emplace_back(Str8ToStr16(cmdWindow));
211885b47fbSopenharmony_ci    int ret = dumper_->Dump(fd_, args);
212885b47fbSopenharmony_ci    EXPECT_GE(ret, -1);
213885b47fbSopenharmony_ci
214885b47fbSopenharmony_ci    currentAccount->RemoveAccessibilityWindowConnection(windowId);
215885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_006 end";
216885b47fbSopenharmony_ci}
217885b47fbSopenharmony_ci
218885b47fbSopenharmony_ci/**
219885b47fbSopenharmony_ci * @tc.number: AccessibilityDumper_Unittest_Dump_007
220885b47fbSopenharmony_ci * @tc.name: Dump
221885b47fbSopenharmony_ci * @tc.desc: Test function Dump
222885b47fbSopenharmony_ci */
223885b47fbSopenharmony_ciHWTEST_F(AccessibilityDumperUnitTest, AccessibilityDumper_Unittest_Dump_007, TestSize.Level1)
224885b47fbSopenharmony_ci{
225885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_007 start";
226885b47fbSopenharmony_ci    sptr<AccessibilityAccountData> currentAccount =
227885b47fbSopenharmony_ci        Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
228885b47fbSopenharmony_ci
229885b47fbSopenharmony_ci    std::shared_ptr<AccessibilitySettingsConfig> config = currentAccount->GetConfig();
230885b47fbSopenharmony_ci    if (!config) {
231885b47fbSopenharmony_ci        GTEST_LOG_(ERROR) << "Config is nullptr";
232885b47fbSopenharmony_ci        return;
233885b47fbSopenharmony_ci    }
234885b47fbSopenharmony_ci    config->SetCaptionState(true);
235885b47fbSopenharmony_ci
236885b47fbSopenharmony_ci    std::string cmdUser("-u");
237885b47fbSopenharmony_ci    std::vector<std::u16string> args;
238885b47fbSopenharmony_ci    args.emplace_back(Str8ToStr16(cmdUser));
239885b47fbSopenharmony_ci    AccessibilityAbilityHelper::GetInstance().SetNeedAccountDataNullFlag(true);
240885b47fbSopenharmony_ci    int ret = dumper_->Dump(fd_, args);
241885b47fbSopenharmony_ci    EXPECT_GE(ret, -1);
242885b47fbSopenharmony_ci    AccessibilityAbilityHelper::GetInstance().SetNeedAccountDataNullFlag(false);
243885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_007 end";
244885b47fbSopenharmony_ci}
245885b47fbSopenharmony_ci
246885b47fbSopenharmony_ci/**
247885b47fbSopenharmony_ci * @tc.number: AccessibilityDumper_Unittest_Dump_008
248885b47fbSopenharmony_ci * @tc.name: Dump
249885b47fbSopenharmony_ci * @tc.desc: Test function Dump
250885b47fbSopenharmony_ci */
251885b47fbSopenharmony_ciHWTEST_F(AccessibilityDumperUnitTest, AccessibilityDumper_Unittest_Dump_008, TestSize.Level1)
252885b47fbSopenharmony_ci{
253885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_005 start";
254885b47fbSopenharmony_ci    AccessibilityAbilityInitParams initParams;
255885b47fbSopenharmony_ci    initParams.bundleName = "ohos";
256885b47fbSopenharmony_ci    initParams.moduleName = "accessibility";
257885b47fbSopenharmony_ci    initParams.name = "test";
258885b47fbSopenharmony_ci    initParams.description = "for dumper-ut";
259885b47fbSopenharmony_ci    std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
260885b47fbSopenharmony_ci    sptr<AccessibilityAccountData> currentAccount =
261885b47fbSopenharmony_ci        Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
262885b47fbSopenharmony_ci    if (!currentAccount) {
263885b47fbSopenharmony_ci        GTEST_LOG_(ERROR) << "Account data is nullptr";
264885b47fbSopenharmony_ci        return;
265885b47fbSopenharmony_ci    }
266885b47fbSopenharmony_ci    sptr<AccessibleAbilityConnection> connection =
267885b47fbSopenharmony_ci        new MockAccessibleAbilityConnection(currentAccount->GetAccountId(), 0, *abilityInfo);
268885b47fbSopenharmony_ci    if (!connection) {
269885b47fbSopenharmony_ci        GTEST_LOG_(ERROR) << "Connection is nullptr";
270885b47fbSopenharmony_ci        return;
271885b47fbSopenharmony_ci    }
272885b47fbSopenharmony_ci    currentAccount->AddConnectedAbility(connection);
273885b47fbSopenharmony_ci
274885b47fbSopenharmony_ci    std::string cmdClient("-c");
275885b47fbSopenharmony_ci    std::vector<std::u16string> args;
276885b47fbSopenharmony_ci    args.emplace_back(Str8ToStr16(cmdClient));
277885b47fbSopenharmony_ci    AccessibilityAbilityHelper::GetInstance().SetNeedAccountDataNullFlag(true);
278885b47fbSopenharmony_ci    int ret = dumper_->Dump(fd_, args);
279885b47fbSopenharmony_ci    AccessibilityAbilityHelper::GetInstance().SetNeedAccountDataNullFlag(false);
280885b47fbSopenharmony_ci    EXPECT_GE(ret, -1);
281885b47fbSopenharmony_ci
282885b47fbSopenharmony_ci    currentAccount->RemoveConnectedAbility(connection->GetElementName());
283885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_008 end";
284885b47fbSopenharmony_ci}
285885b47fbSopenharmony_ci
286885b47fbSopenharmony_ci/**
287885b47fbSopenharmony_ci * @tc.number: AccessibilityDumper_Unittest_Dump_009
288885b47fbSopenharmony_ci * @tc.name: Dump
289885b47fbSopenharmony_ci * @tc.desc: Test function Dump.
290885b47fbSopenharmony_ci */
291885b47fbSopenharmony_ciHWTEST_F(AccessibilityDumperUnitTest, AccessibilityDumper_Unittest_Dump_009, TestSize.Level1)
292885b47fbSopenharmony_ci{
293885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_009 start";
294885b47fbSopenharmony_ci    const int32_t accountId = 1;
295885b47fbSopenharmony_ci    const int32_t windowId = 1;
296885b47fbSopenharmony_ci    sptr<AccessibilityAccountData> currentAccount =
297885b47fbSopenharmony_ci        Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
298885b47fbSopenharmony_ci    if (!currentAccount) {
299885b47fbSopenharmony_ci        GTEST_LOG_(ERROR) << "Account data is nullptr";
300885b47fbSopenharmony_ci        return;
301885b47fbSopenharmony_ci    }
302885b47fbSopenharmony_ci    sptr<AccessibilityWindowConnection> operationConnection =
303885b47fbSopenharmony_ci        new AccessibilityWindowConnection(windowId, nullptr, accountId);
304885b47fbSopenharmony_ci    /* add asacConnections */
305885b47fbSopenharmony_ci    currentAccount->AddAccessibilityWindowConnection(windowId, operationConnection);
306885b47fbSopenharmony_ci
307885b47fbSopenharmony_ci    std::string cmdWindow("-w");
308885b47fbSopenharmony_ci    std::vector<std::u16string> args;
309885b47fbSopenharmony_ci    args.emplace_back(Str8ToStr16(cmdWindow));
310885b47fbSopenharmony_ci    AccessibilityAbilityHelper::GetInstance().SetNeedAccountDataNullFlag(true);
311885b47fbSopenharmony_ci    int ret = dumper_->Dump(fd_, args);
312885b47fbSopenharmony_ci    EXPECT_GE(ret, -1);
313885b47fbSopenharmony_ci    AccessibilityAbilityHelper::GetInstance().SetNeedAccountDataNullFlag(false);
314885b47fbSopenharmony_ci    currentAccount->RemoveAccessibilityWindowConnection(windowId);
315885b47fbSopenharmony_ci    GTEST_LOG_(INFO) << "AccessibilityDumper_Unittest_Dump_009 end";
316885b47fbSopenharmony_ci}
317885b47fbSopenharmony_ci} // namespace Accessibility
318885b47fbSopenharmony_ci} // namespace OHOS