• 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 
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 }