1/*
2 * Copyright (c) 2024 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 <fstream>
17
18#include <gtest/gtest.h>
19
20#include "nap_process.h"
21
22namespace OHOS {
23namespace MMI {
24namespace {
25using namespace testing::ext;
26constexpr int32_t REMOVE_OBSERVER = -2;
27constexpr int32_t NAP_EVENT = 0;
28constexpr int32_t SUBSCRIBED = 1;
29constexpr int32_t ACTIVE_EVENT = 2;
30} // namespace
31
32class NapProcessTest : public testing::Test {
33public:
34    static void SetUpTestCase(void) {}
35    static void TearDownTestCase(void) {}
36};
37
38/**
39 * @tc.name: NapProcessTest_Init_001
40 * @tc.desc: Test init
41 * @tc.type: FUNC
42 * @tc.require:
43 */
44HWTEST_F(NapProcessTest, NapProcessTest_Init_001, TestSize.Level1)
45{
46    UDSServer udsServer;
47    NapProcess napProcess;
48    napProcess.Init(udsServer);
49    ASSERT_EQ(&udsServer, napProcess.udsServer_);
50}
51
52/**
53 * @tc.name: NapProcessTest_NotifyBundleName_001
54 * @tc.desc: Test notify bundle name
55 * @tc.type: FUNC
56 * @tc.require:
57 */
58HWTEST_F(NapProcessTest, NapProcessTest_NotifyBundleName_001, TestSize.Level1)
59{
60    NapProcess napProcess;
61    NapProcess::NapStatusData data;
62    data.pid = -1;
63    data.uid = 1000;
64    data.bundleName = "com.example.app";
65    int32_t syncState = 1;
66    int32_t result = napProcess.NotifyBundleName(data, syncState);
67    ASSERT_EQ(result, RET_ERR);
68    data.pid = 1234;
69    result = napProcess.NotifyBundleName(data, syncState);
70    ASSERT_EQ(result, RET_ERR);
71}
72
73/**
74 * @tc.name: NapProcessTest_IsNeedNotify_001
75 * @tc.desc: Test is need notify
76 * @tc.type: FUNC
77 * @tc.require:
78 */
79HWTEST_F(NapProcessTest, NapProcessTest_IsNeedNotify_001, TestSize.Level1)
80{
81    NapProcess napProcess;
82    NapProcess::NapStatusData data;
83    data.pid = 1;
84    data.uid = 1;
85    data.bundleName = "bundleName";
86    napProcess.napMap_[data] = SUBSCRIBED;
87    ASSERT_TRUE(napProcess.IsNeedNotify(data));
88    napProcess.napMap_[data] = NAP_EVENT;
89    ASSERT_TRUE(napProcess.IsNeedNotify(data));
90    napProcess.napMap_[data] = REMOVE_OBSERVER;
91    ASSERT_FALSE(napProcess.IsNeedNotify(data));
92    napProcess.napMap_[data] = ACTIVE_EVENT;
93    ASSERT_FALSE(napProcess.IsNeedNotify(data));
94}
95
96/**
97 * @tc.name: NapProcessTest_SetNapStatus_001
98 * @tc.desc: Test set nap status
99 * @tc.type: FUNC
100 * @tc.require:
101 */
102HWTEST_F(NapProcessTest, NapProcessTest_SetNapStatus_001, TestSize.Level1)
103{
104    NapProcess napProcess;
105    int32_t pid = 1234;
106    int32_t uid = 4321;
107    std ::string bundleName = "testBundle";
108    int32_t napStatus = ACTIVE_EVENT;
109    ASSERT_EQ(napProcess.SetNapStatus(pid, uid, bundleName, napStatus), RET_OK);
110    napStatus = NAP_EVENT;
111    ASSERT_EQ(napProcess.SetNapStatus(pid, uid, bundleName, napStatus), RET_OK);
112    napStatus = 3;
113    ASSERT_EQ(napProcess.SetNapStatus(pid, uid, bundleName, napStatus), RET_OK);
114}
115
116/**
117 * @tc.name: NapProcessTest_AddMmiSubscribedEventData_001
118 * @tc.desc:Add mmi subscribed event data
119 * @tc.type: FUNC
120 * @tc.require:
121 */
122HWTEST_F(NapProcessTest, NapProcessTest_AddMmiSubscribedEventData_001, TestSize.Level1)
123{
124    NapProcess process;
125    NapProcess::NapStatusData data;
126    int32_t syncState = 2;
127    int32_t result = process.AddMmiSubscribedEventData(data, syncState);
128    ASSERT_EQ(result, RET_OK);
129    ASSERT_EQ(process.napMap_[data], syncState);
130    int32_t newsyncState = 2;
131    process.AddMmiSubscribedEventData(data, syncState);
132    result = process.AddMmiSubscribedEventData(data, newsyncState);
133    ASSERT_EQ(result, RET_OK);
134    ASSERT_EQ(process.napMap_[data], syncState);
135}
136
137/**
138 * @tc.name: NapProcessTest_RemoveMmiSubscribedEventData_001
139 * @tc.desc: Test remove mmi subscribed event data
140 * @tc.type: FUNC
141 * @tc.require:
142 */
143HWTEST_F(NapProcessTest, NapProcessTest_RemoveMmiSubscribedEventData_001, TestSize.Level1)
144{
145    NapProcess process;
146    NapProcess::NapStatusData napData;
147    int32_t syncState = 1;
148    int32_t ret = process.RemoveMmiSubscribedEventData(napData);
149    ASSERT_EQ(ret, RET_OK);
150    process.AddMmiSubscribedEventData(napData, syncState);
151    ret = process.RemoveMmiSubscribedEventData(napData);
152    ASSERT_EQ(ret, RET_OK);
153}
154
155/**
156 * @tc.name: NapProcessTest_GetNapClientPid_001
157 * @tc.desc: Test get nap client pid
158 * @tc.type: FUNC
159 * @tc.require:
160 */
161HWTEST_F(NapProcessTest, NapProcessTest_GetNapClientPid_001, TestSize.Level1)
162{
163    NapProcess napProcess;
164    int32_t expectedPid = 1234;
165    napProcess.napClientPid_ = expectedPid;
166    int32_t actualPid = napProcess.GetNapClientPid();
167    ASSERT_EQ(expectedPid, actualPid);
168}
169
170/**
171 * @tc.name: NapProcessTest_NotifyNapOnline_001
172 * @tc.desc: Test notify nap online
173 * @tc.type: FUNC
174 * @tc.require:
175 */
176HWTEST_F(NapProcessTest, NapProcessTest_NotifyNapOnline_001, TestSize.Level1)
177{
178    NapProcess napProcess;
179    int32_t result = napProcess.NotifyNapOnline();
180    ASSERT_NE(napProcess.GetNapClientPid(), result);
181}
182
183/**
184 * @tc.name: NapProcessTest_RemoveInputEventObserver_001
185 * @tc.desc: Test remove input event observer
186 * @tc.type: FUNC
187 * @tc.require:
188 */
189HWTEST_F(NapProcessTest, NapProcessTest_RemoveInputEventObserver_001, TestSize.Level1)
190{
191    NapProcess napProcess;
192    int32_t ret = napProcess.RemoveInputEventObserver();
193    ASSERT_EQ(ret, RET_OK);
194    ASSERT_TRUE(napProcess.napMap_.empty());
195    ASSERT_EQ(napProcess.napClientPid_, REMOVE_OBSERVER);
196}
197
198/**
199 * @tc.name: NapProcessTest_GetAllMmiSubscribedEvents_001
200 * @tc.desc: Test get all mmi subscribed events
201 * @tc.type: FUNC
202 * @tc.require:
203 */
204HWTEST_F(NapProcessTest, NapProcessTest_GetAllMmiSubscribedEvents_001, TestSize.Level1)
205{
206    NapProcess napProcess;
207    std::map<std::tuple<int32_t, int32_t, std::string>, int32_t> datas;
208    ASSERT_EQ(napProcess.GetAllMmiSubscribedEvents(datas), RET_OK);
209    ASSERT_TRUE(datas.empty());
210}
211} // namespace MMI
212} // namespace OHOS