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_REPORT_H
17a69a01cdSopenharmony_ci#define TEST_WUKONG_REPORT_H
18a69a01cdSopenharmony_ci
19a69a01cdSopenharmony_ci#include <map>
20a69a01cdSopenharmony_ci#include <memory>
21a69a01cdSopenharmony_ci#include <string>
22a69a01cdSopenharmony_ci#include <vector>
23a69a01cdSopenharmony_ci#include <mutex>
24a69a01cdSopenharmony_ci
25a69a01cdSopenharmony_ci#include "data_set.h"
26a69a01cdSopenharmony_ci#include "input_msg_object.h"
27a69a01cdSopenharmony_ci#include "singleton.h"
28a69a01cdSopenharmony_ci#include "sysevent_listener.h"
29a69a01cdSopenharmony_ci#include "wukong_define.h"
30a69a01cdSopenharmony_ci
31a69a01cdSopenharmony_cinamespace OHOS {
32a69a01cdSopenharmony_cinamespace WuKong {
33a69a01cdSopenharmony_cinamespace {
34a69a01cdSopenharmony_cistruct componmentRecord {
35a69a01cdSopenharmony_ci    std::map<std::string, uint32_t> componmentTypeCount;
36a69a01cdSopenharmony_ci    std::map<uint32_t, std::vector<std::string>> pageIdComponments;
37a69a01cdSopenharmony_ci};
38a69a01cdSopenharmony_ci}  // namespace
39a69a01cdSopenharmony_ciclass Report final : public DelayedSingleton<Report> {
40a69a01cdSopenharmony_ci    DECLARE_DELAYED_SINGLETON(Report)
41a69a01cdSopenharmony_ci    friend class SysEventListener;
42a69a01cdSopenharmony_ci
43a69a01cdSopenharmony_cipublic:
44a69a01cdSopenharmony_ci    void Finish();
45a69a01cdSopenharmony_ci    void SetSeed(std::string seed);
46a69a01cdSopenharmony_ci    /*
47a69a01cdSopenharmony_ci     * @brief  Synchronous inputted information
48a69a01cdSopenharmony_ci     * @return void
49a69a01cdSopenharmony_ci     */
50a69a01cdSopenharmony_ci    void SyncInputInfo(std::shared_ptr<InputedMsgObject> inputedMsgObject);
51a69a01cdSopenharmony_ci    /*
52a69a01cdSopenharmony_ci     * @brief  deal data under different mode
53a69a01cdSopenharmony_ci     * @return void
54a69a01cdSopenharmony_ci     */
55a69a01cdSopenharmony_ci    void SplitInputMode(std::shared_ptr<InputedMsgObject> &inputedMsgObject, std::map<std::string, std::string> &data);
56a69a01cdSopenharmony_ci    /*
57a69a01cdSopenharmony_ci     * @brief  group data, record them to temp container
58a69a01cdSopenharmony_ci     * @return void
59a69a01cdSopenharmony_ci     */
60a69a01cdSopenharmony_ci    void GroupFocusDataAndRecord(std::shared_ptr<InputedMsgObject> &inputedMsgObject, std::map<std::string,
61a69a01cdSopenharmony_ci        std::string> &data);
62a69a01cdSopenharmony_ci
63a69a01cdSopenharmony_ci    /*
64a69a01cdSopenharmony_ci     * @brief Write the content of the test process segmented to the storage csvfile
65a69a01cdSopenharmony_ci     * @return void
66a69a01cdSopenharmony_ci     */
67a69a01cdSopenharmony_ci    void SegmentedWriteCSV();
68a69a01cdSopenharmony_ci
69a69a01cdSopenharmony_ci    /*
70a69a01cdSopenharmony_ci     * @brief Write the content of the test process segmented to the storage jsonfile
71a69a01cdSopenharmony_ci     * @return void
72a69a01cdSopenharmony_ci     */
73a69a01cdSopenharmony_ci    void SegmentedWriteJson();
74a69a01cdSopenharmony_ci
75a69a01cdSopenharmony_ci    /*
76a69a01cdSopenharmony_ci     * @brief recor screen path to report
77a69a01cdSopenharmony_ci     * @return void
78a69a01cdSopenharmony_ci     */
79a69a01cdSopenharmony_ci    void RecordScreenPath(const std::string &screenPath);
80a69a01cdSopenharmony_ci
81a69a01cdSopenharmony_ci    /*
82a69a01cdSopenharmony_ci     * @brief Write the content of the focus input segmented to the storage file
83a69a01cdSopenharmony_ci     * @return void
84a69a01cdSopenharmony_ci     */
85a69a01cdSopenharmony_ci    void SegmentedWriteForFocusInput();
86a69a01cdSopenharmony_ci
87a69a01cdSopenharmony_ci    /*
88a69a01cdSopenharmony_ci    * @brief get report exception dir
89a69a01cdSopenharmony_ci    * @return void
90a69a01cdSopenharmony_ci    */
91a69a01cdSopenharmony_ci    std::string GetReportExceptionDir();
92a69a01cdSopenharmony_ci
93a69a01cdSopenharmony_ci    /*
94a69a01cdSopenharmony_ci     * @brief find Exception Type by crash file name
95a69a01cdSopenharmony_ci     * @param exceptionFilename
96a69a01cdSopenharmony_ci     * @return void
97a69a01cdSopenharmony_ci     */
98a69a01cdSopenharmony_ci    void ExceptionRecord(const std::string &exceptionFilename);
99a69a01cdSopenharmony_ci
100a69a01cdSopenharmony_ci    void SetIsFocusTest(bool isFocus)
101a69a01cdSopenharmony_ci    {
102a69a01cdSopenharmony_ci        is_focus_ = isFocus;
103a69a01cdSopenharmony_ci    }
104a69a01cdSopenharmony_ciprivate:
105a69a01cdSopenharmony_ci    /*
106a69a01cdSopenharmony_ci     * @brief dependent environment init, include create file,dir, setting start time
107a69a01cdSopenharmony_ci     * @return void
108a69a01cdSopenharmony_ci     */
109a69a01cdSopenharmony_ci    void EnvInit();
110a69a01cdSopenharmony_ci
111a69a01cdSopenharmony_ci    /*
112a69a01cdSopenharmony_ci     * @brief dataSet init, include  event input, componment input, ability, exception
113a69a01cdSopenharmony_ci     * @return void
114a69a01cdSopenharmony_ci     */
115a69a01cdSopenharmony_ci    void DataSetInit();
116a69a01cdSopenharmony_ci
117a69a01cdSopenharmony_ci    /*
118a69a01cdSopenharmony_ci     * @brief When a crash occurs check /data/log/hilog/ dir is exist new hilog file then copy
119a69a01cdSopenharmony_ci     * @return void
120a69a01cdSopenharmony_ci     */
121a69a01cdSopenharmony_ci    void HilogFileRecord();
122a69a01cdSopenharmony_ci
123a69a01cdSopenharmony_ci    /*
124a69a01cdSopenharmony_ci     * @brief componment information arrange
125a69a01cdSopenharmony_ci     * @param bundle bundle name
126a69a01cdSopenharmony_ci     * @param inputCompMsgPtr input componment msg ptr
127a69a01cdSopenharmony_ci     * @param data out data
128a69a01cdSopenharmony_ci     * @return void
129a69a01cdSopenharmony_ci     */
130a69a01cdSopenharmony_ci    void ComponmentInfoArrange(const std::string &bundle, std::shared_ptr<ComponmentInputMsg> inputCompMsgPtr,
131a69a01cdSopenharmony_ci                               std::map<std::string, std::string> &data);
132a69a01cdSopenharmony_ci    // csv filename
133a69a01cdSopenharmony_ci    std::string reportCsvFileName_ = "";
134a69a01cdSopenharmony_ci    std::string reportJsonFileName_ = "";
135a69a01cdSopenharmony_ci    std::string reportFocusInputFileName_ = "";
136a69a01cdSopenharmony_ci    std::string reportExceptionDir_ = "";
137a69a01cdSopenharmony_ci    std::string currentTestDir_ = "";
138a69a01cdSopenharmony_ci    std::string startRunTime_ = "";
139a69a01cdSopenharmony_ci    std::string crashDir_ = "/data/log/faultlog/faultlogger/";
140a69a01cdSopenharmony_ci    std::vector<std::string> hilogFiles_;
141a69a01cdSopenharmony_ci    std::string seed_ = "";
142a69a01cdSopenharmony_ci    int taskCount_ = 0;
143a69a01cdSopenharmony_ci    bool isFirstAppSwitch_ = false;
144a69a01cdSopenharmony_ci    time_t startTime_ = time(0);
145a69a01cdSopenharmony_ci    std::mutex crashMtx_;
146a69a01cdSopenharmony_ci    std::string hilogDirs_ = "/data/log/hilog/";
147a69a01cdSopenharmony_ci    // multimodal input data set
148a69a01cdSopenharmony_ci    std::shared_ptr<DataSet> eventDataSet_ = std::make_shared<DataSet>();
149a69a01cdSopenharmony_ci    // componment input data set
150a69a01cdSopenharmony_ci    std::shared_ptr<DataSet> componmentDataSet_ = std::make_shared<DataSet>();
151a69a01cdSopenharmony_ci    // ability data set
152a69a01cdSopenharmony_ci    std::shared_ptr<DataSet> abilityDataSet_ = std::make_shared<DataSet>();
153a69a01cdSopenharmony_ci    // exception data set
154a69a01cdSopenharmony_ci    std::shared_ptr<DataSet> exceptionDataSet_ = std::make_shared<DataSet>();
155a69a01cdSopenharmony_ci    // app set
156a69a01cdSopenharmony_ci    std::vector<std::string> bundles_;
157a69a01cdSopenharmony_ci    std::map<std::string, componmentRecord> bundleComponmentRecord_;
158a69a01cdSopenharmony_ci
159a69a01cdSopenharmony_ci    // screen store path vector
160a69a01cdSopenharmony_ci    std::vector<std::string> screenPaths_;
161a69a01cdSopenharmony_ci    // focus_input output container
162a69a01cdSopenharmony_ci    std::vector<std::string> focus_input_vec_;
163a69a01cdSopenharmony_ci    // identify cur test is focus test
164a69a01cdSopenharmony_ci    bool is_focus_ = false;
165a69a01cdSopenharmony_ci};
166a69a01cdSopenharmony_ci}  // namespace WuKong
167a69a01cdSopenharmony_ci}  // namespace OHOS
168a69a01cdSopenharmony_ci
169a69a01cdSopenharmony_ci#endif
170