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#include <string>
167c804472Sopenharmony_ci#include <sys/stat.h>
177c804472Sopenharmony_ci#include "gtest/gtest.h"
187c804472Sopenharmony_ci#include "window.h"
197c804472Sopenharmony_ci#define private public
207c804472Sopenharmony_ci#define protected public
217c804472Sopenharmony_ci#include "MockGlobalResult.h"
227c804472Sopenharmony_ci#include "JsAppImpl.h"
237c804472Sopenharmony_ci#include "CommandLineInterface.h"
247c804472Sopenharmony_ci#include "CommandParser.h"
257c804472Sopenharmony_ci#include "VirtualScreenImpl.h"
267c804472Sopenharmony_ci#include "window_model.h"
277c804472Sopenharmony_ci#include "window_display.h"
287c804472Sopenharmony_ci#include "FileSystem.h"
297c804472Sopenharmony_ci#include "ace_preview_helper.h"
307c804472Sopenharmony_ci#include "window_model.h"
317c804472Sopenharmony_ci
327c804472Sopenharmony_cinamespace {
337c804472Sopenharmony_ci    class JsAppImplTest : public ::testing::Test {
347c804472Sopenharmony_ci    public:
357c804472Sopenharmony_ci        JsAppImplTest() {}
367c804472Sopenharmony_ci        ~JsAppImplTest() {}
377c804472Sopenharmony_ci    protected:
387c804472Sopenharmony_ci        static void WriteFile(std::string testFile, std::string fileContent)
397c804472Sopenharmony_ci        {
407c804472Sopenharmony_ci            std::ofstream file(testFile, std::ios::out | std::ios::in | std::ios_base::trunc);
417c804472Sopenharmony_ci            if (file.is_open()) {
427c804472Sopenharmony_ci                file << fileContent;
437c804472Sopenharmony_ci                file.close();
447c804472Sopenharmony_ci            } else {
457c804472Sopenharmony_ci                printf("Error open file!\n");
467c804472Sopenharmony_ci            }
477c804472Sopenharmony_ci        }
487c804472Sopenharmony_ci
497c804472Sopenharmony_ci        static void SetUpTestCase()
507c804472Sopenharmony_ci        {
517c804472Sopenharmony_ci            CommandLineInterface::GetInstance().Init("pipeName");
527c804472Sopenharmony_ci            char buffer[FILENAME_MAX];
537c804472Sopenharmony_ci            if (getcwd(buffer, FILENAME_MAX) != nullptr) {
547c804472Sopenharmony_ci                testDir = std::string(buffer);
557c804472Sopenharmony_ci            } else {
567c804472Sopenharmony_ci                printf("error: getcwd failed\n");
577c804472Sopenharmony_ci            }
587c804472Sopenharmony_ci        }
597c804472Sopenharmony_ci
607c804472Sopenharmony_ci        static std::string testDir;
617c804472Sopenharmony_ci    };
627c804472Sopenharmony_ci    std::string JsAppImplTest::testDir = "";
637c804472Sopenharmony_ci
647c804472Sopenharmony_ci    // 测试拷贝构造函数是否被删除
657c804472Sopenharmony_ci    TEST_F(JsAppImplTest, CopyConstructorDeletedTest)
667c804472Sopenharmony_ci    {
677c804472Sopenharmony_ci        EXPECT_TRUE(std::is_copy_constructible<JsApp>::value == false);
687c804472Sopenharmony_ci    }
697c804472Sopenharmony_ci
707c804472Sopenharmony_ci    // 测试赋值运算符是否被删除
717c804472Sopenharmony_ci    TEST_F(JsAppImplTest, AssignmentOperatorDeletedTest)
727c804472Sopenharmony_ci    {
737c804472Sopenharmony_ci        EXPECT_TRUE(std::is_copy_assignable<JsApp>::value == false);
747c804472Sopenharmony_ci    }
757c804472Sopenharmony_ci
767c804472Sopenharmony_ci    TEST_F(JsAppImplTest, StartTest)
777c804472Sopenharmony_ci    {
787c804472Sopenharmony_ci        JsAppImpl::GetInstance().isStop = false;
797c804472Sopenharmony_ci        std::thread thread1([]() {
807c804472Sopenharmony_ci            JsAppImpl::GetInstance().Start();
817c804472Sopenharmony_ci        });
827c804472Sopenharmony_ci        thread1.detach();
837c804472Sopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(10));
847c804472Sopenharmony_ci        JsAppImpl::GetInstance().isStop = true;
857c804472Sopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(10));
867c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().isFinished);
877c804472Sopenharmony_ci    }
887c804472Sopenharmony_ci
897c804472Sopenharmony_ci    TEST_F(JsAppImplTest, RestartTest)
907c804472Sopenharmony_ci    {
917c804472Sopenharmony_ci        JsAppImpl::GetInstance().ability =
927c804472Sopenharmony_ci            OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
937c804472Sopenharmony_ci        JsAppImpl::GetInstance().Restart();
947c804472Sopenharmony_ci        bool eq = JsAppImpl::GetInstance().ability == nullptr;
957c804472Sopenharmony_ci        EXPECT_TRUE(eq);
967c804472Sopenharmony_ci    }
977c804472Sopenharmony_ci
987c804472Sopenharmony_ci    TEST_F(JsAppImplTest, InterruptTest)
997c804472Sopenharmony_ci    {
1007c804472Sopenharmony_ci        JsAppImpl::GetInstance().isStop = false;
1017c804472Sopenharmony_ci        JsAppImpl::GetInstance().Interrupt();
1027c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().isStop);
1037c804472Sopenharmony_ci    }
1047c804472Sopenharmony_ci
1057c804472Sopenharmony_ci    TEST_F(JsAppImplTest, GetJSONTreeTest)
1067c804472Sopenharmony_ci    {
1077c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetJSONTree(), "jsontree");
1087c804472Sopenharmony_ci    }
1097c804472Sopenharmony_ci
1107c804472Sopenharmony_ci    TEST_F(JsAppImplTest, GetDefaultJSONTreeTest)
1117c804472Sopenharmony_ci    {
1127c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetDefaultJSONTree(), "defaultjsontree");
1137c804472Sopenharmony_ci    }
1147c804472Sopenharmony_ci
1157c804472Sopenharmony_ci    TEST_F(JsAppImplTest, OrientationChangedTest)
1167c804472Sopenharmony_ci    {
1177c804472Sopenharmony_ci        JsAppImpl::GetInstance().ability =
1187c804472Sopenharmony_ci            OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
1197c804472Sopenharmony_ci        g_surfaceChanged = false;
1207c804472Sopenharmony_ci        JsAppImpl::GetInstance().OrientationChanged("portrait");
1217c804472Sopenharmony_ci        EXPECT_TRUE(g_surfaceChanged);
1227c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().orientation, "portrait");
1237c804472Sopenharmony_ci        g_surfaceChanged = false;
1247c804472Sopenharmony_ci        JsAppImpl::GetInstance().OrientationChanged("landscape");
1257c804472Sopenharmony_ci        EXPECT_TRUE(g_surfaceChanged);
1267c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().orientation, "landscape");
1277c804472Sopenharmony_ci    }
1287c804472Sopenharmony_ci
1297c804472Sopenharmony_ci    TEST_F(JsAppImplTest, ResolutionChangedTest)
1307c804472Sopenharmony_ci    {
1317c804472Sopenharmony_ci        JsAppImpl::GetInstance().isStop = false;
1327c804472Sopenharmony_ci        std::thread thread1([]() {
1337c804472Sopenharmony_ci            JsAppImpl::GetInstance().Start();
1347c804472Sopenharmony_ci        });
1357c804472Sopenharmony_ci        thread1.detach();
1367c804472Sopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(10));
1377c804472Sopenharmony_ci        int32_t originWidth = 222;
1387c804472Sopenharmony_ci        int32_t originHeight = 333;
1397c804472Sopenharmony_ci        int32_t width = 222;
1407c804472Sopenharmony_ci        int32_t height = 333;
1417c804472Sopenharmony_ci        int32_t screenDensity = 360;
1427c804472Sopenharmony_ci        std::string reason = "resize";
1437c804472Sopenharmony_ci        ResolutionParam param(originWidth, originHeight, width, height);
1447c804472Sopenharmony_ci        g_surfaceChanged = false;
1457c804472Sopenharmony_ci        JsAppImpl::GetInstance().ResolutionChanged(param, screenDensity, reason);
1467c804472Sopenharmony_ci        EXPECT_TRUE(g_surfaceChanged);
1477c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, 222);
1487c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, 333);
1497c804472Sopenharmony_ci    }
1507c804472Sopenharmony_ci
1517c804472Sopenharmony_ci    TEST_F(JsAppImplTest, ConvertResizeReasonTest)
1527c804472Sopenharmony_ci    {
1537c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().ConvertResizeReason("undefined"),
1547c804472Sopenharmony_ci            OHOS::Ace::WindowSizeChangeReason::UNDEFINED);
1557c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().ConvertResizeReason("rotation"),
1567c804472Sopenharmony_ci            OHOS::Ace::WindowSizeChangeReason::ROTATION);
1577c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().ConvertResizeReason("resize"),
1587c804472Sopenharmony_ci            OHOS::Ace::WindowSizeChangeReason::RESIZE);
1597c804472Sopenharmony_ci    }
1607c804472Sopenharmony_ci
1617c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetResolutionParamsTest)
1627c804472Sopenharmony_ci    {
1637c804472Sopenharmony_ci        CommandParser::GetInstance().deviceType = "phone";
1647c804472Sopenharmony_ci        JsAppImpl::GetInstance().InitCommandInfo();
1657c804472Sopenharmony_ci        int32_t originWidth = 111;
1667c804472Sopenharmony_ci        int32_t originHeight = 222;
1677c804472Sopenharmony_ci        int32_t width = 111;
1687c804472Sopenharmony_ci        int32_t height = 222;
1697c804472Sopenharmony_ci        int32_t screenDensity = 480;
1707c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetResolutionParams(originWidth, originHeight, width, height, screenDensity);
1717c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, 111);
1727c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, 222);
1737c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.density, 3);
1747c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().orientation, "portrait");
1757c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.orientation,
1767c804472Sopenharmony_ci            OHOS::Ace::DeviceOrientation::PORTRAIT);
1777c804472Sopenharmony_ci
1787c804472Sopenharmony_ci        originWidth = 222;
1797c804472Sopenharmony_ci        originHeight = 111;
1807c804472Sopenharmony_ci        width = 222;
1817c804472Sopenharmony_ci        height = 111;
1827c804472Sopenharmony_ci        screenDensity = 320;
1837c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetResolutionParams(originWidth, originHeight, width, height, screenDensity);
1847c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, 222);
1857c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, 111);
1867c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.density, 2);
1877c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().orientation, "landscape");
1887c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.orientation,
1897c804472Sopenharmony_ci            OHOS::Ace::DeviceOrientation::LANDSCAPE);
1907c804472Sopenharmony_ci    }
1917c804472Sopenharmony_ci
1927c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetArgsColorModeTest)
1937c804472Sopenharmony_ci    {
1947c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetArgsColorMode("light");
1957c804472Sopenharmony_ci        EXPECT_EQ("light", JsAppImpl::GetInstance().colorMode);
1967c804472Sopenharmony_ci    }
1977c804472Sopenharmony_ci
1987c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetArgsAceVersionTest)
1997c804472Sopenharmony_ci    {
2007c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetArgsAceVersion("ACE_2_0");
2017c804472Sopenharmony_ci        EXPECT_EQ("ACE_2_0", JsAppImpl::GetInstance().aceVersion);
2027c804472Sopenharmony_ci    }
2037c804472Sopenharmony_ci
2047c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetDeviceOrentationTest)
2057c804472Sopenharmony_ci    {
2067c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetDeviceOrentation("landscape");
2077c804472Sopenharmony_ci        EXPECT_EQ("landscape", JsAppImpl::GetInstance().orientation);
2087c804472Sopenharmony_ci    }
2097c804472Sopenharmony_ci
2107c804472Sopenharmony_ci    TEST_F(JsAppImplTest, GetOrientationTest)
2117c804472Sopenharmony_ci    {
2127c804472Sopenharmony_ci        JsAppImpl::GetInstance().orientation = "portrait";
2137c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetOrientation(), "portrait");
2147c804472Sopenharmony_ci    }
2157c804472Sopenharmony_ci
2167c804472Sopenharmony_ci    TEST_F(JsAppImplTest, GetColorModeTest)
2177c804472Sopenharmony_ci    {
2187c804472Sopenharmony_ci        JsAppImpl::GetInstance().colorMode = "dark";
2197c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetColorMode(), "dark");
2207c804472Sopenharmony_ci    }
2217c804472Sopenharmony_ci
2227c804472Sopenharmony_ci    TEST_F(JsAppImplTest, ColorModeChangedTest)
2237c804472Sopenharmony_ci    {
2247c804472Sopenharmony_ci        JsAppImpl::GetInstance().ability =
2257c804472Sopenharmony_ci            OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
2267c804472Sopenharmony_ci        // light
2277c804472Sopenharmony_ci        g_onConfigurationChanged = false;
2287c804472Sopenharmony_ci        JsAppImpl::GetInstance().ColorModeChanged("light");
2297c804472Sopenharmony_ci        EXPECT_TRUE(g_onConfigurationChanged);
2307c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.colorMode,
2317c804472Sopenharmony_ci            OHOS::Ace::ColorMode::LIGHT);
2327c804472Sopenharmony_ci        // dark
2337c804472Sopenharmony_ci        g_onConfigurationChanged = false;
2347c804472Sopenharmony_ci        JsAppImpl::GetInstance().ColorModeChanged("dark");
2357c804472Sopenharmony_ci        EXPECT_TRUE(g_onConfigurationChanged);
2367c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.colorMode,
2377c804472Sopenharmony_ci            OHOS::Ace::ColorMode::DARK);
2387c804472Sopenharmony_ci    }
2397c804472Sopenharmony_ci
2407c804472Sopenharmony_ci    TEST_F(JsAppImplTest, ReloadRuntimePageTest)
2417c804472Sopenharmony_ci    {
2427c804472Sopenharmony_ci        JsAppImpl::GetInstance().ability =
2437c804472Sopenharmony_ci            OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
2447c804472Sopenharmony_ci        g_replacePage = false;
2457c804472Sopenharmony_ci        JsAppImpl::GetInstance().ReloadRuntimePage("pages/Index");
2467c804472Sopenharmony_ci        EXPECT_TRUE(g_replacePage);
2477c804472Sopenharmony_ci    }
2487c804472Sopenharmony_ci
2497c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetScreenDensityTest)
2507c804472Sopenharmony_ci    {
2517c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetScreenDensity("360");
2527c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().screenDensity, "360");
2537c804472Sopenharmony_ci    }
2547c804472Sopenharmony_ci
2557c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetConfigChangesTest)
2567c804472Sopenharmony_ci    {
2577c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetConfigChanges("aaa");
2587c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().configChanges, "aaa");
2597c804472Sopenharmony_ci    }
2607c804472Sopenharmony_ci
2617c804472Sopenharmony_ci    TEST_F(JsAppImplTest, MemoryRefreshTest)
2627c804472Sopenharmony_ci    {
2637c804472Sopenharmony_ci        // ability is nullptr
2647c804472Sopenharmony_ci        JsAppImpl::GetInstance().ability = nullptr;
2657c804472Sopenharmony_ci        g_operateComponent = false;
2667c804472Sopenharmony_ci        JsAppImpl::GetInstance().MemoryRefresh("aaa");
2677c804472Sopenharmony_ci        EXPECT_FALSE(g_operateComponent);
2687c804472Sopenharmony_ci        // ability is not nullptr
2697c804472Sopenharmony_ci        JsAppImpl::GetInstance().ability =
2707c804472Sopenharmony_ci            OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
2717c804472Sopenharmony_ci        g_operateComponent = false;
2727c804472Sopenharmony_ci        JsAppImpl::GetInstance().MemoryRefresh("aaa");
2737c804472Sopenharmony_ci        EXPECT_TRUE(g_operateComponent);
2747c804472Sopenharmony_ci    }
2757c804472Sopenharmony_ci
2767c804472Sopenharmony_ci    TEST_F(JsAppImplTest, LoadDocumentTest)
2777c804472Sopenharmony_ci    {
2787c804472Sopenharmony_ci        JsAppImpl::GetInstance().ability =
2797c804472Sopenharmony_ci            OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
2807c804472Sopenharmony_ci        Json2::Value val = JsonReader::CreateNull();
2817c804472Sopenharmony_ci        g_loadAceDocument = false;
2827c804472Sopenharmony_ci        JsAppImpl::GetInstance().LoadDocument("aaa", "bbb", val);
2837c804472Sopenharmony_ci        EXPECT_TRUE(g_loadAceDocument);
2847c804472Sopenharmony_ci    }
2857c804472Sopenharmony_ci
2867c804472Sopenharmony_ci    TEST_F(JsAppImplTest, FoldStatusChangedTest)
2877c804472Sopenharmony_ci    {
2887c804472Sopenharmony_ci        JsAppImpl::GetInstance().isStop = false;
2897c804472Sopenharmony_ci        std::thread thread1([]() {
2907c804472Sopenharmony_ci            JsAppImpl::GetInstance().Start();
2917c804472Sopenharmony_ci        });
2927c804472Sopenharmony_ci        thread1.detach();
2937c804472Sopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(10));
2947c804472Sopenharmony_ci        int width = 200;
2957c804472Sopenharmony_ci        int height = 300;
2967c804472Sopenharmony_ci        g_execStatusChangedCallback = false;
2977c804472Sopenharmony_ci        JsAppImpl::GetInstance().FoldStatusChanged("fold", width, height);
2987c804472Sopenharmony_ci        EXPECT_EQ(VirtualScreenImpl::GetInstance().foldStatus, "fold");
2997c804472Sopenharmony_ci        EXPECT_EQ(OHOS::Previewer::PreviewerDisplay::GetInstance().foldStatus_, OHOS::Rosen::FoldStatus::FOLDED);
3007c804472Sopenharmony_ci        EXPECT_TRUE(g_execStatusChangedCallback);
3017c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, width);
3027c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, height);
3037c804472Sopenharmony_ci
3047c804472Sopenharmony_ci        JsAppImpl::GetInstance().FoldStatusChanged("unfold", width, height);
3057c804472Sopenharmony_ci        EXPECT_EQ(VirtualScreenImpl::GetInstance().foldStatus, "unfold");
3067c804472Sopenharmony_ci        EXPECT_EQ(OHOS::Previewer::PreviewerDisplay::GetInstance().foldStatus_, OHOS::Rosen::FoldStatus::EXPAND);
3077c804472Sopenharmony_ci
3087c804472Sopenharmony_ci        JsAppImpl::GetInstance().FoldStatusChanged("half_fold", width, height);
3097c804472Sopenharmony_ci        EXPECT_EQ(VirtualScreenImpl::GetInstance().foldStatus, "half_fold");
3107c804472Sopenharmony_ci        EXPECT_EQ(OHOS::Previewer::PreviewerDisplay::GetInstance().foldStatus_, OHOS::Rosen::FoldStatus::HALF_FOLD);
3117c804472Sopenharmony_ci
3127c804472Sopenharmony_ci        width = 210;
3137c804472Sopenharmony_ci        height = 310;
3147c804472Sopenharmony_ci        g_execStatusChangedCallback = false;
3157c804472Sopenharmony_ci        JsAppImpl::GetInstance().FoldStatusChanged("unknown", width, height);
3167c804472Sopenharmony_ci        EXPECT_EQ(VirtualScreenImpl::GetInstance().foldStatus, "unknown");
3177c804472Sopenharmony_ci        EXPECT_EQ(OHOS::Previewer::PreviewerDisplay::GetInstance().foldStatus_, OHOS::Rosen::FoldStatus::UNKNOWN);
3187c804472Sopenharmony_ci        EXPECT_TRUE(g_execStatusChangedCallback);
3197c804472Sopenharmony_ci        EXPECT_NE(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, width);
3207c804472Sopenharmony_ci        EXPECT_NE(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, height);
3217c804472Sopenharmony_ci    }
3227c804472Sopenharmony_ci
3237c804472Sopenharmony_ci    TEST_F(JsAppImplTest, DispatchBackPressedEventTest)
3247c804472Sopenharmony_ci    {
3257c804472Sopenharmony_ci        g_onBackPressed = false;
3267c804472Sopenharmony_ci        JsAppImpl::GetInstance().DispatchBackPressedEvent();
3277c804472Sopenharmony_ci        EXPECT_TRUE(g_onBackPressed);
3287c804472Sopenharmony_ci    }
3297c804472Sopenharmony_ci
3307c804472Sopenharmony_ci    TEST_F(JsAppImplTest, DispatchKeyEventTest)
3317c804472Sopenharmony_ci    {
3327c804472Sopenharmony_ci        g_onInputEvent = false;
3337c804472Sopenharmony_ci        JsAppImpl::GetInstance().DispatchKeyEvent(nullptr);
3347c804472Sopenharmony_ci        EXPECT_TRUE(g_onInputEvent);
3357c804472Sopenharmony_ci    }
3367c804472Sopenharmony_ci
3377c804472Sopenharmony_ci    TEST_F(JsAppImplTest, DispatchPointerEventTest)
3387c804472Sopenharmony_ci    {
3397c804472Sopenharmony_ci        g_onInputEvent = false;
3407c804472Sopenharmony_ci        JsAppImpl::GetInstance().DispatchPointerEvent(nullptr);
3417c804472Sopenharmony_ci        EXPECT_TRUE(g_onInputEvent);
3427c804472Sopenharmony_ci    }
3437c804472Sopenharmony_ci
3447c804472Sopenharmony_ci    TEST_F(JsAppImplTest, DispatchAxisEventTest)
3457c804472Sopenharmony_ci    {
3467c804472Sopenharmony_ci        g_onInputEvent = false;
3477c804472Sopenharmony_ci        JsAppImpl::GetInstance().DispatchAxisEvent(nullptr);
3487c804472Sopenharmony_ci        EXPECT_TRUE(g_onInputEvent);
3497c804472Sopenharmony_ci    }
3507c804472Sopenharmony_ci
3517c804472Sopenharmony_ci    TEST_F(JsAppImplTest, DispatchInputMethodEventTest)
3527c804472Sopenharmony_ci    {
3537c804472Sopenharmony_ci        g_onInputMethodEvent = false;
3547c804472Sopenharmony_ci        int code = 12;
3557c804472Sopenharmony_ci        JsAppImpl::GetInstance().DispatchInputMethodEvent(code);
3567c804472Sopenharmony_ci        EXPECT_TRUE(g_onInputMethodEvent);
3577c804472Sopenharmony_ci    }
3587c804472Sopenharmony_ci
3597c804472Sopenharmony_ci    TEST_F(JsAppImplTest, InitGlfwEnvTest)
3607c804472Sopenharmony_ci    {
3617c804472Sopenharmony_ci        g_glfwInit = false;
3627c804472Sopenharmony_ci        g_createGlfwWindow = false;
3637c804472Sopenharmony_ci        JsAppImpl::GetInstance().InitGlfwEnv();
3647c804472Sopenharmony_ci        EXPECT_TRUE(g_glfwInit);
3657c804472Sopenharmony_ci        EXPECT_TRUE(g_createGlfwWindow);
3667c804472Sopenharmony_ci    }
3677c804472Sopenharmony_ci
3687c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetJsAppArgsTest)
3697c804472Sopenharmony_ci    {
3707c804472Sopenharmony_ci        CommandParser::GetInstance().isComponentMode = true;
3717c804472Sopenharmony_ci        JsAppImpl::GetInstance().InitCommandInfo();
3727c804472Sopenharmony_ci        OHOS::Ace::Platform::AceRunArgs args;
3737c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetJsAppArgs(args);
3747c804472Sopenharmony_ci        EXPECT_EQ(args.windowTitle, "Ace");
3757c804472Sopenharmony_ci        EXPECT_TRUE(args.isComponentMode);
3767c804472Sopenharmony_ci    }
3777c804472Sopenharmony_ci
3787c804472Sopenharmony_ci    TEST_F(JsAppImplTest, RunJsAppTest)
3797c804472Sopenharmony_ci    {
3807c804472Sopenharmony_ci        JsAppImpl::GetInstance().isDebug = false;
3817c804472Sopenharmony_ci        JsAppImpl::GetInstance().debugServerPort = 0;
3827c804472Sopenharmony_ci        g_setContentInfoCallback = false;
3837c804472Sopenharmony_ci        g_createSurfaceNode = false;
3847c804472Sopenharmony_ci        g_setWindow = false;
3857c804472Sopenharmony_ci        g_initEnv = false;
3867c804472Sopenharmony_ci        JsAppImpl::GetInstance().RunJsApp();
3877c804472Sopenharmony_ci        auto ptr = OHOS::Ace::Platform::AcePreviewHelper::GetInstance()->GetCallbackOfHspBufferTracker();
3887c804472Sopenharmony_ci        EXPECT_TRUE(ptr != nullptr);
3897c804472Sopenharmony_ci        uint8_t* data = new uint8_t[1];
3907c804472Sopenharmony_ci        size_t size = 0;
3917c804472Sopenharmony_ci        std::string msg;
3927c804472Sopenharmony_ci        bool ret = ptr("aa", &data, &size, msg);
3937c804472Sopenharmony_ci        EXPECT_FALSE(ret);
3947c804472Sopenharmony_ci        EXPECT_TRUE(g_setContentInfoCallback);
3957c804472Sopenharmony_ci        EXPECT_TRUE(g_createSurfaceNode);
3967c804472Sopenharmony_ci        EXPECT_TRUE(g_setWindow);
3977c804472Sopenharmony_ci        EXPECT_TRUE(g_initEnv);
3987c804472Sopenharmony_ci        delete[] data;
3997c804472Sopenharmony_ci
4007c804472Sopenharmony_ci        JsAppImpl::GetInstance().isDebug = true;
4017c804472Sopenharmony_ci        JsAppImpl::GetInstance().debugServerPort = 8888;
4027c804472Sopenharmony_ci        g_setHostResolveBufferTracker = false;
4037c804472Sopenharmony_ci        g_setContentInfoCallback = false;
4047c804472Sopenharmony_ci        g_createSurfaceNode = false;
4057c804472Sopenharmony_ci        JsAppImpl::GetInstance().RunJsApp();
4067c804472Sopenharmony_ci        EXPECT_FALSE(g_setHostResolveBufferTracker);
4077c804472Sopenharmony_ci        EXPECT_FALSE(g_setContentInfoCallback);
4087c804472Sopenharmony_ci        EXPECT_FALSE(g_createSurfaceNode);
4097c804472Sopenharmony_ci    }
4107c804472Sopenharmony_ci
4117c804472Sopenharmony_ci    // JsApp start
4127c804472Sopenharmony_ci    TEST_F(JsAppImplTest, ResolutionParamTest)
4137c804472Sopenharmony_ci    {
4147c804472Sopenharmony_ci        int width = 100;
4157c804472Sopenharmony_ci        ResolutionParam param(width, width, width, width);
4167c804472Sopenharmony_ci        EXPECT_EQ(param.orignalWidth, width);
4177c804472Sopenharmony_ci        EXPECT_EQ(param.orignalHeight, width);
4187c804472Sopenharmony_ci        EXPECT_EQ(param.compressionWidth, width);
4197c804472Sopenharmony_ci        EXPECT_EQ(param.compressionHeight, width);
4207c804472Sopenharmony_ci    }
4217c804472Sopenharmony_ci
4227c804472Sopenharmony_ci    TEST_F(JsAppImplTest, StopTest)
4237c804472Sopenharmony_ci    {
4247c804472Sopenharmony_ci        JsAppImpl::GetInstance().isStop = false;
4257c804472Sopenharmony_ci        JsAppImpl::GetInstance().isFinished = false;
4267c804472Sopenharmony_ci        std::thread thread1([]() {
4277c804472Sopenharmony_ci            JsAppImpl::GetInstance().Stop();
4287c804472Sopenharmony_ci        });
4297c804472Sopenharmony_ci        thread1.detach();
4307c804472Sopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(10));
4317c804472Sopenharmony_ci        JsAppImpl::GetInstance().isFinished = true;
4327c804472Sopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(20));
4337c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().isStop);
4347c804472Sopenharmony_ci    }
4357c804472Sopenharmony_ci
4367c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetJsAppPathTest)
4377c804472Sopenharmony_ci    {
4387c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetJsAppPath("pages/Index");
4397c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().jsAppPath, "pages/Index");
4407c804472Sopenharmony_ci    }
4417c804472Sopenharmony_ci
4427c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetUrlPathTest)
4437c804472Sopenharmony_ci    {
4447c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetUrlPath("pages/Index");
4457c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().urlPath, "pages/Index");
4467c804472Sopenharmony_ci    }
4477c804472Sopenharmony_ci
4487c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetPipeNameTest)
4497c804472Sopenharmony_ci    {
4507c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetPipeName("phone_1");
4517c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().pipeName, "phone_1");
4527c804472Sopenharmony_ci    }
4537c804472Sopenharmony_ci
4547c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetPipePortTest)
4557c804472Sopenharmony_ci    {
4567c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetPipePort("5000");
4577c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().pipePort, "5000");
4587c804472Sopenharmony_ci    }
4597c804472Sopenharmony_ci
4607c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetBundleNameTest)
4617c804472Sopenharmony_ci    {
4627c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetBundleName("aaa");
4637c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().bundleName, "aaa");
4647c804472Sopenharmony_ci        EXPECT_EQ(FileSystem::bundleName, "aaa");
4657c804472Sopenharmony_ci        size_t pos = FileSystem::fileSystemPath.find("aaa");
4667c804472Sopenharmony_ci        EXPECT_TRUE(pos != std::string::npos);
4677c804472Sopenharmony_ci    }
4687c804472Sopenharmony_ci
4697c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetRunningTest)
4707c804472Sopenharmony_ci    {
4717c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetRunning(true);
4727c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().isRunning);
4737c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetRunning(false);
4747c804472Sopenharmony_ci        EXPECT_FALSE(JsAppImpl::GetInstance().isRunning);
4757c804472Sopenharmony_ci    }
4767c804472Sopenharmony_ci
4777c804472Sopenharmony_ci    TEST_F(JsAppImplTest, GetRunningTest)
4787c804472Sopenharmony_ci    {
4797c804472Sopenharmony_ci        JsAppImpl::GetInstance().isRunning = true;
4807c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().GetRunning());
4817c804472Sopenharmony_ci        JsAppImpl::GetInstance().isRunning = false;
4827c804472Sopenharmony_ci        EXPECT_FALSE(JsAppImpl::GetInstance().GetRunning());
4837c804472Sopenharmony_ci    }
4847c804472Sopenharmony_ci
4857c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetIsDebugTest)
4867c804472Sopenharmony_ci    {
4877c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetIsDebug(true);
4887c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().isDebug);
4897c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetIsDebug(false);
4907c804472Sopenharmony_ci        EXPECT_FALSE(JsAppImpl::GetInstance().isDebug);
4917c804472Sopenharmony_ci    }
4927c804472Sopenharmony_ci
4937c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetDebugServerPortTest)
4947c804472Sopenharmony_ci    {
4957c804472Sopenharmony_ci        int port = 5000;
4967c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetDebugServerPort(port);
4977c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().debugServerPort, port);
4987c804472Sopenharmony_ci    }
4997c804472Sopenharmony_ci
5007c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetJSHeapSizeTest)
5017c804472Sopenharmony_ci    {
5027c804472Sopenharmony_ci        int size = 5000;
5037c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetJSHeapSize(size);
5047c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().jsHeapSize, size);
5057c804472Sopenharmony_ci    }
5067c804472Sopenharmony_ci
5077c804472Sopenharmony_ci    TEST_F(JsAppImplTest, IsLiteDeviceTest)
5087c804472Sopenharmony_ci    {
5097c804472Sopenharmony_ci        EXPECT_TRUE(JsApp::IsLiteDevice("liteWearable"));
5107c804472Sopenharmony_ci        EXPECT_FALSE(JsApp::IsLiteDevice("phone"));
5117c804472Sopenharmony_ci    }
5127c804472Sopenharmony_ci    // JsApp end
5137c804472Sopenharmony_ci
5147c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetPkgContextInfoTest)
5157c804472Sopenharmony_ci    {
5167c804472Sopenharmony_ci        CommandParser::GetInstance().appResourcePath = testDir;
5177c804472Sopenharmony_ci        CommandParser::GetInstance().loaderJsonPath = testDir + "/loader.json";
5187c804472Sopenharmony_ci        JsAppImpl::GetInstance().InitCommandInfo();
5197c804472Sopenharmony_ci        const std::string moduleJsonPath = testDir + FileSystem::GetSeparator() + "module.json";
5207c804472Sopenharmony_ci        const std::string pkgContextInfoJsonPath = testDir + FileSystem::GetSeparator() + "pkgContextInfo.json";
5217c804472Sopenharmony_ci        // 直接调用
5227c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetPkgContextInfo();
5237c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
5247c804472Sopenharmony_ci        // 创建module.json,json不写全1
5257c804472Sopenharmony_ci        std::string moduleJsonContent = R"({"aaa":"bbb"})";
5267c804472Sopenharmony_ci        WriteFile(moduleJsonPath, moduleJsonContent);
5277c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetPkgContextInfo();
5287c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
5297c804472Sopenharmony_ci        // 创建module.json,json不写全2
5307c804472Sopenharmony_ci        moduleJsonContent = R"({"module":{"name":333}})";
5317c804472Sopenharmony_ci        WriteFile(moduleJsonPath, moduleJsonContent);
5327c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetPkgContextInfo();
5337c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
5347c804472Sopenharmony_ci        // 创建module.json,json写全
5357c804472Sopenharmony_ci        moduleJsonContent = R"({"module":{"name":"entry","packageName":"entry"}})";
5367c804472Sopenharmony_ci        WriteFile(moduleJsonPath, moduleJsonContent);
5377c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetPkgContextInfo();
5387c804472Sopenharmony_ci        EXPECT_FALSE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
5397c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().aceRunArgs.pkgContextInfoJsonStringMap.empty());
5407c804472Sopenharmony_ci        // 创建pkgContextInfo.json
5417c804472Sopenharmony_ci        std::string pkgContextInfoJsonContent = R"({"entry":{"packageName":"entry"}})";
5427c804472Sopenharmony_ci        WriteFile(pkgContextInfoJsonPath, pkgContextInfoJsonContent);
5437c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetPkgContextInfo();
5447c804472Sopenharmony_ci        EXPECT_FALSE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
5457c804472Sopenharmony_ci        EXPECT_FALSE(JsAppImpl::GetInstance().aceRunArgs.pkgContextInfoJsonStringMap.empty());
5467c804472Sopenharmony_ci        if (std::remove(moduleJsonPath.c_str()) != 0) {
5477c804472Sopenharmony_ci            printf("Error deleting module.json file!\n");
5487c804472Sopenharmony_ci        }
5497c804472Sopenharmony_ci        if (std::remove(pkgContextInfoJsonPath.c_str()) != 0) {
5507c804472Sopenharmony_ci            printf("Error deleting pkgContextInfo.json file!\n");
5517c804472Sopenharmony_ci        }
5527c804472Sopenharmony_ci    }
5537c804472Sopenharmony_ci
5547c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetAvoidAreaTest)
5557c804472Sopenharmony_ci    {
5567c804472Sopenharmony_ci        AvoidAreas areas;
5577c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetAvoidArea(areas);
5587c804472Sopenharmony_ci        bool ret = JsAppImpl::GetInstance().avoidInitialAreas == areas;
5597c804472Sopenharmony_ci        EXPECT_TRUE(ret);
5607c804472Sopenharmony_ci    }
5617c804472Sopenharmony_ci
5627c804472Sopenharmony_ci    TEST_F(JsAppImplTest, UpdateAvoidArea2IdeTest)
5637c804472Sopenharmony_ci    {
5647c804472Sopenharmony_ci        const OHOS::Rosen::Rect value = {0, 0, 0, 0};
5657c804472Sopenharmony_ci        g_output = false;
5667c804472Sopenharmony_ci        JsAppImpl::GetInstance().UpdateAvoidArea2Ide("topRect", value);
5677c804472Sopenharmony_ci        EXPECT_TRUE(g_output);
5687c804472Sopenharmony_ci    }
5697c804472Sopenharmony_ci
5707c804472Sopenharmony_ci    TEST_F(JsAppImplTest, GetWindowTest)
5717c804472Sopenharmony_ci    {
5727c804472Sopenharmony_ci        JsAppImpl::GetInstance().isDebug = true;
5737c804472Sopenharmony_ci        OHOS::Rosen::Window* win1 = JsAppImpl::GetInstance().GetWindow();
5747c804472Sopenharmony_ci        EXPECT_TRUE(win1 == nullptr);
5757c804472Sopenharmony_ci
5767c804472Sopenharmony_ci        JsAppImpl::GetInstance().isDebug = false;
5777c804472Sopenharmony_ci        JsAppImpl::GetInstance().ability =
5787c804472Sopenharmony_ci            OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
5797c804472Sopenharmony_ci        OHOS::Rosen::WMError errCode;
5807c804472Sopenharmony_ci        OHOS::sptr<OHOS::Rosen::WindowOption> sp = nullptr;
5817c804472Sopenharmony_ci        auto window = OHOS::Rosen::Window::Create("previewer", sp, nullptr, errCode);
5827c804472Sopenharmony_ci        JsAppImpl::GetInstance().ability->SetWindow(window);
5837c804472Sopenharmony_ci        OHOS::Rosen::Window* win2 = JsAppImpl::GetInstance().GetWindow();
5847c804472Sopenharmony_ci        EXPECT_TRUE(window == win2);
5857c804472Sopenharmony_ci    }
5867c804472Sopenharmony_ci
5877c804472Sopenharmony_ci    TEST_F(JsAppImplTest, InitAvoidAreasTest)
5887c804472Sopenharmony_ci    {
5897c804472Sopenharmony_ci        OHOS::Rosen::WMError errCode;
5907c804472Sopenharmony_ci        OHOS::sptr<OHOS::Rosen::WindowOption> sp = nullptr;
5917c804472Sopenharmony_ci        auto window = OHOS::Rosen::Window::Create("previewer", sp, nullptr, errCode);
5927c804472Sopenharmony_ci        g_getSystemBarPropertyByType = false;
5937c804472Sopenharmony_ci        JsAppImpl::GetInstance().InitAvoidAreas(window);
5947c804472Sopenharmony_ci        EXPECT_TRUE(g_getSystemBarPropertyByType);
5957c804472Sopenharmony_ci    }
5967c804472Sopenharmony_ci
5977c804472Sopenharmony_ci    TEST_F(JsAppImplTest, AdaptDeviceTypeTest)
5987c804472Sopenharmony_ci    {
5997c804472Sopenharmony_ci        int width = 300;
6007c804472Sopenharmony_ci        int height = 300;
6017c804472Sopenharmony_ci        std::string type = "wearable";
6027c804472Sopenharmony_ci        JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
6037c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::WATCH);
6047c804472Sopenharmony_ci        type = "tv";
6057c804472Sopenharmony_ci        JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
6067c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::TV);
6077c804472Sopenharmony_ci        type = "phone";
6087c804472Sopenharmony_ci        JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
6097c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::PHONE);
6107c804472Sopenharmony_ci        type = "default";
6117c804472Sopenharmony_ci        JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
6127c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::PHONE);
6137c804472Sopenharmony_ci        type = "2in1";
6147c804472Sopenharmony_ci        JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
6157c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::TWO_IN_ONE);
6167c804472Sopenharmony_ci        type = "tablet";
6177c804472Sopenharmony_ci        JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
6187c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::TABLET);
6197c804472Sopenharmony_ci        type = "car";
6207c804472Sopenharmony_ci        JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
6217c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::CAR);
6227c804472Sopenharmony_ci    }
6237c804472Sopenharmony_ci
6247c804472Sopenharmony_ci    TEST_F(JsAppImplTest, SetDeviceScreenDensityTest)
6257c804472Sopenharmony_ci    {
6267c804472Sopenharmony_ci        const int32_t screenDensity = 480;
6277c804472Sopenharmony_ci        std::string type = "wearable";
6287c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
6297c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
6307c804472Sopenharmony_ci        type = "tv";
6317c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
6327c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
6337c804472Sopenharmony_ci        type = "phone";
6347c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
6357c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
6367c804472Sopenharmony_ci        type = "default";
6377c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
6387c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
6397c804472Sopenharmony_ci        type = "2in1";
6407c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
6417c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
6427c804472Sopenharmony_ci        type = "tablet";
6437c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
6447c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
6457c804472Sopenharmony_ci        type = "car";
6467c804472Sopenharmony_ci        JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
6477c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
6487c804472Sopenharmony_ci    }
6497c804472Sopenharmony_ci
6507c804472Sopenharmony_ci    TEST_F(JsAppImplTest, ParseSystemParamsTest)
6517c804472Sopenharmony_ci    {
6527c804472Sopenharmony_ci        Json2::Value paramObj = JsonReader::CreateNull();
6537c804472Sopenharmony_ci        JsAppImpl::GetInstance().ParseSystemParams(JsAppImpl::GetInstance().aceRunArgs, paramObj);
6547c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.colorMode, OHOS::Ace::ColorMode::DARK);
6557c804472Sopenharmony_ci
6567c804472Sopenharmony_ci        Json2::Value paramObj2 = JsonReader::CreateObject();
6577c804472Sopenharmony_ci        int width = 666;
6587c804472Sopenharmony_ci        int height = 333;
6597c804472Sopenharmony_ci        int density = 480;
6607c804472Sopenharmony_ci        paramObj2.Add("width", width);
6617c804472Sopenharmony_ci        paramObj2.Add("height", height);
6627c804472Sopenharmony_ci        paramObj2.Add("colorMode", "light");
6637c804472Sopenharmony_ci        paramObj2.Add("orientation", "");
6647c804472Sopenharmony_ci        paramObj2.Add("deviceType", "phone");
6657c804472Sopenharmony_ci        paramObj2.Add("dpi", density);
6667c804472Sopenharmony_ci        paramObj2.Add("locale", "zh_Hans_CN");
6677c804472Sopenharmony_ci        JsAppImpl::GetInstance().ParseSystemParams(JsAppImpl::GetInstance().aceRunArgs, paramObj2);
6687c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, width);
6697c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, height);
6707c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.colorMode, OHOS::Ace::ColorMode::LIGHT);
6717c804472Sopenharmony_ci    }
6727c804472Sopenharmony_ci
6737c804472Sopenharmony_ci    TEST_F(JsAppImplTest, GetDeviceTypeNameTest)
6747c804472Sopenharmony_ci    {
6757c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::WATCH), "watch");
6767c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::TV), "tv");
6777c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::PHONE), "phone");
6787c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::TABLET), "tablet");
6797c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::CAR), "car");
6807c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::UNKNOWN), "");
6817c804472Sopenharmony_ci        EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::WEARABLE), "");
6827c804472Sopenharmony_ci    }
6837c804472Sopenharmony_ci
6847c804472Sopenharmony_ci    TEST_F(JsAppImplTest, CalculateAvoidAreaByTypeTest)
6857c804472Sopenharmony_ci    {
6867c804472Sopenharmony_ci        OHOS::Rosen::SystemBarProperty property;
6877c804472Sopenharmony_ci        property.enable_ = true;
6887c804472Sopenharmony_ci        JsAppImpl::GetInstance().CalculateAvoidAreaByType(
6897c804472Sopenharmony_ci            OHOS::Rosen::WindowType::WINDOW_TYPE_STATUS_BAR, property);
6907c804472Sopenharmony_ci        JsAppImpl::GetInstance().CalculateAvoidAreaByType(
6917c804472Sopenharmony_ci            OHOS::Rosen::WindowType::WINDOW_TYPE_NAVIGATION_INDICATOR, property);
6927c804472Sopenharmony_ci        JsAppImpl::GetInstance().CalculateAvoidAreaByType(
6937c804472Sopenharmony_ci            OHOS::Rosen::WindowType::APP_MAIN_WINDOW_BASE, property);
6947c804472Sopenharmony_ci        property.enable_ = false;
6957c804472Sopenharmony_ci        JsAppImpl::GetInstance().CalculateAvoidAreaByType(
6967c804472Sopenharmony_ci            OHOS::Rosen::WindowType::WINDOW_TYPE_STATUS_BAR, property);
6977c804472Sopenharmony_ci        JsAppImpl::GetInstance().CalculateAvoidAreaByType(
6987c804472Sopenharmony_ci            OHOS::Rosen::WindowType::WINDOW_TYPE_NAVIGATION_INDICATOR, property);
6997c804472Sopenharmony_ci        JsAppImpl::GetInstance().CalculateAvoidAreaByType(
7007c804472Sopenharmony_ci            OHOS::Rosen::WindowType::APP_MAIN_WINDOW_BASE, property);
7017c804472Sopenharmony_ci    }
7027c804472Sopenharmony_ci
7037c804472Sopenharmony_ci    TEST_F(JsAppImplTest, InitJsAppTest)
7047c804472Sopenharmony_ci    {
7057c804472Sopenharmony_ci        JsAppImpl::GetInstance().isStop = false;
7067c804472Sopenharmony_ci        std::thread thread1([]() {
7077c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap.clear();
7087c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-j"] = { "" };
7097c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-s"] = { "" };
7107c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-url"] = { "" };
7117c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-lws"] = { "" };
7127c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-cm"] = { "" };
7137c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-av"] = { "" };
7147c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-sd"] = { "" };
7157c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-cc"] = { "" };
7167c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-d"] = { "" };
7177c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap["-p"] = { "" };
7187c804472Sopenharmony_ci            JsAppImpl::GetInstance().InitJsApp();
7197c804472Sopenharmony_ci            CommandParser::GetInstance().argsMap.clear();
7207c804472Sopenharmony_ci        });
7217c804472Sopenharmony_ci        thread1.detach();
7227c804472Sopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(10));
7237c804472Sopenharmony_ci        JsAppImpl::GetInstance().isStop = true;
7247c804472Sopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(10));
7257c804472Sopenharmony_ci        EXPECT_TRUE(JsAppImpl::GetInstance().isFinished);
7267c804472Sopenharmony_ci    }
7277c804472Sopenharmony_ci}