17c804472Sopenharmony_ci/*
27c804472Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47c804472Sopenharmony_ci * you may not use this file except in compliance with the License.
57c804472Sopenharmony_ci * You may obtain a copy of the License at
67c804472Sopenharmony_ci *
77c804472Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
87c804472Sopenharmony_ci *
97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127c804472Sopenharmony_ci * See the License for the specific language governing permissions and
137c804472Sopenharmony_ci * limitations under the License.
147c804472Sopenharmony_ci */
157c804472Sopenharmony_ci
167c804472Sopenharmony_ci#include <string>
177c804472Sopenharmony_ci#include <thread>
187c804472Sopenharmony_ci#include <fstream>
197c804472Sopenharmony_ci#include <cstdio>
207c804472Sopenharmony_ci#include <unistd.h>
217c804472Sopenharmony_ci#include "gtest/gtest.h"
227c804472Sopenharmony_ci#define private public
237c804472Sopenharmony_ci#include "CommandLineInterface.h"
247c804472Sopenharmony_ci#include "CommandLineFactory.h"
257c804472Sopenharmony_ci#include "CommandParser.h"
267c804472Sopenharmony_ci#include "SharedData.h"
277c804472Sopenharmony_ci#include "MockGlobalResult.h"
287c804472Sopenharmony_ci#include "VirtualScreen.h"
297c804472Sopenharmony_ci
307c804472Sopenharmony_cinamespace {
317c804472Sopenharmony_ci    std::string g_configPath = R"(
327c804472Sopenharmony_ci        {
337c804472Sopenharmony_ci        "setting": {
347c804472Sopenharmony_ci        "1.0.0": {
357c804472Sopenharmony_ci        "KeepScreenOnState": {
367c804472Sopenharmony_ci            "args": {
377c804472Sopenharmony_ci            "KeepScreenOnState": true
387c804472Sopenharmony_ci            }
397c804472Sopenharmony_ci        },
407c804472Sopenharmony_ci        "BrightnessMode": {
417c804472Sopenharmony_ci            "args": {
427c804472Sopenharmony_ci            "BrightnessMode": 0
437c804472Sopenharmony_ci            }
447c804472Sopenharmony_ci        },
457c804472Sopenharmony_ci        "Brightness": {
467c804472Sopenharmony_ci            "args": {
477c804472Sopenharmony_ci            "Brightness": 170
487c804472Sopenharmony_ci            }
497c804472Sopenharmony_ci        },
507c804472Sopenharmony_ci        "WearingState": {
517c804472Sopenharmony_ci            "args": {
527c804472Sopenharmony_ci            "WearingState": true
537c804472Sopenharmony_ci            }
547c804472Sopenharmony_ci        },
557c804472Sopenharmony_ci        "Barometer": {
567c804472Sopenharmony_ci            "args": {
577c804472Sopenharmony_ci            "Barometer": 101325
587c804472Sopenharmony_ci            }
597c804472Sopenharmony_ci        },
607c804472Sopenharmony_ci        "HeartRate": {
617c804472Sopenharmony_ci            "args": {
627c804472Sopenharmony_ci            "HeartRate": 100
637c804472Sopenharmony_ci            }
647c804472Sopenharmony_ci        },
657c804472Sopenharmony_ci        "StepCount": {
667c804472Sopenharmony_ci            "args": {
677c804472Sopenharmony_ci            "StepCount": 0
687c804472Sopenharmony_ci            }
697c804472Sopenharmony_ci        },
707c804472Sopenharmony_ci        "Location": {
717c804472Sopenharmony_ci            "args": {
727c804472Sopenharmony_ci            "latitude": 39.914417,
737c804472Sopenharmony_ci            "longitude": 116.39647
747c804472Sopenharmony_ci            }
757c804472Sopenharmony_ci        },
767c804472Sopenharmony_ci        "ChargeMode": {
777c804472Sopenharmony_ci            "args": {
787c804472Sopenharmony_ci            "ChargeMode": 0
797c804472Sopenharmony_ci            }
807c804472Sopenharmony_ci        },
817c804472Sopenharmony_ci        "Power": {
827c804472Sopenharmony_ci            "args": {
837c804472Sopenharmony_ci            "Power": 0.1
847c804472Sopenharmony_ci            }
857c804472Sopenharmony_ci        },
867c804472Sopenharmony_ci        "Language": {
877c804472Sopenharmony_ci            "args": {
887c804472Sopenharmony_ci            "Language": "en-US"
897c804472Sopenharmony_ci            }
907c804472Sopenharmony_ci        }
917c804472Sopenharmony_ci        },
927c804472Sopenharmony_ci        "1.0.1": {
937c804472Sopenharmony_ci        "Language": {
947c804472Sopenharmony_ci            "args": {
957c804472Sopenharmony_ci            "Language": "zh-CN"
967c804472Sopenharmony_ci            }
977c804472Sopenharmony_ci        }
987c804472Sopenharmony_ci        }
997c804472Sopenharmony_ci        },
1007c804472Sopenharmony_ci        "frontend": {
1017c804472Sopenharmony_ci        "1.0.0": {
1027c804472Sopenharmony_ci        "Resolution": {
1037c804472Sopenharmony_ci            "args": {
1047c804472Sopenharmony_ci            "Resolution": "454*454"
1057c804472Sopenharmony_ci            }
1067c804472Sopenharmony_ci        },
1077c804472Sopenharmony_ci        "DeviceType": {
1087c804472Sopenharmony_ci            "args": {
1097c804472Sopenharmony_ci            "DeviceType": "liteWearable"
1107c804472Sopenharmony_ci            }
1117c804472Sopenharmony_ci        }
1127c804472Sopenharmony_ci        }
1137c804472Sopenharmony_ci        }
1147c804472Sopenharmony_ci        }
1157c804472Sopenharmony_ci    )";
1167c804472Sopenharmony_ci
1177c804472Sopenharmony_ci    // 测试复制构造函数是否被删除
1187c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, DefaultConstructorDeletedTest)
1197c804472Sopenharmony_ci    {
1207c804472Sopenharmony_ci        EXPECT_TRUE(std::is_copy_constructible<CommandLineInterface>::value == false);
1217c804472Sopenharmony_ci    }
1227c804472Sopenharmony_ci
1237c804472Sopenharmony_ci    // 测试赋值运算符是否被删除
1247c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, AssignmentOperatorDeletedTest)
1257c804472Sopenharmony_ci    {
1267c804472Sopenharmony_ci        EXPECT_TRUE(std::is_copy_assignable<CommandLineInterface>::value == false);
1277c804472Sopenharmony_ci    }
1287c804472Sopenharmony_ci
1297c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, GetInstanceTest)
1307c804472Sopenharmony_ci    {
1317c804472Sopenharmony_ci        CommandLineInterface& instance1 = CommandLineInterface::GetInstance();
1327c804472Sopenharmony_ci        CommandLineInterface& instance2 = CommandLineInterface::GetInstance();
1337c804472Sopenharmony_ci        EXPECT_EQ(&instance1, &instance2);
1347c804472Sopenharmony_ci    }
1357c804472Sopenharmony_ci
1367c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, InitPipeTest)
1377c804472Sopenharmony_ci    {
1387c804472Sopenharmony_ci        CommandLineInterface::GetInstance().InitPipe("phone");
1397c804472Sopenharmony_ci        EXPECT_TRUE(CommandLineInterface::isPipeConnected);
1407c804472Sopenharmony_ci    }
1417c804472Sopenharmony_ci
1427c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, ProcessCommandTest)
1437c804472Sopenharmony_ci    {
1447c804472Sopenharmony_ci        // normal
1457c804472Sopenharmony_ci        g_input = false;
1467c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ProcessCommand();
1477c804472Sopenharmony_ci        EXPECT_TRUE(g_input);
1487c804472Sopenharmony_ci        // socket is null
1497c804472Sopenharmony_ci        g_input = false;
1507c804472Sopenharmony_ci        std::unique_ptr<LocalSocket> temp = std::move(CommandLineInterface::GetInstance().socket);
1517c804472Sopenharmony_ci        CommandLineInterface::GetInstance().socket = nullptr;
1527c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ProcessCommand();
1537c804472Sopenharmony_ci        EXPECT_FALSE(g_input);
1547c804472Sopenharmony_ci        CommandLineInterface::GetInstance().socket = std::move(temp);
1557c804472Sopenharmony_ci        // isFirstWsSend
1567c804472Sopenharmony_ci        g_input = false;
1577c804472Sopenharmony_ci        CommandLineInterface::GetInstance().isPipeConnected = true;
1587c804472Sopenharmony_ci        VirtualScreen::isWebSocketListening = true;
1597c804472Sopenharmony_ci        CommandLineInterface::GetInstance().isFirstWsSend = true;
1607c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ProcessCommand();
1617c804472Sopenharmony_ci        EXPECT_FALSE(CommandLineInterface::GetInstance().isFirstWsSend);
1627c804472Sopenharmony_ci        EXPECT_TRUE(g_input);
1637c804472Sopenharmony_ci    }
1647c804472Sopenharmony_ci
1657c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, ProcessCommandMessageTest)
1667c804472Sopenharmony_ci    {
1677c804472Sopenharmony_ci        // normal
1687c804472Sopenharmony_ci        g_output = false;
1697c804472Sopenharmony_ci        std::string msg = R"({"type" : "action", "command" : "MousePress", "version" : "1.0.1"})";
1707c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ProcessCommandMessage(msg);
1717c804472Sopenharmony_ci        EXPECT_TRUE(g_output);
1727c804472Sopenharmony_ci        // json parse failed
1737c804472Sopenharmony_ci        g_output = false;
1747c804472Sopenharmony_ci        std::string msg0 = R"({"type" : "aaaaa", "command" : "MousePress", "bbbb" : "1.0.1", "args" : {}})";
1757c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ProcessCommandMessage("");
1767c804472Sopenharmony_ci        EXPECT_FALSE(g_output);
1777c804472Sopenharmony_ci        // json args invalid
1787c804472Sopenharmony_ci        g_output = false;
1797c804472Sopenharmony_ci        std::string msg1 = R"({"type" : "aaaaa", "command" : "MousePress", "bbbb" : "1.0.1"})";
1807c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ProcessCommandMessage(msg1);
1817c804472Sopenharmony_ci        EXPECT_FALSE(g_output);
1827c804472Sopenharmony_ci        // cmd type error
1837c804472Sopenharmony_ci        g_output = false;
1847c804472Sopenharmony_ci        std::string msg2 = R"({"type" : "aaaaa", "command" : "MousePress", "version" : "1.0.1"})";
1857c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ProcessCommandMessage(msg2);
1867c804472Sopenharmony_ci        EXPECT_FALSE(g_output);
1877c804472Sopenharmony_ci        // static card
1887c804472Sopenharmony_ci        g_output = false;
1897c804472Sopenharmony_ci        CommandParser::GetInstance().staticCard = true;
1907c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ProcessCommandMessage(msg);
1917c804472Sopenharmony_ci        CommandParser::GetInstance().staticCard = false;
1927c804472Sopenharmony_ci        EXPECT_FALSE(g_output);
1937c804472Sopenharmony_ci    }
1947c804472Sopenharmony_ci
1957c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, ProcessCommandValidateTest)
1967c804472Sopenharmony_ci    {
1977c804472Sopenharmony_ci        CommandLineInterface& instance = CommandLineInterface::GetInstance();
1987c804472Sopenharmony_ci        std::string msg = "{}";
1997c804472Sopenharmony_ci        Json2::Value jsonData1 = JsonReader::ParseJsonData2(msg);
2007c804472Sopenharmony_ci        EXPECT_FALSE(instance.ProcessCommandValidate(false, jsonData1, "Failed to parse the JSON"));
2017c804472Sopenharmony_ci        msg = "[]";
2027c804472Sopenharmony_ci        Json2::Value jsonData2 = JsonReader::ParseJsonData2(msg);
2037c804472Sopenharmony_ci        EXPECT_FALSE(instance.ProcessCommandValidate(true, jsonData2, "Command is not a object"));
2047c804472Sopenharmony_ci        msg = R"({"type" : "action", "command" : "MousePress"})";
2057c804472Sopenharmony_ci        Json2::Value jsonData3 = JsonReader::ParseJsonData2(msg);
2067c804472Sopenharmony_ci        EXPECT_FALSE(instance.ProcessCommandValidate(true, jsonData3, "Command error"));
2077c804472Sopenharmony_ci        msg = R"({"type" : "action", "command" : "MousePress", "version" : "s.0.1"})";
2087c804472Sopenharmony_ci        Json2::Value jsonData4 = JsonReader::ParseJsonData2(msg);
2097c804472Sopenharmony_ci        EXPECT_FALSE(instance.ProcessCommandValidate(true, jsonData4, "Invalid command version"));
2107c804472Sopenharmony_ci        msg = R"({"type" : "action", "command" : "MousePress", "version" : "1.0.1"})";
2117c804472Sopenharmony_ci        Json2::Value jsonData5 = JsonReader::ParseJsonData2(msg);
2127c804472Sopenharmony_ci        EXPECT_TRUE(instance.ProcessCommandValidate(true, jsonData5, ""));
2137c804472Sopenharmony_ci    }
2147c804472Sopenharmony_ci
2157c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, GetCommandTypeTest)
2167c804472Sopenharmony_ci    {
2177c804472Sopenharmony_ci        CommandLineInterface& instance = CommandLineInterface::GetInstance();
2187c804472Sopenharmony_ci        EXPECT_EQ(instance.GetCommandType(""), CommandLine::CommandType::INVALID);
2197c804472Sopenharmony_ci        EXPECT_EQ(instance.GetCommandType("set"), CommandLine::CommandType::SET);
2207c804472Sopenharmony_ci        EXPECT_EQ(instance.GetCommandType("get"), CommandLine::CommandType::GET);
2217c804472Sopenharmony_ci        EXPECT_EQ(instance.GetCommandType("action"), CommandLine::CommandType::ACTION);
2227c804472Sopenharmony_ci    }
2237c804472Sopenharmony_ci
2247c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, InitTest)
2257c804472Sopenharmony_ci    {
2267c804472Sopenharmony_ci        CommandLineInterface& instance = CommandLineInterface::GetInstance();
2277c804472Sopenharmony_ci        instance.Init("phone");
2287c804472Sopenharmony_ci        EXPECT_TRUE(CommandLineFactory::typeMap.size() > 0);
2297c804472Sopenharmony_ci        EXPECT_TRUE(CommandLineInterface::isPipeConnected);
2307c804472Sopenharmony_ci    }
2317c804472Sopenharmony_ci
2327c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, IsStaticIgnoreCmdTest)
2337c804472Sopenharmony_ci    {
2347c804472Sopenharmony_ci        CommandLineInterface& instance = CommandLineInterface::GetInstance();
2357c804472Sopenharmony_ci        std::string msg = "Language";
2367c804472Sopenharmony_ci        EXPECT_FALSE(instance.IsStaticIgnoreCmd(msg));
2377c804472Sopenharmony_ci        std::string msg1 = "Language1";
2387c804472Sopenharmony_ci        EXPECT_TRUE(instance.IsStaticIgnoreCmd(msg1));
2397c804472Sopenharmony_ci    }
2407c804472Sopenharmony_ci
2417c804472Sopenharmony_ci    void InitSharedData(std::string deviceType)
2427c804472Sopenharmony_ci    {
2437c804472Sopenharmony_ci        if (deviceType == "liteWearable" || "smartVersion") {
2447c804472Sopenharmony_ci            SharedData<bool>(SharedDataType::KEEP_SCREEN_ON, true);
2457c804472Sopenharmony_ci            SharedData<uint8_t>(SharedDataType::BATTERY_STATUS, (uint8_t)ChargeState::NOCHARGE,
2467c804472Sopenharmony_ci                                (uint8_t)ChargeState::NOCHARGE, (uint8_t)ChargeState::CHARGING);
2477c804472Sopenharmony_ci            // The brightness ranges from 1 to 255. The default value is 255.
2487c804472Sopenharmony_ci            SharedData<uint8_t>(SharedDataType::BRIGHTNESS_VALUE, 255, 1, 255);
2497c804472Sopenharmony_ci            SharedData<uint8_t>(SharedDataType::BRIGHTNESS_MODE, (uint8_t)BrightnessMode::MANUAL,
2507c804472Sopenharmony_ci                                (uint8_t)BrightnessMode::MANUAL, (uint8_t)BrightnessMode::AUTO);
2517c804472Sopenharmony_ci            // The value ranges from 0 to 999999. The default value is 0.
2527c804472Sopenharmony_ci            SharedData<uint32_t>(SharedDataType::SUMSTEP_VALUE, 0, 0, 999999);
2537c804472Sopenharmony_ci            // The volume ranges from 0.0 to 1.0. The default value is 1.0.
2547c804472Sopenharmony_ci            SharedData<double>(SharedDataType::VOLUME_VALUE, 1.0, 0.0, 1.0);
2557c804472Sopenharmony_ci            // Battery level range: 0.0–1.0; default: 1.0
2567c804472Sopenharmony_ci            SharedData<double>(SharedDataType::BATTERY_LEVEL, 1.0, 0.0, 1.0);
2577c804472Sopenharmony_ci            // Heart rate range: 0 to 255. The default value is 80.
2587c804472Sopenharmony_ci            SharedData<uint8_t>(SharedDataType::HEARTBEAT_VALUE, 80, 0, 255);
2597c804472Sopenharmony_ci            SharedData<std::string>(SharedDataType::LANGUAGE, "zh-CN");
2607c804472Sopenharmony_ci            // The value ranges from 180 to 180. The default value is 0.
2617c804472Sopenharmony_ci            SharedData<double>(SharedDataType::LONGITUDE, 0, -180, 180);
2627c804472Sopenharmony_ci            // The atmospheric pressure ranges from 0 to 999900. The default value is 101325.
2637c804472Sopenharmony_ci            SharedData<uint32_t>(SharedDataType::PRESSURE_VALUE, 101325, 0, 999900);
2647c804472Sopenharmony_ci            SharedData<bool>(SharedDataType::WEARING_STATE, true);
2657c804472Sopenharmony_ci            // The value ranges from -90 to 90. The default value is 0.
2667c804472Sopenharmony_ci            SharedData<double>(SharedDataType::LATITUDE, 0, -90, 90);
2677c804472Sopenharmony_ci        } else {
2687c804472Sopenharmony_ci            SharedData<std::string>(SharedDataType::LANGUAGE, "zh_CN");
2697c804472Sopenharmony_ci            SharedData<std::string>(SharedDataType::LAN, "zh");
2707c804472Sopenharmony_ci            SharedData<std::string>(SharedDataType::REGION, "CN");
2717c804472Sopenharmony_ci        }
2727c804472Sopenharmony_ci    }
2737c804472Sopenharmony_ci
2747c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, ReadAndApplyConfigTest)
2757c804472Sopenharmony_ci    {
2767c804472Sopenharmony_ci        std::string deviceType = "liteWearable";
2777c804472Sopenharmony_ci        CommandParser::GetInstance().deviceType = deviceType;
2787c804472Sopenharmony_ci        CommandLineInterface& instance = CommandLineInterface::GetInstance();
2797c804472Sopenharmony_ci        // path is empty
2807c804472Sopenharmony_ci        instance.ReadAndApplyConfig("");
2817c804472Sopenharmony_ci        EXPECT_FALSE(SharedData<bool>::GetData(SharedDataType::KEEP_SCREEN_ON));
2827c804472Sopenharmony_ci        // path not empty
2837c804472Sopenharmony_ci        instance.Init(deviceType);
2847c804472Sopenharmony_ci        InitSharedData(deviceType);
2857c804472Sopenharmony_ci        char buffer[FILENAME_MAX];
2867c804472Sopenharmony_ci        if (getcwd(buffer, FILENAME_MAX) != nullptr) {
2877c804472Sopenharmony_ci            std::string currDir = std::string(buffer);
2887c804472Sopenharmony_ci            std::string currFile = currDir + "/config.json";
2897c804472Sopenharmony_ci            // 创建文件流对象并打开文件
2907c804472Sopenharmony_ci            std::ofstream file(currFile);
2917c804472Sopenharmony_ci            // 检查文件是否成功打开
2927c804472Sopenharmony_ci            if (file.is_open()) {
2937c804472Sopenharmony_ci                file << g_configPath;
2947c804472Sopenharmony_ci                file.close();
2957c804472Sopenharmony_ci                instance.ReadAndApplyConfig(currFile);
2967c804472Sopenharmony_ci            } else {
2977c804472Sopenharmony_ci                printf("Error creating file!\n");\
2987c804472Sopenharmony_ci                EXPECT_TRUE(false);
2997c804472Sopenharmony_ci            }
3007c804472Sopenharmony_ci        } else {
3017c804472Sopenharmony_ci            printf("error: getcwd failed\n");
3027c804472Sopenharmony_ci            EXPECT_TRUE(false);
3037c804472Sopenharmony_ci        }
3047c804472Sopenharmony_ci        EXPECT_TRUE(SharedData<bool>::GetData(SharedDataType::KEEP_SCREEN_ON));
3057c804472Sopenharmony_ci        EXPECT_EQ(SharedData<uint8_t>::GetData(SharedDataType::BRIGHTNESS_VALUE), 170);
3067c804472Sopenharmony_ci        EXPECT_EQ(SharedData<uint8_t>::GetData(SharedDataType::HEARTBEAT_VALUE), 100);
3077c804472Sopenharmony_ci    }
3087c804472Sopenharmony_ci
3097c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, ApplyConfigCommandsTest_Err)
3107c804472Sopenharmony_ci    {
3117c804472Sopenharmony_ci        g_output = false;
3127c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ApplyConfigCommands("MousePress", nullptr);
3137c804472Sopenharmony_ci        EXPECT_FALSE(g_output);
3147c804472Sopenharmony_ci    }
3157c804472Sopenharmony_ci
3167c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, CreatCommandToSendDataTest_Err)
3177c804472Sopenharmony_ci    {
3187c804472Sopenharmony_ci        g_output = false;
3197c804472Sopenharmony_ci        Json2::Value val;
3207c804472Sopenharmony_ci        CommandLineInterface::GetInstance().CreatCommandToSendData("aaaa", val, "set");
3217c804472Sopenharmony_ci        EXPECT_TRUE(g_output);
3227c804472Sopenharmony_ci    }
3237c804472Sopenharmony_ci
3247c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, SendJsonDataTest)
3257c804472Sopenharmony_ci    {
3267c804472Sopenharmony_ci        g_output = false;
3277c804472Sopenharmony_ci        std::string msg = R"({"type":"action","command":"MousePress"})";
3287c804472Sopenharmony_ci        Json2::Value jsonData = JsonReader::ParseJsonData2(msg);
3297c804472Sopenharmony_ci        CommandLineInterface::SendJsonData(jsonData);
3307c804472Sopenharmony_ci        EXPECT_TRUE(g_output);
3317c804472Sopenharmony_ci    }
3327c804472Sopenharmony_ci
3337c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, SendJSHeapMemoryTest)
3347c804472Sopenharmony_ci    {
3357c804472Sopenharmony_ci        g_output = false;
3367c804472Sopenharmony_ci        CommandLineInterface::GetInstance().SendJSHeapMemory(1, 1, 1);
3377c804472Sopenharmony_ci        EXPECT_TRUE(g_output);
3387c804472Sopenharmony_ci    }
3397c804472Sopenharmony_ci
3407c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, SendWebsocketStartupSignalTest)
3417c804472Sopenharmony_ci    {
3427c804472Sopenharmony_ci        g_output = false;
3437c804472Sopenharmony_ci        CommandLineInterface::GetInstance().SendWebsocketStartupSignal();
3447c804472Sopenharmony_ci        EXPECT_TRUE(g_output);
3457c804472Sopenharmony_ci    }
3467c804472Sopenharmony_ci
3477c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, CreatCommandToSendDataTest)
3487c804472Sopenharmony_ci    {
3497c804472Sopenharmony_ci        std::string deviceType = "phone";
3507c804472Sopenharmony_ci        CommandParser::GetInstance().deviceType = deviceType;
3517c804472Sopenharmony_ci        CommandLineInterface::GetInstance().Init(deviceType);
3527c804472Sopenharmony_ci        g_output = false;
3537c804472Sopenharmony_ci        EXPECT_FALSE(g_output);
3547c804472Sopenharmony_ci        Json2::Value val;
3557c804472Sopenharmony_ci        CommandLineInterface::GetInstance().CreatCommandToSendData("LoadContent", val, "get");
3567c804472Sopenharmony_ci        EXPECT_TRUE(g_output);
3577c804472Sopenharmony_ci    }
3587c804472Sopenharmony_ci
3597c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, ApplyConfigMembersTest_Err)
3607c804472Sopenharmony_ci    {
3617c804472Sopenharmony_ci        std::string deviceType = "liteWearable";
3627c804472Sopenharmony_ci        CommandParser::GetInstance().deviceType = deviceType;
3637c804472Sopenharmony_ci        CommandLineInterface::GetInstance().Init(deviceType);
3647c804472Sopenharmony_ci        std::string jsonStr = R"({ "Language" : { "args" : { "Language" : "zh-CN" }},
3657c804472Sopenharmony_ci                                    "Language2" : { "args1" : { "Language" : "zh-CN" }},
3667c804472Sopenharmony_ci                                    "Language3" : "",
3677c804472Sopenharmony_ci                                    "Language4" : { "args" : ""}})";
3687c804472Sopenharmony_ci        Json2::Value::Members members= { "Language", "Language2", "Language3", "Language4" };
3697c804472Sopenharmony_ci        Json2::Value commands = JsonReader::ParseJsonData2(jsonStr);
3707c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ApplyConfigMembers(commands, members);
3717c804472Sopenharmony_ci        std::string language = SharedData<std::string>::GetData(SharedDataType::LANGUAGE);
3727c804472Sopenharmony_ci        EXPECT_EQ(language, "zh-CN");
3737c804472Sopenharmony_ci    }
3747c804472Sopenharmony_ci
3757c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, ApplyConfigTest_Err)
3767c804472Sopenharmony_ci    {
3777c804472Sopenharmony_ci        g_output = false;
3787c804472Sopenharmony_ci        std::string jsonStr1 = R"({ "setting" : { "1.0.1" : "aaa"}})";
3797c804472Sopenharmony_ci        Json2::Value json1 = JsonReader::ParseJsonData2(jsonStr1);
3807c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ApplyConfig(json1);
3817c804472Sopenharmony_ci        EXPECT_FALSE(g_output);
3827c804472Sopenharmony_ci        g_output = false;
3837c804472Sopenharmony_ci        std::string jsonStr2 = R"({ "setting" : "aaa"})";
3847c804472Sopenharmony_ci        Json2::Value json2 = JsonReader::ParseJsonData2(jsonStr2);
3857c804472Sopenharmony_ci        CommandLineInterface::GetInstance().ApplyConfig(json2);
3867c804472Sopenharmony_ci        EXPECT_FALSE(g_output);
3877c804472Sopenharmony_ci    }
3887c804472Sopenharmony_ci
3897c804472Sopenharmony_ci    TEST(CommandLineInterfaceTest, SendJSHeapMemoryTest_Err)
3907c804472Sopenharmony_ci    {
3917c804472Sopenharmony_ci        g_output = false;
3927c804472Sopenharmony_ci        std::unique_ptr<LocalSocket> temp = std::move(CommandLineInterface::GetInstance().socket);
3937c804472Sopenharmony_ci        CommandLineInterface::GetInstance().socket = nullptr;
3947c804472Sopenharmony_ci        CommandLineInterface::GetInstance().SendJSHeapMemory(0, 0, 0);
3957c804472Sopenharmony_ci        EXPECT_FALSE(g_output);
3967c804472Sopenharmony_ci        CommandLineInterface::GetInstance().socket = std::move(temp);
3977c804472Sopenharmony_ci    }
3987c804472Sopenharmony_ci}
399