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 "gtest/gtest.h"
17#define private public
18#include "VirtualLocation.h"
19#include "SharedData.h"
20
21namespace {
22    bool g_executeCallback = false;
23
24    void LocDataUpdateCallback(const int8_t *data, uint32_t len)
25    {
26        (void)data;
27        (void)len;
28        g_executeCallback = true;
29    }
30
31    TEST(VirtualLocationTest, GetMockPointerTest)
32    {
33        const int8_t* ptr = VirtualLocation::GetInstance().GetMockPointer();
34        EXPECT_TRUE(ptr != nullptr);
35    }
36
37    TEST(VitualLocationTest, GetMockLenTest)
38    {
39        uint32_t len = VirtualLocation::GetInstance().GetMockLen();
40        EXPECT_EQ(len, 1); // 1 is default mockLen value
41    }
42
43    TEST(VirtualLocationTest, SetCallBackTest)
44    {
45        VirtualLocation::GetInstance().SetCallBack(LocDataUpdateCallback);
46        EXPECT_NE(VirtualLocation::GetInstance().GetCallBack(), nullptr);
47    }
48
49    TEST(VirtualLocationTest, SetSubscribeTest)
50    {
51        VirtualLocation::GetInstance().SetSubscribe(true);
52        EXPECT_TRUE(VirtualLocation::GetInstance().IsSubscribe());
53    }
54
55    TEST(VirtualLocationTest, ExecCallBackTest)
56    {
57        VirtualLocation::GetInstance().ExecCallBack();
58        EXPECT_TRUE(g_executeCallback);
59    }
60
61    TEST(VirtualLocationTest, GetTimeTest)
62    {
63        uint64_t ret = VirtualLocation::GetInstance().GetTime();
64        EXPECT_TRUE(ret > 0);
65    }
66
67    TEST(VirtualLocationTest, GetAccuracyTest)
68    {
69        float ret = VirtualLocation::GetInstance().GetAccuracy();
70        EXPECT_EQ(ret, VirtualLocation::GetInstance().LOCATION_ACCURACY);
71    }
72
73    TEST(VirtualLocationTest, IsPositionChangedTest)
74    {
75        SharedData<double>(SharedDataType::LONGITUDE, 0, -180, 180);
76        SharedData<double>(SharedDataType::LATITUDE, 0, -90, 90);
77
78        VirtualLocation::GetInstance().longitudeChecked = 0.0;
79        VirtualLocation::GetInstance().latitudeChecked = 0.0;
80        SharedData<double>::SetData(SharedDataType::LONGITUDE, 0.0);
81        SharedData<double>::SetData(SharedDataType::LATITUDE, 0.0);
82        bool ret1 = VirtualLocation::GetInstance().IsPostionChanged();
83        EXPECT_FALSE(ret1);
84
85        SharedData<double>::SetData(SharedDataType::LONGITUDE, 50.0);
86        SharedData<double>::SetData(SharedDataType::LATITUDE, 50.0);
87        bool ret2 = VirtualLocation::GetInstance().IsPostionChanged();
88        EXPECT_TRUE(ret2);
89    }
90}