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 "auto_test_manager.h"
17 
18 #include <iostream>
19 #include <memory>
20 
21 #include "dfx/event_injector.h"
22 
23 namespace OHOS {
AutoTestManager()24 AutoTestManager::AutoTestManager()
25 {
26     SetUpTestCase();
27 }
28 
~AutoTestManager()29 AutoTestManager::~AutoTestManager()
30 {
31     TearDownTestCase();
32 }
33 
GetInstance()34 AutoTestManager* AutoTestManager::GetInstance()
35 {
36     static AutoTestManager instance;
37     return &instance;
38 }
39 
SetUpTestCase()40 void AutoTestManager::SetUpTestCase()
41 {
42     autoTest_ = std::make_shared<UIAutoTest>();
43 
44 #ifdef _WIN32
45     const char logPath[] = ".\\auto_test_log.txt";
46     CompareTools::SetLogPath(logPath, sizeof(logPath));
47 #else
48     const char logPath[] = "./auto_test_log.txt";
49     CompareTools::SetLogPath(logPath, sizeof(logPath));
50 #endif
51     EventInjector::GetInstance()->RegisterEventInjector(EventDataType::POINT_TYPE);
52     EventInjector::GetInstance()->RegisterEventInjector(EventDataType::KEY_TYPE);
53 #if defined(ENABLE_WINDOW) && ENABLE_WINDOW
54     Window* window = RootView::GetInstance()->GetBoundWindow();
55     if (window != nullptr) {
56         EventInjector::GetInstance()->SetWindowId(window->GetWindowId());
57     }
58 #endif
59 }
60 
TearDownTestCase()61 void AutoTestManager::TearDownTestCase()
62 {
63     if (EventInjector::GetInstance()->IsEventInjectorRegistered(EventDataType::POINT_TYPE)) {
64         EventInjector::GetInstance()->UnregisterEventInjector(EventDataType::POINT_TYPE);
65     }
66     if (EventInjector::GetInstance()->IsEventInjectorRegistered(EventDataType::KEY_TYPE)) {
67         EventInjector::GetInstance()->UnregisterEventInjector(EventDataType::KEY_TYPE);
68     }
69 }
70 
SendMsg(size_t mainID)71 void AutoTestManager::SendMsg(size_t mainID)
72 {
73     sendMsgFunc_(mainID);
74 }
75 
SetSendMsgFuncCallBack(SendMsgFunc sendMsgFunc)76 void AutoTestManager::SetSendMsgFuncCallBack(SendMsgFunc sendMsgFunc)
77 {
78     sendMsgFunc_ = sendMsgFunc;
79 }
80 
StartTest(std::vector<std::shared_ptr<TestMsgInfo>> msgInfo)81 void AutoTestManager::StartTest(std::vector<std::shared_ptr<TestMsgInfo>> msgInfo)
82 {
83     printf("AutoTestManager::StartTest----msgInfo.size=[%d]\n", msgInfo.size());
84     fflush(stdout);
85     if (!autoTest_) {
86         return;
87     }
88 
89     autoTest_->RunTest(msgInfo);
90 }
91 
TestComplete()92 void AutoTestManager::TestComplete()
93 {
94     if (!autoTest_) {
95         return;
96     }
97 
98     autoTest_->TestComplete();
99 }
100 
SetConfigInfo(const std::shared_ptr<TestConfigInfo> configInfo)101 void AutoTestManager::SetConfigInfo(const std::shared_ptr<TestConfigInfo> configInfo)
102 {
103     configInfo_ = configInfo;
104     printf("AutoTestManager::SetConfigInfo--testMode=[%zu], baseDir=[%s], runDir=[%s], logDir=[%s]\n",
105         configInfo_->testMode, configInfo_->baseDir.c_str(), configInfo_->runDir.c_str(),
106         configInfo_->logDir.c_str());
107     fflush(stdout);
108     SendMsg(C_S_MAIN_ID_REQUEST_TEST_INFO);
109 }
110 
GetConfigInfo()111 std::shared_ptr<TestConfigInfo> AutoTestManager::GetConfigInfo()
112 {
113     return configInfo_;
114 }
115 }
116