1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <string> 17 #include <vector> 18 #include "gtest/gtest.h" 19 #define private public 20 #define protected public 21 #include "VirtualScreenImpl.h" 22 #include "MockGlobalResult.h" 23 #include "CommandParser.h" 24 #include "VirtualScreen.h" 25 #include "CommandLineInterface.h" 26 27 namespace { 28 class VirtualScreenImplTest : public ::testing::Test { 29 public: VirtualScreenImplTest()30 VirtualScreenImplTest() {} ~VirtualScreenImplTest()31 ~VirtualScreenImplTest() {} 32 protected: InitBuffer()33 static void InitBuffer() 34 { 35 int retHeight = 100; 36 int retWidth = 100; 37 int jpgPix = 4; 38 int pixelSize = 4; 39 uint8_t defaultVal = 200; 40 jpgWidth = retWidth; 41 jpgHeight = retHeight; 42 jpgBuffSize = static_cast<long>(retWidth) * static_cast<long>(retHeight) * static_cast<long>(jpgPix); 43 jpgBuff = new unsigned char[jpgBuffSize]; 44 for (int i = 0; i < jpgBuffSize ; i++) { 45 jpgBuff[i] = defaultVal; 46 } 47 } 48 SetUpTestCase()49 static void SetUpTestCase() 50 { 51 CommandLineInterface::GetInstance().InitPipe("phone"); 52 socket = std::make_unique<LocalSocket>(); 53 } 54 55 static std::unique_ptr<LocalSocket> socket; 56 static unsigned char* jpgBuff; 57 static unsigned long jpgBuffSize; 58 static int32_t jpgWidth; 59 static int32_t jpgHeight; 60 }; 61 62 std::unique_ptr<LocalSocket> VirtualScreenImplTest::socket = nullptr; 63 unsigned char* VirtualScreenImplTest::jpgBuff = nullptr; 64 unsigned long VirtualScreenImplTest::jpgBuffSize = 0; 65 int32_t VirtualScreenImplTest::jpgWidth = 0; 66 int32_t VirtualScreenImplTest::jpgHeight = 0; 67 68 // 测试拷贝构造函数是否被删除 TEST_F(VirtualScreenImplTest,CopyConstructorDeletedTest)69 TEST_F(VirtualScreenImplTest, CopyConstructorDeletedTest) 70 { 71 EXPECT_TRUE(std::is_copy_constructible<VirtualScreenImpl>::value == false); 72 } 73 74 // 测试赋值运算符是否被删除 TEST_F(VirtualScreenImplTest,AssignmentOperatorDeletedTest)75 TEST_F(VirtualScreenImplTest, AssignmentOperatorDeletedTest) 76 { 77 EXPECT_TRUE(std::is_copy_assignable<VirtualScreenImpl>::value == false); 78 } 79 80 // VirtualScreen start TEST_F(VirtualScreenImplTest,SetOrignalWidthTest)81 TEST_F(VirtualScreenImplTest, SetOrignalWidthTest) 82 { 83 int32_t width = 100; 84 VirtualScreenImpl::GetInstance().SetOrignalWidth(width); 85 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetOrignalWidth(), width); 86 } 87 TEST_F(VirtualScreenImplTest,SetCurrentRouterTest)88 TEST_F(VirtualScreenImplTest, SetCurrentRouterTest) 89 { 90 std::string router = "aaa"; 91 VirtualScreenImpl::GetInstance().SetCurrentRouter(router); 92 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetCurrentRouter(), router); 93 } 94 TEST_F(VirtualScreenImplTest,SetAbilityCurrentRouterTest)95 TEST_F(VirtualScreenImplTest, SetAbilityCurrentRouterTest) 96 { 97 std::string router = "aaa"; 98 VirtualScreenImpl::GetInstance().SetAbilityCurrentRouter(router); 99 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetAbilityCurrentRouter(), router); 100 } 101 TEST_F(VirtualScreenImplTest,SetOrignalHeightTest)102 TEST_F(VirtualScreenImplTest, SetOrignalHeightTest) 103 { 104 int32_t width = 100; 105 VirtualScreenImpl::GetInstance().SetOrignalHeight(width); 106 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetOrignalHeight(), width); 107 } 108 TEST_F(VirtualScreenImplTest,SetCompressionWidthTest)109 TEST_F(VirtualScreenImplTest, SetCompressionWidthTest) 110 { 111 int32_t width = 100; 112 VirtualScreenImpl::GetInstance().SetCompressionWidth(width); 113 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetCompressionWidth(), width); 114 } 115 TEST_F(VirtualScreenImplTest,SetCompressionHeightTest)116 TEST_F(VirtualScreenImplTest, SetCompressionHeightTest) 117 { 118 int32_t width = 100; 119 VirtualScreenImpl::GetInstance().SetCompressionHeight(width); 120 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetCompressionHeight(), width); 121 } 122 TEST_F(VirtualScreenImplTest,InitPipeTest)123 TEST_F(VirtualScreenImplTest, InitPipeTest) 124 { 125 std::string port = "8888"; 126 g_run = false; 127 VirtualScreenImpl::GetInstance().InitPipe("aaa", port); 128 EXPECT_EQ(WebSocketServer::GetInstance().serverPort, atoi(port.c_str())); 129 EXPECT_TRUE(g_run); 130 } 131 TEST_F(VirtualScreenImplTest,InitVirtualScreenTest)132 TEST_F(VirtualScreenImplTest, InitVirtualScreenTest) 133 { 134 int width = 1111; 135 int height = 2222; 136 CommandParser::GetInstance().orignalResolutionWidth = width; 137 CommandParser::GetInstance().orignalResolutionHeight = height; 138 CommandParser::GetInstance().compressionResolutionWidth = width; 139 CommandParser::GetInstance().compressionResolutionHeight = height; 140 VirtualScreenImpl::GetInstance().InitVirtualScreen(); 141 EXPECT_EQ(VirtualScreenImpl::GetInstance().orignalResolutionWidth, width); 142 EXPECT_EQ(VirtualScreenImpl::GetInstance().orignalResolutionHeight, height); 143 EXPECT_EQ(VirtualScreenImpl::GetInstance().compressionResolutionWidth, width); 144 EXPECT_EQ(VirtualScreenImpl::GetInstance().compressionResolutionHeight, height); 145 } 146 TEST_F(VirtualScreenImplTest,InitFrameCountTimerTest)147 TEST_F(VirtualScreenImplTest, InitFrameCountTimerTest) 148 { 149 VirtualScreenImpl::GetInstance().inputMethodCountPerMinute = 0; 150 VirtualScreenImpl::GetInstance().InitFrameCountTimer(); 151 EXPECT_FALSE(VirtualScreenImpl::GetInstance().frameCountTimer == nullptr); 152 153 VirtualScreenImpl::GetInstance().InitFrameCountTimer(); 154 EXPECT_EQ(VirtualScreenImpl::GetInstance().inputMethodCountPerMinute, 0); 155 } 156 TEST_F(VirtualScreenImplTest,PrintFrameCountTest)157 TEST_F(VirtualScreenImplTest, PrintFrameCountTest) 158 { 159 VirtualScreenImpl::GetInstance().inputMethodCountPerMinute = 0; 160 VirtualScreenImpl::GetInstance().PrintFrameCount(); 161 EXPECT_EQ(VirtualScreenImpl::GetInstance().inputMethodCountPerMinute, 0); 162 163 VirtualScreenImpl::GetInstance().inputMethodCountPerMinute = 1; 164 VirtualScreenImpl::GetInstance().PrintFrameCount(); 165 EXPECT_EQ(VirtualScreenImpl::GetInstance().inputMethodCountPerMinute, 0); 166 } 167 TEST_F(VirtualScreenImplTest,WidthAndHeightReverseTest)168 TEST_F(VirtualScreenImplTest, WidthAndHeightReverseTest) 169 { 170 int32_t width = 1080; 171 int32_t height = 2340; 172 VirtualScreenImpl::GetInstance().orignalResolutionHeight = height; 173 VirtualScreenImpl::GetInstance().orignalResolutionWidth = width; 174 VirtualScreenImpl::GetInstance().compressionResolutionHeight = height; 175 VirtualScreenImpl::GetInstance().compressionResolutionWidth = width; 176 VirtualScreenImpl::GetInstance().WidthAndHeightReverse(); 177 EXPECT_EQ(VirtualScreenImpl::GetInstance().orignalResolutionHeight, width); 178 EXPECT_EQ(VirtualScreenImpl::GetInstance().orignalResolutionWidth, height); 179 EXPECT_EQ(VirtualScreenImpl::GetInstance().compressionResolutionHeight, width); 180 EXPECT_EQ(VirtualScreenImpl::GetInstance().compressionResolutionWidth, height); 181 } 182 TEST_F(VirtualScreenImplTest,SetVirtualScreenWidthAndHeightTest)183 TEST_F(VirtualScreenImplTest, SetVirtualScreenWidthAndHeightTest) 184 { 185 int32_t width = 1080; 186 int32_t height = 2340; 187 VirtualScreenImpl::GetInstance().orignalResolutionHeight = height; 188 VirtualScreenImpl::GetInstance().orignalResolutionWidth = width; 189 VirtualScreenImpl::GetInstance().compressionResolutionHeight = height; 190 VirtualScreenImpl::GetInstance().compressionResolutionWidth = width; 191 int32_t newWidth = 2000; 192 int32_t newHeight = 3000; 193 VirtualScreenImpl::GetInstance().SetVirtualScreenWidthAndHeight(newWidth, newHeight, newWidth, newHeight); 194 EXPECT_EQ(VirtualScreenImpl::GetInstance().orignalResolutionHeight, newHeight); 195 EXPECT_EQ(VirtualScreenImpl::GetInstance().orignalResolutionWidth, newWidth); 196 EXPECT_EQ(VirtualScreenImpl::GetInstance().compressionResolutionHeight, newHeight); 197 EXPECT_EQ(VirtualScreenImpl::GetInstance().compressionResolutionWidth, newWidth); 198 } 199 TEST_F(VirtualScreenImplTest,GetJpgQualityValueTest)200 TEST_F(VirtualScreenImplTest, GetJpgQualityValueTest) 201 { 202 // <= 100000 203 int32_t width = 200; 204 int32_t height = 300; 205 int ret = VirtualScreenImpl::GetInstance().GetJpgQualityValue(width, height); 206 EXPECT_EQ(ret, 100); // 100 is jpeg quality 207 // <= 300000 && > 100000 208 width = 400; 209 height = 500; 210 ret = VirtualScreenImpl::GetInstance().GetJpgQualityValue(width, height); 211 EXPECT_EQ(ret, 90); // 90 is jpeg quality 212 width = 500; 213 height = 600; 214 ret = VirtualScreenImpl::GetInstance().GetJpgQualityValue(width, height); 215 EXPECT_EQ(ret, 90); // 90 is jpeg quality 216 // <= 500000 && > 300000 217 width = 600; 218 height = 700; 219 ret = VirtualScreenImpl::GetInstance().GetJpgQualityValue(width, height); 220 EXPECT_EQ(ret, 85); // 85 is jpeg quality 221 width = 500; 222 height = 1000; 223 ret = VirtualScreenImpl::GetInstance().GetJpgQualityValue(width, height); 224 EXPECT_EQ(ret, 85); // 85 is jpeg quality 225 // > 500000 226 width = 700; 227 height = 800; 228 ret = VirtualScreenImpl::GetInstance().GetJpgQualityValue(width, height); 229 EXPECT_EQ(ret, 75); // 75 is jpeg quality 230 } 231 TEST_F(VirtualScreenImplTest,SetLoadDocFlagTest)232 TEST_F(VirtualScreenImplTest, SetLoadDocFlagTest) 233 { 234 VirtualScreenImpl::GetInstance().startLoadDoc = VirtualScreen::LoadDocType::INIT; 235 VirtualScreenImpl::GetInstance().SetLoadDocFlag(VirtualScreen::LoadDocType::FINISHED); 236 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetLoadDocFlag(), VirtualScreen::LoadDocType::FINISHED); 237 } 238 TEST_F(VirtualScreenImplTest,GetFastPreviewMsgTest)239 TEST_F(VirtualScreenImplTest, GetFastPreviewMsgTest) 240 { 241 VirtualScreenImpl::GetInstance().fastPreviewMsg = ""; 242 VirtualScreenImpl::GetInstance().SetFastPreviewMsg("FastPreviewMsg"); 243 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetFastPreviewMsg(), "FastPreviewMsg"); 244 } 245 TEST_F(VirtualScreenImplTest,JudgeAndDropFrameTest)246 TEST_F(VirtualScreenImplTest, JudgeAndDropFrameTest) 247 { 248 int frequency = 0; // 0 ms 249 VirtualScreenImpl::GetInstance().SetDropFrameFrequency(frequency); 250 EXPECT_EQ(VirtualScreenImpl::GetInstance().dropFrameFrequency, frequency); 251 EXPECT_FALSE(VirtualScreenImpl::GetInstance().JudgeAndDropFrame()); 252 253 auto time1 = std::chrono::system_clock::now(); 254 frequency = 1; // 1 ms 255 VirtualScreenImpl::GetInstance().SetDropFrameFrequency(frequency); 256 while (VirtualScreenImpl::GetInstance().JudgeAndDropFrame()) { 257 EXPECT_TRUE(VirtualScreenImpl::GetInstance().startDropFrameTime > time1); 258 } 259 } 260 TEST_F(VirtualScreenImplTest,JudgeStaticImageTest)261 TEST_F(VirtualScreenImplTest, JudgeStaticImageTest) 262 { 263 CommandParser::GetInstance().screenMode = CommandParser::ScreenMode::DYNAMIC; 264 EXPECT_TRUE(VirtualScreenImpl::GetInstance().JudgeStaticImage(1)); 265 266 CommandParser::GetInstance().screenMode = CommandParser::ScreenMode::STATIC; 267 VirtualScreen::isOutOfSeconds = true; 268 EXPECT_FALSE(VirtualScreenImpl::GetInstance().JudgeStaticImage(1)); 269 270 VirtualScreen::isOutOfSeconds = false; 271 VirtualScreen::isStartCount = true; 272 EXPECT_TRUE(VirtualScreenImpl::GetInstance().JudgeStaticImage(0)); 273 } 274 TEST_F(VirtualScreenImplTest,StopSendStaticCardImageTest)275 TEST_F(VirtualScreenImplTest, StopSendStaticCardImageTest) 276 { 277 CommandParser::GetInstance().staticCard = false; 278 EXPECT_FALSE(VirtualScreenImpl::GetInstance().StopSendStaticCardImage(0)); 279 280 CommandParser::GetInstance().staticCard = true; 281 EXPECT_TRUE(VirtualScreenImpl::GetInstance().StopSendStaticCardImage(-1)); 282 } 283 TEST_F(VirtualScreenImplTest,RgbToJpgTest)284 TEST_F(VirtualScreenImplTest, RgbToJpgTest) 285 { 286 InitBuffer(); 287 VirtualScreenImpl::GetInstance().jpgBufferSize = 0; 288 VirtualScreenImpl::GetInstance().RgbToJpg(jpgBuff, 3, 3); 289 EXPECT_TRUE(VirtualScreenImpl::GetInstance().jpgBufferSize > 0); 290 delete[] jpgBuff; 291 jpgBuff = nullptr; 292 if (VirtualScreenImpl::GetInstance().jpgScreenBuffer) { 293 free(VirtualScreenImpl::GetInstance().jpgScreenBuffer); 294 VirtualScreenImpl::GetInstance().jpgScreenBuffer = NULL; 295 VirtualScreenImpl::GetInstance().jpgBufferSize = 0; 296 } 297 } 298 TEST_F(VirtualScreenImplTest,SetFoldableTest)299 TEST_F(VirtualScreenImplTest, SetFoldableTest) 300 { 301 VirtualScreenImpl::GetInstance().SetFoldable(true); 302 EXPECT_TRUE(VirtualScreenImpl::GetInstance().GetFoldable()); 303 304 VirtualScreenImpl::GetInstance().SetFoldable(false); 305 EXPECT_FALSE(VirtualScreenImpl::GetInstance().GetFoldable()); 306 } 307 TEST_F(VirtualScreenImplTest,SetFoldStatusTest)308 TEST_F(VirtualScreenImplTest, SetFoldStatusTest) 309 { 310 VirtualScreenImpl::GetInstance().SetFoldStatus("fold"); 311 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetFoldStatus(), "fold"); 312 313 VirtualScreenImpl::GetInstance().SetFoldStatus("unfold"); 314 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetFoldStatus(), "unfold"); 315 } 316 TEST_F(VirtualScreenImplTest,SetFoldResolutionTest)317 TEST_F(VirtualScreenImplTest, SetFoldResolutionTest) 318 { 319 int32_t foldWidth = 300; 320 int32_t foldHeight = 400; 321 VirtualScreenImpl::GetInstance().SetFoldResolution(foldWidth, foldHeight); 322 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetFoldWidth(), foldWidth); 323 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetFoldHeight(), foldHeight); 324 } 325 TEST_F(VirtualScreenImplTest,SetCurrentResolutionTest)326 TEST_F(VirtualScreenImplTest, SetCurrentResolutionTest) 327 { 328 int32_t foldWidth = 300; 329 int32_t foldHeight = 400; 330 VirtualScreenImpl::GetInstance().SetCurrentResolution(foldWidth, foldHeight); 331 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetCurrentWidth(), foldWidth); 332 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetCurrentHeight(), foldHeight); 333 } 334 // VirtualScreen end 335 TEST_F(VirtualScreenImplTest,InitFlushEmptyTimeTest)336 TEST_F(VirtualScreenImplTest, InitFlushEmptyTimeTest) 337 { 338 VirtualScreenImpl::GetInstance().loadDocTimeStamp = 0; 339 VirtualScreenImpl::GetInstance().InitFlushEmptyTime(); 340 EXPECT_TRUE(VirtualScreenImpl::GetInstance().loadDocTimeStamp > 0); 341 } 342 TEST_F(VirtualScreenImplTest,SendBufferOnTimerTest)343 TEST_F(VirtualScreenImplTest, SendBufferOnTimerTest) 344 { 345 g_writeData = false; 346 VirtualScreenImpl::GetInstance().loadDocTempBuffer = nullptr; 347 VirtualScreenImpl::GetInstance().SendBufferOnTimer(); 348 349 InitBuffer(); // jpgBuffer在loadDocTempBuffer释放时释放 350 VirtualScreenImpl::GetInstance().lengthTemp = jpgBuffSize; 351 VirtualScreenImpl::GetInstance().loadDocTempBuffer = jpgBuff; 352 VirtualScreenImpl::GetInstance().widthTemp = jpgWidth; 353 VirtualScreenImpl::GetInstance().heightTemp = jpgHeight; 354 VirtualScreenImpl::GetInstance().loadDocCopyBuffer = new unsigned char[0]; 355 VirtualScreenImpl::GetInstance().SendBufferOnTimer(); 356 EXPECT_TRUE(g_writeData); 357 } 358 TEST_F(VirtualScreenImplTest,CallbackTest)359 TEST_F(VirtualScreenImplTest, CallbackTest) 360 { 361 CommandParser::GetInstance().staticCard = false; 362 VirtualScreenImpl::GetInstance().loadDocTimeStamp = 0; 363 CommandParser::GetInstance().screenMode = CommandParser::ScreenMode::DYNAMIC; 364 VirtualScreenImpl::GetInstance().SetLoadDocFlag(VirtualScreen::LoadDocType::INIT); 365 g_writeData = false; 366 InitBuffer(); 367 int tm = 100; 368 VirtualScreenImpl::Callback(jpgBuff, jpgBuffSize, jpgWidth, jpgHeight, tm); 369 EXPECT_TRUE(g_writeData); 370 delete[] jpgBuff; 371 jpgBuff = nullptr; 372 } 373 TEST_F(VirtualScreenImplTest,FlushEmptyCallbackTest)374 TEST_F(VirtualScreenImplTest, FlushEmptyCallbackTest) 375 { 376 int tm = 100; 377 VirtualScreenImpl::GetInstance().loadDocTimeStamp = tm; 378 tm = 10; 379 VirtualScreenImpl::GetInstance().FlushEmptyCallback(tm); 380 EXPECT_NE(VirtualScreenImpl::GetInstance().flushEmptyTimeStamp, tm); 381 tm = 200; 382 VirtualScreenImpl::GetInstance().FlushEmptyCallback(tm); 383 EXPECT_EQ(VirtualScreenImpl::GetInstance().flushEmptyTimeStamp, tm); 384 } 385 TEST_F(VirtualScreenImplTest,InitAllTest)386 TEST_F(VirtualScreenImplTest, InitAllTest) 387 { 388 std::string port = "8888"; 389 VirtualScreenImpl::GetInstance().InitAll("aaa", port); 390 EXPECT_EQ(WebSocketServer::GetInstance().serverPort, atoi(port.c_str())); 391 } 392 TEST_F(VirtualScreenImplTest,GetScreenInfoTest)393 TEST_F(VirtualScreenImplTest, GetScreenInfoTest) 394 { 395 int width = 1000; 396 VirtualScreenImpl::GetInstance().SetOrignalWidth(width); 397 ScreenInfo info = VirtualScreenImpl::GetInstance().GetScreenInfo(); 398 EXPECT_EQ(info.orignalResolutionWidth, width); 399 } 400 TEST_F(VirtualScreenImplTest,InitFoldParamsTest)401 TEST_F(VirtualScreenImplTest, InitFoldParamsTest) 402 { 403 int width = 1080; 404 int height = 2504; 405 std::string foldable = "true"; 406 std::string foldStatus = "half_fold"; 407 CommandParser& parser = CommandParser::GetInstance(); 408 CommandParser::GetInstance().argsMap.clear(); 409 CommandParser::GetInstance().argsMap["-foldable"] = { foldable }; 410 CommandParser::GetInstance().argsMap["-foldStatus"] = { foldStatus }; 411 CommandParser::GetInstance().argsMap["-fr"] = { std::to_string(width), std::to_string(height) }; 412 CommandParser::GetInstance().foldable = (foldable == "true"); 413 CommandParser::GetInstance().foldStatus = foldStatus; 414 CommandParser::GetInstance().foldResolutionWidth = width; 415 CommandParser::GetInstance().foldResolutionHeight = height; 416 VirtualScreenImpl::GetInstance().InitFoldParams(); 417 EXPECT_TRUE(VirtualScreenImpl::GetInstance().GetFoldable()); 418 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetFoldStatus(), "half_fold"); 419 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetFoldWidth(), width); 420 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetFoldHeight(), height); 421 } 422 TEST_F(VirtualScreenImplTest,SendPixmapTest_Err)423 TEST_F(VirtualScreenImplTest, SendPixmapTest_Err) 424 { 425 int height = 100; 426 int width = 100; 427 int pixSize = 4; 428 int length = height * width * pixSize; 429 VirtualScreenImpl::GetInstance().bufferSize = length + VirtualScreenImpl::GetInstance().headSize; 430 VirtualScreenImpl::GetInstance().wholeBuffer = 431 new uint8_t[LWS_PRE + VirtualScreenImpl::GetInstance().bufferSize]; 432 VirtualScreenImpl::GetInstance().screenBuffer = VirtualScreenImpl::GetInstance().wholeBuffer + LWS_PRE; 433 // data is nullptr 434 bool ret = VirtualScreenImpl::GetInstance().SendPixmap(nullptr, length, width, height); 435 EXPECT_FALSE(ret); 436 // isWebSocketConfiged is false 437 VirtualScreenImpl::GetInstance().isWebSocketConfiged = false; 438 InitBuffer(); 439 ret = VirtualScreenImpl::GetInstance().SendPixmap(jpgBuff, length, width, height); 440 EXPECT_FALSE(ret); 441 VirtualScreenImpl::GetInstance().isWebSocketConfiged = true; 442 // IsRegionRefresh function retrun true 443 bool temp = CommandParser::GetInstance().isRegionRefresh; 444 CommandParser::GetInstance().isRegionRefresh = true; 445 ret = VirtualScreenImpl::GetInstance().SendPixmap(jpgBuff, length, width, height); 446 CommandParser::GetInstance().isRegionRefresh = temp; 447 EXPECT_FALSE(ret); 448 delete[] jpgBuff; 449 jpgBuff = nullptr; 450 } 451 TEST_F(VirtualScreenImplTest,PageCallbackTest)452 TEST_F(VirtualScreenImplTest, PageCallbackTest) 453 { 454 EXPECT_TRUE(VirtualScreenImpl::GetInstance().PageCallback("pages/Index")); 455 } 456 TEST_F(VirtualScreenImplTest,LoadContentCallbackTest)457 TEST_F(VirtualScreenImplTest, LoadContentCallbackTest) 458 { 459 EXPECT_TRUE(VirtualScreenImpl::GetInstance().LoadContentCallback("pages/Index")); 460 } 461 TEST_F(VirtualScreenImplTest,FastPreviewCallbackTest)462 TEST_F(VirtualScreenImplTest, FastPreviewCallbackTest) 463 { 464 g_output = false; 465 std::string jsonStr = R"({"FastPreview" : "true"})";; 466 VirtualScreenImpl::GetInstance().FastPreviewCallback(jsonStr); 467 EXPECT_TRUE(g_output); 468 } 469 TEST_F(VirtualScreenImplTest,SendTest_Err)470 TEST_F(VirtualScreenImplTest, SendTest_Err) 471 { 472 int width = 100; 473 int pixSize = 4; 474 int height = 100; 475 int length = height * width * pixSize; 476 VirtualScreenImpl::GetInstance().bufferSize = length + VirtualScreenImpl::GetInstance().headSize; 477 VirtualScreenImpl::GetInstance().wholeBuffer = 478 new uint8_t[LWS_PRE + VirtualScreenImpl::GetInstance().bufferSize]; 479 VirtualScreenImpl::GetInstance().screenBuffer = VirtualScreenImpl::GetInstance().wholeBuffer + LWS_PRE; 480 // static mode 481 CommandParser::ScreenMode tempMode = CommandParser::GetInstance().screenMode; 482 CommandParser::GetInstance().screenMode = CommandParser::ScreenMode::STATIC; 483 bool isOutOfSecondsTemp = VirtualScreen::isOutOfSeconds; 484 VirtualScreen::isOutOfSeconds = true; 485 InitBuffer(); 486 VirtualScreenImpl::GetInstance().Send(jpgBuff, width, height); 487 VirtualScreen::isOutOfSeconds = false; 488 CommandParser::GetInstance().screenMode = tempMode; 489 EXPECT_NE(VirtualScreenImpl::GetInstance().screenBuffer, nullptr); 490 // height < 1 491 height = 0; 492 VirtualScreenImpl::GetInstance().Send(jpgBuff, width, height); 493 EXPECT_NE(VirtualScreenImpl::GetInstance().screenBuffer, nullptr); 494 height = 100; 495 // width < 1 496 width = 0; 497 VirtualScreenImpl::GetInstance().Send(jpgBuff, width, height); 498 EXPECT_NE(VirtualScreenImpl::GetInstance().screenBuffer, nullptr); 499 width = 100; 500 // jpgBufferSize > bufferSize - headSize 501 VirtualScreenImpl::GetInstance().bufferSize = VirtualScreenImpl::GetInstance().headSize; 502 VirtualScreenImpl::GetInstance().Send(jpgBuff, width, height); 503 EXPECT_NE(VirtualScreenImpl::GetInstance().screenBuffer, nullptr); 504 delete[] jpgBuff; 505 jpgBuff = nullptr; 506 } 507 TEST_F(VirtualScreenImplTest,InitResolutionTest_Err)508 TEST_F(VirtualScreenImplTest, InitResolutionTest_Err) 509 { 510 int width = 200; 511 int height = 100; 512 CommandParser::GetInstance().orignalResolutionWidth = width; 513 CommandParser::GetInstance().orignalResolutionHeight = height; 514 CommandParser::GetInstance().compressionResolutionWidth = width; 515 CommandParser::GetInstance().compressionResolutionHeight = height; 516 VirtualScreenImpl::GetInstance().InitResolution(); 517 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetOrignalWidth(), width); 518 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetOrignalHeight(), height); 519 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetCompressionWidth(), width); 520 EXPECT_EQ(VirtualScreenImpl::GetInstance().GetCompressionHeight(), height); 521 } 522 TEST_F(VirtualScreenImplTest,LoadDocCallbackTest)523 TEST_F(VirtualScreenImplTest, LoadDocCallbackTest) 524 { 525 InitBuffer(); 526 int tm = 100; 527 // timeStamp < loadDocTimeStamp 528 VirtualScreenImpl::GetInstance().loadDocTimeStamp = 200; 529 bool ret = VirtualScreenImpl::LoadDocCallback(jpgBuff, jpgBuffSize, jpgWidth, jpgHeight, tm); 530 VirtualScreenImpl::GetInstance().loadDocTimeStamp = 0; 531 EXPECT_FALSE(ret); 532 // GetLoadDocFlag is VirtualScreen::LoadDocType::FINISHED && length = 0 533 VirtualScreen::LoadDocType temp = VirtualScreenImpl::GetInstance().startLoadDoc; 534 VirtualScreenImpl::GetInstance().startLoadDoc = VirtualScreen::LoadDocType::FINISHED; 535 VirtualScreenImpl::GetInstance().loadDocTempBuffer = new uint8_t[1]; 536 ret = VirtualScreenImpl::LoadDocCallback(jpgBuff, 0, jpgWidth, jpgHeight, tm); 537 EXPECT_FALSE(ret); 538 VirtualScreenImpl::GetInstance().startLoadDoc = temp; 539 delete[] jpgBuff; 540 jpgBuff = nullptr; 541 } 542 TEST_F(VirtualScreenImplTest,StartTimerTest)543 TEST_F(VirtualScreenImplTest, StartTimerTest) 544 { 545 g_writeData = false; 546 VirtualScreenImpl::GetInstance().isFlushEmpty = false; 547 VirtualScreenImpl::GetInstance().StartTimer(); 548 EXPECT_FALSE(g_writeData); 549 VirtualScreenImpl::GetInstance().isFlushEmpty = true; 550 VirtualScreenImpl::GetInstance().StartTimer(); 551 EXPECT_FALSE(g_writeData); 552 } 553 TEST_F(VirtualScreenImplTest,NoFlushEmptyFuncTest)554 TEST_F(VirtualScreenImplTest, NoFlushEmptyFuncTest) 555 { 556 VirtualScreenImpl::GetInstance().onRenderTime = std::chrono::system_clock::now(); 557 bool ret = VirtualScreenImpl::GetInstance().NoFlushEmptyFunc(300); 558 EXPECT_TRUE(ret); 559 VirtualScreenImpl::GetInstance().onRenderTime = std::chrono::system_clock::time_point::min(); 560 ret = VirtualScreenImpl::GetInstance().NoFlushEmptyFunc(10000); 561 EXPECT_TRUE(ret); 562 ret = VirtualScreenImpl::GetInstance().NoFlushEmptyFunc(1); 563 EXPECT_FALSE(ret); 564 } 565 TEST_F(VirtualScreenImplTest,FlushEmptyFuncTest)566 TEST_F(VirtualScreenImplTest, FlushEmptyFuncTest) 567 { 568 std::time_t timestamp = 1719273600; // 这个时间戳代表2024年7月25日00:00:00 UTC 569 std::time_t gap = 100; 570 int64_t timePassed = 9000; 571 int64_t time = 8000; 572 VirtualScreenImpl::GetInstance().onRenderTime = std::chrono::system_clock::from_time_t(timestamp); 573 VirtualScreenImpl::GetInstance().flushEmptyTime = std::chrono::system_clock::from_time_t(timestamp - gap); 574 VirtualScreenImpl::GetInstance().flushEmptyTimeStamp = 200; 575 VirtualScreenImpl::GetInstance().timeStampTemp = 100; 576 bool ret = VirtualScreenImpl::GetInstance().FlushEmptyFunc(std::chrono::system_clock::from_time_t( 577 timestamp + gap), timePassed); 578 EXPECT_TRUE(ret); 579 580 VirtualScreenImpl::GetInstance().timeStampTemp = 300; 581 ret = VirtualScreenImpl::GetInstance().FlushEmptyFunc(std::chrono::system_clock::from_time_t( 582 timestamp + gap), time); 583 EXPECT_FALSE(ret); 584 585 VirtualScreenImpl::GetInstance().timeStampTemp = 100; 586 VirtualScreenImpl::GetInstance().flushEmptyTime = std::chrono::system_clock::from_time_t( 587 timestamp + gap); 588 ret = VirtualScreenImpl::GetInstance().FlushEmptyFunc(std::chrono::system_clock::from_time_t( 589 timestamp + gap + gap + gap), timePassed); 590 EXPECT_TRUE(ret); 591 592 VirtualScreenImpl::GetInstance().timeStampTemp = 300; 593 ret = VirtualScreenImpl::GetInstance().FlushEmptyFunc(std::chrono::system_clock::from_time_t( 594 timestamp + gap), timePassed); 595 EXPECT_TRUE(ret); 596 597 ret = VirtualScreenImpl::GetInstance().FlushEmptyFunc(std::chrono::system_clock::from_time_t( 598 timestamp + gap), time); 599 EXPECT_FALSE(ret); 600 } 601 }