• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <string>
16 #include <sys/stat.h>
17 #include "gtest/gtest.h"
18 #include "window.h"
19 #define private public
20 #define protected public
21 #include "MockGlobalResult.h"
22 #include "JsAppImpl.h"
23 #include "CommandLineInterface.h"
24 #include "CommandParser.h"
25 #include "VirtualScreenImpl.h"
26 #include "window_model.h"
27 #include "window_display.h"
28 #include "FileSystem.h"
29 #include "ace_preview_helper.h"
30 #include "window_model.h"
31 using namespace std;
32 
33 namespace {
34     class JsAppImplTest : public ::testing::Test {
35     public:
JsAppImplTest()36         JsAppImplTest() {}
~JsAppImplTest()37         ~JsAppImplTest() {}
38     protected:
WriteFile(std::string testFile,std::string fileContent)39         static void WriteFile(std::string testFile, std::string fileContent)
40         {
41             std::ofstream file(testFile, std::ios::out | std::ios::in | std::ios_base::trunc);
42             if (file.is_open()) {
43                 file << fileContent;
44                 file.close();
45             } else {
46                 printf("Error open file!\n");
47             }
48         }
49 
SetUpTestCase()50         static void SetUpTestCase()
51         {
52             CommandLineInterface::GetInstance().Init("pipeName");
53             char buffer[FILENAME_MAX];
54             if (getcwd(buffer, FILENAME_MAX) != nullptr) {
55                 testDir = std::string(buffer);
56             } else {
57                 printf("error: getcwd failed\n");
58             }
59         }
60 
61         static std::string testDir;
62     };
63     std::string JsAppImplTest::testDir = "";
64 
65     // 测试拷贝构造函数是否被删除
TEST_F(JsAppImplTest,CopyConstructorDeletedTest)66     TEST_F(JsAppImplTest, CopyConstructorDeletedTest)
67     {
68         EXPECT_TRUE(std::is_copy_constructible<JsApp>::value == false);
69     }
70 
71     // 测试赋值运算符是否被删除
TEST_F(JsAppImplTest,AssignmentOperatorDeletedTest)72     TEST_F(JsAppImplTest, AssignmentOperatorDeletedTest)
73     {
74         EXPECT_TRUE(std::is_copy_assignable<JsApp>::value == false);
75     }
76 
TEST_F(JsAppImplTest,StartTest)77     TEST_F(JsAppImplTest, StartTest)
78     {
79         JsAppImpl::GetInstance().isStop = false;
80         std::thread thread1([]() {
81             JsAppImpl::GetInstance().Start();
82         });
83         thread1.detach();
84         this_thread::sleep_for(chrono::milliseconds(10));
85         JsAppImpl::GetInstance().isStop = true;
86         this_thread::sleep_for(chrono::milliseconds(10));
87         EXPECT_TRUE(JsAppImpl::GetInstance().isFinished);
88     }
89 
TEST_F(JsAppImplTest,RestartTest)90     TEST_F(JsAppImplTest, RestartTest)
91     {
92         JsAppImpl::GetInstance().ability =
93             OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
94         JsAppImpl::GetInstance().Restart();
95         bool eq = JsAppImpl::GetInstance().ability == nullptr;
96         EXPECT_TRUE(eq);
97     }
98 
TEST_F(JsAppImplTest,InterruptTest)99     TEST_F(JsAppImplTest, InterruptTest)
100     {
101         JsAppImpl::GetInstance().isStop = false;
102         JsAppImpl::GetInstance().Interrupt();
103         EXPECT_TRUE(JsAppImpl::GetInstance().isStop);
104     }
105 
TEST_F(JsAppImplTest,GetJSONTreeTest)106     TEST_F(JsAppImplTest, GetJSONTreeTest)
107     {
108         EXPECT_EQ(JsAppImpl::GetInstance().GetJSONTree(), "jsontree");
109     }
110 
TEST_F(JsAppImplTest,GetDefaultJSONTreeTest)111     TEST_F(JsAppImplTest, GetDefaultJSONTreeTest)
112     {
113         EXPECT_EQ(JsAppImpl::GetInstance().GetDefaultJSONTree(), "defaultjsontree");
114     }
115 
TEST_F(JsAppImplTest,OrientationChangedTest)116     TEST_F(JsAppImplTest, OrientationChangedTest)
117     {
118         JsAppImpl::GetInstance().ability =
119             OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
120         g_surfaceChanged = false;
121         JsAppImpl::GetInstance().OrientationChanged("portrait");
122         EXPECT_TRUE(g_surfaceChanged);
123         EXPECT_EQ(JsAppImpl::GetInstance().orientation, "portrait");
124         g_surfaceChanged = false;
125         JsAppImpl::GetInstance().OrientationChanged("landscape");
126         EXPECT_TRUE(g_surfaceChanged);
127         EXPECT_EQ(JsAppImpl::GetInstance().orientation, "landscape");
128     }
129 
TEST_F(JsAppImplTest,ResolutionChangedTest)130     TEST_F(JsAppImplTest, ResolutionChangedTest)
131     {
132         JsAppImpl::GetInstance().isStop = false;
133         std::thread thread1([]() {
134             JsAppImpl::GetInstance().Start();
135         });
136         thread1.detach();
137         this_thread::sleep_for(chrono::milliseconds(10));
138         int32_t originWidth = 222;
139         int32_t originHeight = 333;
140         int32_t width = 222;
141         int32_t height = 333;
142         int32_t screenDensity = 360;
143         string reason = "resize";
144         ResolutionParam param(originWidth, originHeight, width, height);
145         g_surfaceChanged = false;
146         JsAppImpl::GetInstance().ResolutionChanged(param, screenDensity, reason);
147         EXPECT_TRUE(g_surfaceChanged);
148         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, 222);
149         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, 333);
150     }
151 
TEST_F(JsAppImplTest,ConvertResizeReasonTest)152     TEST_F(JsAppImplTest, ConvertResizeReasonTest)
153     {
154         EXPECT_EQ(JsAppImpl::GetInstance().ConvertResizeReason("undefined"),
155             OHOS::Ace::WindowSizeChangeReason::UNDEFINED);
156         EXPECT_EQ(JsAppImpl::GetInstance().ConvertResizeReason("rotation"),
157             OHOS::Ace::WindowSizeChangeReason::ROTATION);
158         EXPECT_EQ(JsAppImpl::GetInstance().ConvertResizeReason("resize"),
159             OHOS::Ace::WindowSizeChangeReason::RESIZE);
160     }
161 
TEST_F(JsAppImplTest,SetResolutionParamsTest)162     TEST_F(JsAppImplTest, SetResolutionParamsTest)
163     {
164         CommandParser::GetInstance().deviceType = "phone";
165         JsAppImpl::GetInstance().InitCommandInfo();
166         int32_t originWidth = 111;
167         int32_t originHeight = 222;
168         int32_t width = 111;
169         int32_t height = 222;
170         int32_t screenDensity = 480;
171         JsAppImpl::GetInstance().SetResolutionParams(originWidth, originHeight, width, height, screenDensity);
172         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, 111);
173         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, 222);
174         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.density, 3);
175         EXPECT_EQ(JsAppImpl::GetInstance().orientation, "portrait");
176         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.orientation,
177             OHOS::Ace::DeviceOrientation::PORTRAIT);
178 
179         originWidth = 222;
180         originHeight = 111;
181         width = 222;
182         height = 111;
183         screenDensity = 320;
184         JsAppImpl::GetInstance().SetResolutionParams(originWidth, originHeight, width, height, screenDensity);
185         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, 222);
186         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, 111);
187         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.density, 2);
188         EXPECT_EQ(JsAppImpl::GetInstance().orientation, "landscape");
189         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.orientation,
190             OHOS::Ace::DeviceOrientation::LANDSCAPE);
191     }
192 
TEST_F(JsAppImplTest,SetArgsColorModeTest)193     TEST_F(JsAppImplTest, SetArgsColorModeTest)
194     {
195         JsAppImpl::GetInstance().SetArgsColorMode("light");
196         EXPECT_EQ("light", JsAppImpl::GetInstance().colorMode);
197     }
198 
TEST_F(JsAppImplTest,SetArgsAceVersionTest)199     TEST_F(JsAppImplTest, SetArgsAceVersionTest)
200     {
201         JsAppImpl::GetInstance().SetArgsAceVersion("ACE_2_0");
202         EXPECT_EQ("ACE_2_0", JsAppImpl::GetInstance().aceVersion);
203     }
204 
TEST_F(JsAppImplTest,SetDeviceOrentationTest)205     TEST_F(JsAppImplTest, SetDeviceOrentationTest)
206     {
207         JsAppImpl::GetInstance().SetDeviceOrentation("landscape");
208         EXPECT_EQ("landscape", JsAppImpl::GetInstance().orientation);
209     }
210 
TEST_F(JsAppImplTest,GetOrientationTest)211     TEST_F(JsAppImplTest, GetOrientationTest)
212     {
213         JsAppImpl::GetInstance().orientation = "portrait";
214         EXPECT_EQ(JsAppImpl::GetInstance().GetOrientation(), "portrait");
215     }
216 
TEST_F(JsAppImplTest,GetColorModeTest)217     TEST_F(JsAppImplTest, GetColorModeTest)
218     {
219         JsAppImpl::GetInstance().colorMode = "dark";
220         EXPECT_EQ(JsAppImpl::GetInstance().GetColorMode(), "dark");
221     }
222 
TEST_F(JsAppImplTest,ColorModeChangedTest)223     TEST_F(JsAppImplTest, ColorModeChangedTest)
224     {
225         JsAppImpl::GetInstance().ability =
226             OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
227         // light
228         g_onConfigurationChanged = false;
229         JsAppImpl::GetInstance().ColorModeChanged("light");
230         EXPECT_TRUE(g_onConfigurationChanged);
231         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.colorMode,
232             OHOS::Ace::ColorMode::LIGHT);
233         // dark
234         g_onConfigurationChanged = false;
235         JsAppImpl::GetInstance().ColorModeChanged("dark");
236         EXPECT_TRUE(g_onConfigurationChanged);
237         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.colorMode,
238             OHOS::Ace::ColorMode::DARK);
239     }
240 
TEST_F(JsAppImplTest,ReloadRuntimePageTest)241     TEST_F(JsAppImplTest, ReloadRuntimePageTest)
242     {
243         JsAppImpl::GetInstance().ability =
244             OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
245         g_replacePage = false;
246         JsAppImpl::GetInstance().ReloadRuntimePage("pages/Index");
247         EXPECT_TRUE(g_replacePage);
248     }
249 
TEST_F(JsAppImplTest,SetScreenDensityTest)250     TEST_F(JsAppImplTest, SetScreenDensityTest)
251     {
252         JsAppImpl::GetInstance().SetScreenDensity("360");
253         EXPECT_EQ(JsAppImpl::GetInstance().screenDensity, "360");
254     }
255 
TEST_F(JsAppImplTest,SetConfigChangesTest)256     TEST_F(JsAppImplTest, SetConfigChangesTest)
257     {
258         JsAppImpl::GetInstance().SetConfigChanges("aaa");
259         EXPECT_EQ(JsAppImpl::GetInstance().configChanges, "aaa");
260     }
261 
TEST_F(JsAppImplTest,MemoryRefreshTest)262     TEST_F(JsAppImplTest, MemoryRefreshTest)
263     {
264         // ability is nullptr
265         JsAppImpl::GetInstance().ability = nullptr;
266         g_operateComponent = false;
267         JsAppImpl::GetInstance().MemoryRefresh("aaa");
268         EXPECT_FALSE(g_operateComponent);
269         // ability is not nullptr
270         JsAppImpl::GetInstance().ability =
271             OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
272         g_operateComponent = false;
273         JsAppImpl::GetInstance().MemoryRefresh("aaa");
274         EXPECT_TRUE(g_operateComponent);
275     }
276 
TEST_F(JsAppImplTest,LoadDocumentTest)277     TEST_F(JsAppImplTest, LoadDocumentTest)
278     {
279         JsAppImpl::GetInstance().ability =
280             OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
281         Json2::Value val = JsonReader::CreateNull();
282         g_loadAceDocument = false;
283         JsAppImpl::GetInstance().LoadDocument("aaa", "bbb", val);
284         EXPECT_TRUE(g_loadAceDocument);
285     }
286 
TEST_F(JsAppImplTest,FoldStatusChangedTest)287     TEST_F(JsAppImplTest, FoldStatusChangedTest)
288     {
289         JsAppImpl::GetInstance().isStop = false;
290         std::thread thread1([]() {
291             JsAppImpl::GetInstance().Start();
292         });
293         thread1.detach();
294         this_thread::sleep_for(chrono::milliseconds(10));
295         int width = 200;
296         int height = 300;
297         g_execStatusChangedCallback = false;
298         JsAppImpl::GetInstance().FoldStatusChanged("fold", width, height);
299         EXPECT_EQ(VirtualScreenImpl::GetInstance().foldStatus, "fold");
300         EXPECT_EQ(OHOS::Previewer::PreviewerDisplay::GetInstance().foldStatus_, OHOS::Rosen::FoldStatus::FOLDED);
301         EXPECT_TRUE(g_execStatusChangedCallback);
302         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, width);
303         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, height);
304 
305         JsAppImpl::GetInstance().FoldStatusChanged("unfold", width, height);
306         EXPECT_EQ(VirtualScreenImpl::GetInstance().foldStatus, "unfold");
307         EXPECT_EQ(OHOS::Previewer::PreviewerDisplay::GetInstance().foldStatus_, OHOS::Rosen::FoldStatus::EXPAND);
308 
309         JsAppImpl::GetInstance().FoldStatusChanged("half_fold", width, height);
310         EXPECT_EQ(VirtualScreenImpl::GetInstance().foldStatus, "half_fold");
311         EXPECT_EQ(OHOS::Previewer::PreviewerDisplay::GetInstance().foldStatus_, OHOS::Rosen::FoldStatus::HALF_FOLD);
312 
313         width = 210;
314         height = 310;
315         g_execStatusChangedCallback = false;
316         JsAppImpl::GetInstance().FoldStatusChanged("unknown", width, height);
317         EXPECT_EQ(VirtualScreenImpl::GetInstance().foldStatus, "unknown");
318         EXPECT_EQ(OHOS::Previewer::PreviewerDisplay::GetInstance().foldStatus_, OHOS::Rosen::FoldStatus::UNKNOWN);
319         EXPECT_TRUE(g_execStatusChangedCallback);
320         EXPECT_NE(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, width);
321         EXPECT_NE(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, height);
322     }
323 
TEST_F(JsAppImplTest,DispatchBackPressedEventTest)324     TEST_F(JsAppImplTest, DispatchBackPressedEventTest)
325     {
326         g_onBackPressed = false;
327         JsAppImpl::GetInstance().DispatchBackPressedEvent();
328         EXPECT_TRUE(g_onBackPressed);
329     }
330 
TEST_F(JsAppImplTest,DispatchKeyEventTest)331     TEST_F(JsAppImplTest, DispatchKeyEventTest)
332     {
333         g_onInputEvent = false;
334         JsAppImpl::GetInstance().DispatchKeyEvent(nullptr);
335         EXPECT_TRUE(g_onInputEvent);
336     }
337 
TEST_F(JsAppImplTest,DispatchPointerEventTest)338     TEST_F(JsAppImplTest, DispatchPointerEventTest)
339     {
340         g_onInputEvent = false;
341         JsAppImpl::GetInstance().DispatchPointerEvent(nullptr);
342         EXPECT_TRUE(g_onInputEvent);
343     }
344 
TEST_F(JsAppImplTest,DispatchAxisEventTest)345     TEST_F(JsAppImplTest, DispatchAxisEventTest)
346     {
347         g_onInputEvent = false;
348         JsAppImpl::GetInstance().DispatchAxisEvent(nullptr);
349         EXPECT_TRUE(g_onInputEvent);
350     }
351 
TEST_F(JsAppImplTest,DispatchInputMethodEventTest)352     TEST_F(JsAppImplTest, DispatchInputMethodEventTest)
353     {
354         g_onInputMethodEvent = false;
355         int code = 12;
356         JsAppImpl::GetInstance().DispatchInputMethodEvent(code);
357         EXPECT_TRUE(g_onInputMethodEvent);
358     }
359 
TEST_F(JsAppImplTest,InitGlfwEnvTest)360     TEST_F(JsAppImplTest, InitGlfwEnvTest)
361     {
362         g_glfwInit = false;
363         g_createGlfwWindow = false;
364         JsAppImpl::GetInstance().InitGlfwEnv();
365         EXPECT_TRUE(g_glfwInit);
366         EXPECT_TRUE(g_createGlfwWindow);
367     }
368 
TEST_F(JsAppImplTest,SetJsAppArgsTest)369     TEST_F(JsAppImplTest, SetJsAppArgsTest)
370     {
371         CommandParser::GetInstance().isComponentMode = true;
372         JsAppImpl::GetInstance().InitCommandInfo();
373         OHOS::Ace::Platform::AceRunArgs args;
374         JsAppImpl::GetInstance().SetJsAppArgs(args);
375         EXPECT_EQ(args.windowTitle, "Ace");
376         EXPECT_TRUE(args.isComponentMode);
377     }
378 
TEST_F(JsAppImplTest,RunJsAppTest)379     TEST_F(JsAppImplTest, RunJsAppTest)
380     {
381         JsAppImpl::GetInstance().isDebug = false;
382         JsAppImpl::GetInstance().debugServerPort = 0;
383         g_setContentInfoCallback = false;
384         g_createSurfaceNode = false;
385         g_setWindow = false;
386         g_initEnv = false;
387         JsAppImpl::GetInstance().RunJsApp();
388         auto ptr = OHOS::Ace::Platform::AcePreviewHelper::GetInstance()->GetCallbackOfHspBufferTracker();
389         EXPECT_TRUE(ptr != nullptr);
390         uint8_t* data = new uint8_t[1];
391         size_t size = 0;
392         std::string msg;
393         bool ret = ptr("aa", &data, &size, msg);
394         EXPECT_FALSE(ret);
395         EXPECT_TRUE(g_setContentInfoCallback);
396         EXPECT_TRUE(g_createSurfaceNode);
397         EXPECT_TRUE(g_setWindow);
398         EXPECT_TRUE(g_initEnv);
399         delete[] data;
400 
401         JsAppImpl::GetInstance().isDebug = true;
402         JsAppImpl::GetInstance().debugServerPort = 8888;
403         g_setHostResolveBufferTracker = false;
404         g_setContentInfoCallback = false;
405         g_createSurfaceNode = false;
406         JsAppImpl::GetInstance().RunJsApp();
407         EXPECT_FALSE(g_setHostResolveBufferTracker);
408         EXPECT_FALSE(g_setContentInfoCallback);
409         EXPECT_FALSE(g_createSurfaceNode);
410     }
411 
412     // JsApp start
TEST_F(JsAppImplTest,ResolutionParamTest)413     TEST_F(JsAppImplTest, ResolutionParamTest)
414     {
415         int width = 100;
416         ResolutionParam param(width, width, width, width);
417         EXPECT_EQ(param.orignalWidth, width);
418         EXPECT_EQ(param.orignalHeight, width);
419         EXPECT_EQ(param.compressionWidth, width);
420         EXPECT_EQ(param.compressionHeight, width);
421     }
422 
TEST_F(JsAppImplTest,StopTest)423     TEST_F(JsAppImplTest, StopTest)
424     {
425         JsAppImpl::GetInstance().isStop = false;
426         JsAppImpl::GetInstance().isFinished = false;
427         std::thread thread1([]() {
428             JsAppImpl::GetInstance().Stop();
429         });
430         thread1.detach();
431         this_thread::sleep_for(chrono::milliseconds(10));
432         JsAppImpl::GetInstance().isFinished = true;
433         this_thread::sleep_for(chrono::milliseconds(20));
434         EXPECT_TRUE(JsAppImpl::GetInstance().isStop);
435     }
436 
TEST_F(JsAppImplTest,SetJsAppPathTest)437     TEST_F(JsAppImplTest, SetJsAppPathTest)
438     {
439         JsAppImpl::GetInstance().SetJsAppPath("pages/Index");
440         EXPECT_EQ(JsAppImpl::GetInstance().jsAppPath, "pages/Index");
441     }
442 
TEST_F(JsAppImplTest,SetUrlPathTest)443     TEST_F(JsAppImplTest, SetUrlPathTest)
444     {
445         JsAppImpl::GetInstance().SetUrlPath("pages/Index");
446         EXPECT_EQ(JsAppImpl::GetInstance().urlPath, "pages/Index");
447     }
448 
TEST_F(JsAppImplTest,SetPipeNameTest)449     TEST_F(JsAppImplTest, SetPipeNameTest)
450     {
451         JsAppImpl::GetInstance().SetPipeName("phone_1");
452         EXPECT_EQ(JsAppImpl::GetInstance().pipeName, "phone_1");
453     }
454 
TEST_F(JsAppImplTest,SetPipePortTest)455     TEST_F(JsAppImplTest, SetPipePortTest)
456     {
457         JsAppImpl::GetInstance().SetPipePort("5000");
458         EXPECT_EQ(JsAppImpl::GetInstance().pipePort, "5000");
459     }
460 
TEST_F(JsAppImplTest,SetBundleNameTest)461     TEST_F(JsAppImplTest, SetBundleNameTest)
462     {
463         JsAppImpl::GetInstance().SetBundleName("aaa");
464         EXPECT_EQ(JsAppImpl::GetInstance().bundleName, "aaa");
465         EXPECT_EQ(FileSystem::bundleName, "aaa");
466         size_t pos = FileSystem::fileSystemPath.find("aaa");
467         EXPECT_TRUE(pos != std::string::npos);
468     }
469 
TEST_F(JsAppImplTest,SetRunningTest)470     TEST_F(JsAppImplTest, SetRunningTest)
471     {
472         JsAppImpl::GetInstance().SetRunning(true);
473         EXPECT_TRUE(JsAppImpl::GetInstance().isRunning);
474         JsAppImpl::GetInstance().SetRunning(false);
475         EXPECT_FALSE(JsAppImpl::GetInstance().isRunning);
476     }
477 
TEST_F(JsAppImplTest,GetRunningTest)478     TEST_F(JsAppImplTest, GetRunningTest)
479     {
480         JsAppImpl::GetInstance().isRunning = true;
481         EXPECT_TRUE(JsAppImpl::GetInstance().GetRunning());
482         JsAppImpl::GetInstance().isRunning = false;
483         EXPECT_FALSE(JsAppImpl::GetInstance().GetRunning());
484     }
485 
TEST_F(JsAppImplTest,SetIsDebugTest)486     TEST_F(JsAppImplTest, SetIsDebugTest)
487     {
488         JsAppImpl::GetInstance().SetIsDebug(true);
489         EXPECT_TRUE(JsAppImpl::GetInstance().isDebug);
490         JsAppImpl::GetInstance().SetIsDebug(false);
491         EXPECT_FALSE(JsAppImpl::GetInstance().isDebug);
492     }
493 
TEST_F(JsAppImplTest,SetDebugServerPortTest)494     TEST_F(JsAppImplTest, SetDebugServerPortTest)
495     {
496         int port = 5000;
497         JsAppImpl::GetInstance().SetDebugServerPort(port);
498         EXPECT_EQ(JsAppImpl::GetInstance().debugServerPort, port);
499     }
500 
TEST_F(JsAppImplTest,SetJSHeapSizeTest)501     TEST_F(JsAppImplTest, SetJSHeapSizeTest)
502     {
503         int size = 5000;
504         JsAppImpl::GetInstance().SetJSHeapSize(size);
505         EXPECT_EQ(JsAppImpl::GetInstance().jsHeapSize, size);
506     }
507 
TEST_F(JsAppImplTest,IsLiteDeviceTest)508     TEST_F(JsAppImplTest, IsLiteDeviceTest)
509     {
510         EXPECT_TRUE(JsApp::IsLiteDevice("liteWearable"));
511         EXPECT_FALSE(JsApp::IsLiteDevice("phone"));
512     }
513     // JsApp end
514 
TEST_F(JsAppImplTest,SetPkgContextInfoTest)515     TEST_F(JsAppImplTest, SetPkgContextInfoTest)
516     {
517         CommandParser::GetInstance().appResourcePath = testDir;
518         CommandParser::GetInstance().loaderJsonPath = testDir + "/loader.json";
519         JsAppImpl::GetInstance().InitCommandInfo();
520         const string moduleJsonPath = testDir + FileSystem::GetSeparator() + "module.json";
521         const string pkgContextInfoJsonPath = testDir + FileSystem::GetSeparator() + "pkgContextInfo.json";
522         // 直接调用
523         JsAppImpl::GetInstance().SetPkgContextInfo();
524         EXPECT_TRUE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
525         // 创建module.json,json不写全1
526         std::string moduleJsonContent = R"({"aaa":"bbb"})";
527         WriteFile(moduleJsonPath, moduleJsonContent);
528         JsAppImpl::GetInstance().SetPkgContextInfo();
529         EXPECT_TRUE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
530         // 创建module.json,json不写全2
531         moduleJsonContent = R"({"module":{"name":333}})";
532         WriteFile(moduleJsonPath, moduleJsonContent);
533         JsAppImpl::GetInstance().SetPkgContextInfo();
534         EXPECT_TRUE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
535         // 创建module.json,json写全
536         moduleJsonContent = R"({"module":{"name":"entry","packageName":"entry"}})";
537         WriteFile(moduleJsonPath, moduleJsonContent);
538         JsAppImpl::GetInstance().SetPkgContextInfo();
539         EXPECT_FALSE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
540         EXPECT_TRUE(JsAppImpl::GetInstance().aceRunArgs.pkgContextInfoJsonStringMap.empty());
541         // 创建pkgContextInfo.json
542         std::string pkgContextInfoJsonContent = R"({"entry":{"packageName":"entry"}})";
543         WriteFile(pkgContextInfoJsonPath, pkgContextInfoJsonContent);
544         JsAppImpl::GetInstance().SetPkgContextInfo();
545         EXPECT_FALSE(JsAppImpl::GetInstance().aceRunArgs.packageNameList.empty());
546         EXPECT_FALSE(JsAppImpl::GetInstance().aceRunArgs.pkgContextInfoJsonStringMap.empty());
547         if (std::remove(moduleJsonPath.c_str()) != 0) {
548             printf("Error deleting module.json file!\n");
549         }
550         if (std::remove(pkgContextInfoJsonPath.c_str()) != 0) {
551             printf("Error deleting pkgContextInfo.json file!\n");
552         }
553     }
554 
TEST_F(JsAppImplTest,SetAvoidAreaTest)555     TEST_F(JsAppImplTest, SetAvoidAreaTest)
556     {
557         AvoidAreas areas;
558         JsAppImpl::GetInstance().SetAvoidArea(areas);
559         bool ret = JsAppImpl::GetInstance().avoidInitialAreas == areas;
560         EXPECT_TRUE(ret);
561     }
562 
TEST_F(JsAppImplTest,UpdateAvoidArea2IdeTest)563     TEST_F(JsAppImplTest, UpdateAvoidArea2IdeTest)
564     {
565         const OHOS::Rosen::Rect value = {0, 0, 0, 0};
566         g_output = false;
567         JsAppImpl::GetInstance().UpdateAvoidArea2Ide("topRect", value);
568         EXPECT_TRUE(g_output);
569     }
570 
TEST_F(JsAppImplTest,GetWindowTest)571     TEST_F(JsAppImplTest, GetWindowTest)
572     {
573         JsAppImpl::GetInstance().isDebug = true;
574         OHOS::Rosen::Window* win1 = JsAppImpl::GetInstance().GetWindow();
575         EXPECT_TRUE(win1 == nullptr);
576 
577         JsAppImpl::GetInstance().isDebug = false;
578         JsAppImpl::GetInstance().ability =
579             OHOS::Ace::Platform::AceAbility::CreateInstance(JsAppImpl::GetInstance().aceRunArgs);
580         OHOS::Rosen::WMError errCode;
581         OHOS::sptr<OHOS::Rosen::WindowOption> sp = nullptr;
582         auto window = OHOS::Rosen::Window::Create("previewer", sp, nullptr, errCode);
583         JsAppImpl::GetInstance().ability->SetWindow(window);
584         OHOS::Rosen::Window* win2 = JsAppImpl::GetInstance().GetWindow();
585         EXPECT_TRUE(window == win2);
586     }
587 
TEST_F(JsAppImplTest,InitAvoidAreasTest)588     TEST_F(JsAppImplTest, InitAvoidAreasTest)
589     {
590         OHOS::Rosen::WMError errCode;
591         OHOS::sptr<OHOS::Rosen::WindowOption> sp = nullptr;
592         auto window = OHOS::Rosen::Window::Create("previewer", sp, nullptr, errCode);
593         g_getSystemBarPropertyByType = false;
594         JsAppImpl::GetInstance().InitAvoidAreas(window);
595         EXPECT_TRUE(g_getSystemBarPropertyByType);
596     }
597 
TEST_F(JsAppImplTest,AdaptDeviceTypeTest)598     TEST_F(JsAppImplTest, AdaptDeviceTypeTest)
599     {
600         int width = 300;
601         int height = 300;
602         std::string type = "wearable";
603         JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
604         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::WATCH);
605         type = "tv";
606         JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
607         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::TV);
608         type = "phone";
609         JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
610         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::PHONE);
611         type = "default";
612         JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
613         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::PHONE);
614         type = "2in1";
615         JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
616         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::TWO_IN_ONE);
617         type = "tablet";
618         JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
619         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::TABLET);
620         type = "car";
621         JsAppImpl::GetInstance().AdaptDeviceType(JsAppImpl::GetInstance().aceRunArgs, type, width, height);
622         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.deviceType, OHOS::Ace::DeviceType::CAR);
623     }
624 
TEST_F(JsAppImplTest,SetDeviceScreenDensityTest)625     TEST_F(JsAppImplTest, SetDeviceScreenDensityTest)
626     {
627         const int32_t screenDensity = 480;
628         std::string type = "wearable";
629         JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
630         EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
631         type = "tv";
632         JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
633         EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
634         type = "phone";
635         JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
636         EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
637         type = "default";
638         JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
639         EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
640         type = "2in1";
641         JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
642         EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
643         type = "tablet";
644         JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
645         EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
646         type = "car";
647         JsAppImpl::GetInstance().SetDeviceScreenDensity(screenDensity, type);
648         EXPECT_EQ(JsAppImpl::GetInstance().watchScreenDensity, screenDensity);
649     }
650 
TEST_F(JsAppImplTest,ParseSystemParamsTest)651     TEST_F(JsAppImplTest, ParseSystemParamsTest)
652     {
653         Json2::Value paramObj = JsonReader::CreateNull();
654         JsAppImpl::GetInstance().ParseSystemParams(JsAppImpl::GetInstance().aceRunArgs, paramObj);
655         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.colorMode, OHOS::Ace::ColorMode::DARK);
656 
657         Json2::Value paramObj2 = JsonReader::CreateObject();
658         int width = 666;
659         int height = 333;
660         int density = 480;
661         paramObj2.Add("width", width);
662         paramObj2.Add("height", height);
663         paramObj2.Add("colorMode", "light");
664         paramObj2.Add("orientation", "");
665         paramObj2.Add("deviceType", "phone");
666         paramObj2.Add("dpi", density);
667         paramObj2.Add("locale", "zh_Hans_CN");
668         JsAppImpl::GetInstance().ParseSystemParams(JsAppImpl::GetInstance().aceRunArgs, paramObj2);
669         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceWidth, width);
670         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceHeight, height);
671         EXPECT_EQ(JsAppImpl::GetInstance().aceRunArgs.deviceConfig.colorMode, OHOS::Ace::ColorMode::LIGHT);
672     }
673 
TEST_F(JsAppImplTest,GetDeviceTypeNameTest)674     TEST_F(JsAppImplTest, GetDeviceTypeNameTest)
675     {
676         EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::WATCH), "watch");
677         EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::TV), "tv");
678         EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::PHONE), "phone");
679         EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::TABLET), "tablet");
680         EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::CAR), "car");
681         EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::UNKNOWN), "");
682         EXPECT_EQ(JsAppImpl::GetInstance().GetDeviceTypeName(OHOS::Ace::DeviceType::WEARABLE), "");
683     }
684 
TEST_F(JsAppImplTest,CalculateAvoidAreaByTypeTest)685     TEST_F(JsAppImplTest, CalculateAvoidAreaByTypeTest)
686     {
687         OHOS::Rosen::SystemBarProperty property;
688         property.enable_ = true;
689         JsAppImpl::GetInstance().CalculateAvoidAreaByType(
690             OHOS::Rosen::WindowType::WINDOW_TYPE_STATUS_BAR, property);
691         JsAppImpl::GetInstance().CalculateAvoidAreaByType(
692             OHOS::Rosen::WindowType::WINDOW_TYPE_NAVIGATION_INDICATOR, property);
693         JsAppImpl::GetInstance().CalculateAvoidAreaByType(
694             OHOS::Rosen::WindowType::APP_MAIN_WINDOW_BASE, property);
695         property.enable_ = false;
696         JsAppImpl::GetInstance().CalculateAvoidAreaByType(
697             OHOS::Rosen::WindowType::WINDOW_TYPE_STATUS_BAR, property);
698         JsAppImpl::GetInstance().CalculateAvoidAreaByType(
699             OHOS::Rosen::WindowType::WINDOW_TYPE_NAVIGATION_INDICATOR, property);
700         JsAppImpl::GetInstance().CalculateAvoidAreaByType(
701             OHOS::Rosen::WindowType::APP_MAIN_WINDOW_BASE, property);
702     }
703 
TEST_F(JsAppImplTest,InitJsAppTest)704     TEST_F(JsAppImplTest, InitJsAppTest)
705     {
706         JsAppImpl::GetInstance().isStop = false;
707         std::thread thread1([]() {
708             CommandParser::GetInstance().argsMap.clear();
709             CommandParser::GetInstance().argsMap["-j"] = { "" };
710             CommandParser::GetInstance().argsMap["-s"] = { "" };
711             CommandParser::GetInstance().argsMap["-url"] = { "" };
712             CommandParser::GetInstance().argsMap["-lws"] = { "" };
713             CommandParser::GetInstance().argsMap["-cm"] = { "" };
714             CommandParser::GetInstance().argsMap["-av"] = { "" };
715             CommandParser::GetInstance().argsMap["-sd"] = { "" };
716             CommandParser::GetInstance().argsMap["-cc"] = { "" };
717             CommandParser::GetInstance().argsMap["-d"] = { "" };
718             CommandParser::GetInstance().argsMap["-p"] = { "" };
719             JsAppImpl::GetInstance().InitJsApp();
720             CommandParser::GetInstance().argsMap.clear();
721         });
722         thread1.detach();
723         this_thread::sleep_for(chrono::milliseconds(10));
724         JsAppImpl::GetInstance().isStop = true;
725         this_thread::sleep_for(chrono::milliseconds(10));
726         EXPECT_TRUE(JsAppImpl::GetInstance().isFinished);
727     }
728 }