1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 #include "accessibility_connection.h"
18 #include "wm_common.h"
19 #include "dm_common.h"
20 #include "common_test_utils.h"
21 
22 using namespace testing;
23 using namespace testing::ext;
24 
25 namespace OHOS {
26 namespace Rosen {
27 class AccessibilityConnectionTest : public testing::Test {
28 public:
29     static void SetUpTestCase();
30     static void TearDownTestCase();
31     void SetUp() override;
32     void TearDown() override;
33     sptr<AccessibilityConnection> accessibilityConnection_;
34 };
35 
SetUpTestCase()36 void AccessibilityConnectionTest::SetUpTestCase()
37 {
38 }
39 
TearDownTestCase()40 void AccessibilityConnectionTest::TearDownTestCase()
41 {
42 }
43 
SetUp()44 void AccessibilityConnectionTest::SetUp()
45 {
46     sptr<WindowRoot> windowRoot_ = new WindowRoot([](Event event, const sptr<IRemoteObject>& remoteObject) {});
47     accessibilityConnection_ = new AccessibilityConnection(windowRoot_);
48 }
49 
TearDown()50 void AccessibilityConnectionTest::TearDown()
51 {
52 }
53 
54 namespace {
55 /**
56  * @tc.name: FillAccessibilityWindowInfo01
57  * @tc.desc: normal function
58  * @tc.type: FUNC
59  */
60 HWTEST_F(AccessibilityConnectionTest, FillAccessibilityWindowInfo01, Function | SmallTest | Level2)
61 {
62     uint32_t focusedWindow = 1;
63     sptr<WindowProperty> windowProperty1 = new WindowProperty();
64     windowProperty1->SetWindowId(focusedWindow);
65     windowProperty1->SetDecorEnable(true);
66     sptr<WindowNode> windowNode1 = new WindowNode(windowProperty1);
67     windowNode1->SetWindowProperty(windowProperty1);
68     sptr<WindowNode> windowNode3 = nullptr;
69     std::vector<sptr<WindowNode>> nodes;
70     nodes.emplace_back(windowNode1);
71     std::vector<sptr<AccessibilityWindowInfo>> infos;
72     accessibilityConnection_->FillAccessibilityWindowInfo(nodes, focusedWindow, infos);
73     ASSERT_EQ(1, infos.size());
74     ASSERT_TRUE(infos[0]->isDecorEnable_);
75     ASSERT_TRUE(infos[0]->focused_);
76 }
77 
78 /**
79  * @tc.name: GetAccessibilityWindowInfo01
80  * @tc.desc: normal function
81  * @tc.type: FUNC
82  */
83 HWTEST_F(AccessibilityConnectionTest, GetAccessibilityWindowInfo01, Function | SmallTest | Level2)
84 {
85     std::vector<sptr<AccessibilityWindowInfo>> infos;
86     accessibilityConnection_->GetAccessibilityWindowInfo(infos);
87     ASSERT_EQ(0, infos.size());
88 }
89 
90 /**
91  * @tc.name: UpdateFocusChangeEvent01
92  * @tc.desc: normal function
93  * @tc.type: FUNC
94  */
95 HWTEST_F(AccessibilityConnectionTest, UpdateFocusChangeEvent01, Function | SmallTest | Level2)
96 {
97     sptr<DisplayInfo> displayInfo = new DisplayInfo();
98     ScreenId displayGroupId = 0;
99     sptr<WindowNodeContainer> container = new WindowNodeContainer(displayInfo, displayGroupId);
100     accessibilityConnection_->UpdateFocusChangeEvent(container);
101     ASSERT_EQ(1, accessibilityConnection_->focusedWindowMap_.size());
102 }
103 
104 /**
105  * @tc.name: UpdateFocusChangeEvent02
106  * @tc.desc: normal function
107  * @tc.type: FUNC
108  */
109 HWTEST_F(AccessibilityConnectionTest, UpdateFocusChangeEvent02, Function | SmallTest | Level2)
110 {
111     sptr<DisplayInfo> displayInfo = new DisplayInfo();
112     ScreenId displayGroupId = 0;
113     sptr<WindowNodeContainer> container = new WindowNodeContainer(displayInfo, displayGroupId);
114     uint32_t newFocusWindow = 1;
115     container->SetFocusWindow(newFocusWindow);
116     uint32_t oldFocusWindow = 1;
117     accessibilityConnection_->focusedWindowMap_.insert(std::make_pair(container, oldFocusWindow));
118     accessibilityConnection_->UpdateFocusChangeEvent(container);
119     ASSERT_EQ(1, accessibilityConnection_->focusedWindowMap_.size());
120     ASSERT_EQ(1, accessibilityConnection_->focusedWindowMap_[container]);
121 }
122 
123 /**
124  * @tc.name: UpdateFocusChangeEvent03
125  * @tc.desc: normal function
126  * @tc.type: FUNC
127  */
128 HWTEST_F(AccessibilityConnectionTest, UpdateFocusChangeEvent03, Function | SmallTest | Level2)
129 {
130     sptr<DisplayInfo> displayInfo = new DisplayInfo();
131     ScreenId displayGroupId = 0;
132     sptr<WindowNodeContainer> container = new WindowNodeContainer(displayInfo, displayGroupId);
133     uint32_t newFocusWindow = 2;
134     container->SetFocusWindow(newFocusWindow);
135     uint32_t oldFocusWindow = 1;
136     accessibilityConnection_->focusedWindowMap_.insert(std::make_pair(container, oldFocusWindow));
137     accessibilityConnection_->UpdateFocusChangeEvent(container);
138     ASSERT_EQ(1, accessibilityConnection_->focusedWindowMap_.size());
139     ASSERT_EQ(2, accessibilityConnection_->focusedWindowMap_[container]);
140 }
141 }
142 }
143 }