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 }