1a69a01cdSopenharmony_ci/*
2a69a01cdSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3a69a01cdSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4a69a01cdSopenharmony_ci * you may not use this file except in compliance with the License.
5a69a01cdSopenharmony_ci * You may obtain a copy of the License at
6a69a01cdSopenharmony_ci *
7a69a01cdSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8a69a01cdSopenharmony_ci *
9a69a01cdSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10a69a01cdSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11a69a01cdSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12a69a01cdSopenharmony_ci * See the License for the specific language governing permissions and
13a69a01cdSopenharmony_ci * limitations under the License.
14a69a01cdSopenharmony_ci */
15a69a01cdSopenharmony_ci
16a69a01cdSopenharmony_ci#ifndef TEST_WUKONG_COMPONENT_TREE_H
17a69a01cdSopenharmony_ci#define TEST_WUKONG_COMPONENT_TREE_H
18a69a01cdSopenharmony_ci
19a69a01cdSopenharmony_ci#include <map>
20a69a01cdSopenharmony_ci
21a69a01cdSopenharmony_ci#include "accessibility_element_info.h"
22a69a01cdSopenharmony_ci#include "wukong_define.h"
23a69a01cdSopenharmony_ci#include "wukong_tree.h"
24a69a01cdSopenharmony_ci
25a69a01cdSopenharmony_cinamespace OHOS {
26a69a01cdSopenharmony_cinamespace WuKong {
27a69a01cdSopenharmony_ciclass ComponentTree : public WuKongTree {
28a69a01cdSopenharmony_cipublic:
29a69a01cdSopenharmony_ci    ComponentTree() : WuKongTree(), expectedInputCount_(0)
30a69a01cdSopenharmony_ci    {
31a69a01cdSopenharmony_ci        type_.clear();
32a69a01cdSopenharmony_ci        inputTypeCountMap_.clear();
33a69a01cdSopenharmony_ci    }
34a69a01cdSopenharmony_ci    virtual ~ComponentTree()
35a69a01cdSopenharmony_ci    {
36a69a01cdSopenharmony_ci    }
37a69a01cdSopenharmony_ci
38a69a01cdSopenharmony_ci    const std::string& GetType()
39a69a01cdSopenharmony_ci    {
40a69a01cdSopenharmony_ci        return type_;
41a69a01cdSopenharmony_ci    }
42a69a01cdSopenharmony_ci
43a69a01cdSopenharmony_ci    bool IsVisible()
44a69a01cdSopenharmony_ci    {
45a69a01cdSopenharmony_ci        return isVisible_;
46a69a01cdSopenharmony_ci    }
47a69a01cdSopenharmony_ci
48a69a01cdSopenharmony_ci    OHOS::Accessibility::Rect GetPosition()
49a69a01cdSopenharmony_ci    {
50a69a01cdSopenharmony_ci        return rect_;
51a69a01cdSopenharmony_ci    }
52a69a01cdSopenharmony_ci
53a69a01cdSopenharmony_ci    const std::string& GetInspectorKey()
54a69a01cdSopenharmony_ci    {
55a69a01cdSopenharmony_ci        return inspectorKey_;
56a69a01cdSopenharmony_ci    }
57a69a01cdSopenharmony_ci
58a69a01cdSopenharmony_ci    void SetInspectorKey(const std::string& inspectorKey)
59a69a01cdSopenharmony_ci    {
60a69a01cdSopenharmony_ci        inspectorKey_ = inspectorKey;
61a69a01cdSopenharmony_ci    }
62a69a01cdSopenharmony_ci
63a69a01cdSopenharmony_ci    bool IsTopComponent()
64a69a01cdSopenharmony_ci    {
65a69a01cdSopenharmony_ci        return isTopComponent_;
66a69a01cdSopenharmony_ci    }
67a69a01cdSopenharmony_ci
68a69a01cdSopenharmony_ci    void SetTopComponent()
69a69a01cdSopenharmony_ci    {
70a69a01cdSopenharmony_ci        isTopComponent_ = true;
71a69a01cdSopenharmony_ci    }
72a69a01cdSopenharmony_ci
73a69a01cdSopenharmony_ciprivate:
74a69a01cdSopenharmony_ci    friend class TreeManager;
75a69a01cdSopenharmony_ci    virtual bool SetNodeId() override;
76a69a01cdSopenharmony_ci    virtual bool RecursUpdateInfo(const std::shared_ptr<ComponentTree>& source);
77a69a01cdSopenharmony_ci    void AddTypeInputCount(uint32_t type)
78a69a01cdSopenharmony_ci    {
79a69a01cdSopenharmony_ci        auto it = inputTypeCountMap_.find(type);
80a69a01cdSopenharmony_ci        if (it != inputTypeCountMap_.end()) {
81a69a01cdSopenharmony_ci            it->second++;
82a69a01cdSopenharmony_ci        } else {
83a69a01cdSopenharmony_ci            inputTypeCountMap_[type] = 1;
84a69a01cdSopenharmony_ci        }
85a69a01cdSopenharmony_ci    }
86a69a01cdSopenharmony_ci    OHOS::Accessibility::Rect rect_ {};
87a69a01cdSopenharmony_ci    bool isVisible_ = false;
88a69a01cdSopenharmony_ci    std::string type_;
89a69a01cdSopenharmony_ci    uint32_t expectedInputCount_;
90a69a01cdSopenharmony_ci    std::map<uint32_t, uint32_t> inputTypeCountMap_;
91a69a01cdSopenharmony_ci    std::string inspectorKey_;
92a69a01cdSopenharmony_ci    bool isTopComponent_ = false;
93a69a01cdSopenharmony_ci};
94a69a01cdSopenharmony_ci}  // namespace WuKong
95a69a01cdSopenharmony_ci}  // namespace OHOS
96a69a01cdSopenharmony_ci#endif  // TEST_WUKONG_COMPONENT_TREE_H
97