17c804472Sopenharmony_ci/* 27c804472Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47c804472Sopenharmony_ci * you may not use this file except in compliance with the License. 57c804472Sopenharmony_ci * You may obtain a copy of the License at 67c804472Sopenharmony_ci * 77c804472Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87c804472Sopenharmony_ci * 97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c804472Sopenharmony_ci * See the License for the specific language governing permissions and 137c804472Sopenharmony_ci * limitations under the License. 147c804472Sopenharmony_ci */ 157c804472Sopenharmony_ci 167c804472Sopenharmony_ci#include "gtest/gtest.h" 177c804472Sopenharmony_ci#define private public 187c804472Sopenharmony_ci#define protected public 197c804472Sopenharmony_ci#include "VirtualScreenImpl.h" 207c804472Sopenharmony_ci#include "CommandParser.h" 217c804472Sopenharmony_ci 227c804472Sopenharmony_cinamespace { 237c804472Sopenharmony_ci class VirtualScreenImplTest : public ::testing::Test { 247c804472Sopenharmony_ci public: 257c804472Sopenharmony_ci VirtualScreenImplTest() {} 267c804472Sopenharmony_ci ~VirtualScreenImplTest() {} 277c804472Sopenharmony_ci protected: 287c804472Sopenharmony_ci static void InitBuffer() 297c804472Sopenharmony_ci { 307c804472Sopenharmony_ci int retWidth = 100; 317c804472Sopenharmony_ci int retHeight = 100; 327c804472Sopenharmony_ci int jpgPix = 4; 337c804472Sopenharmony_ci int pixelSize = 4; 347c804472Sopenharmony_ci uint8_t defaultValue = 200; 357c804472Sopenharmony_ci jpgHeight = retHeight; 367c804472Sopenharmony_ci jpgWidth = retWidth; 377c804472Sopenharmony_ci jpgBufferSize = static_cast<long>(retWidth) * static_cast<long>(retHeight) * static_cast<long>(jpgPix); 387c804472Sopenharmony_ci jpgBuffer = new unsigned char[jpgBufferSize]; 397c804472Sopenharmony_ci for (int i = 0; i < jpgBufferSize; i++) { 407c804472Sopenharmony_ci jpgBuffer[i] = defaultValue; 417c804472Sopenharmony_ci } 427c804472Sopenharmony_ci } 437c804472Sopenharmony_ci 447c804472Sopenharmony_ci static void SetUpTestCase() 457c804472Sopenharmony_ci { 467c804472Sopenharmony_ci InitBuffer(); 477c804472Sopenharmony_ci socket = std::make_unique<LocalSocket>(); 487c804472Sopenharmony_ci } 497c804472Sopenharmony_ci 507c804472Sopenharmony_ci static std::unique_ptr<LocalSocket> socket; 517c804472Sopenharmony_ci static unsigned long jpgBufferSize; 527c804472Sopenharmony_ci static unsigned char* jpgBuffer; 537c804472Sopenharmony_ci static int32_t jpgWidth; 547c804472Sopenharmony_ci static int32_t jpgHeight; 557c804472Sopenharmony_ci }; 567c804472Sopenharmony_ci 577c804472Sopenharmony_ci std::unique_ptr<LocalSocket> VirtualScreenImplTest::socket = nullptr; 587c804472Sopenharmony_ci unsigned char* VirtualScreenImplTest::jpgBuffer = nullptr; 597c804472Sopenharmony_ci unsigned long VirtualScreenImplTest::jpgBufferSize = 0; 607c804472Sopenharmony_ci int32_t VirtualScreenImplTest::jpgWidth = 0; 617c804472Sopenharmony_ci int32_t VirtualScreenImplTest::jpgHeight = 0; 627c804472Sopenharmony_ci 637c804472Sopenharmony_ci TEST_F(VirtualScreenImplTest, IsRectValidTest) 647c804472Sopenharmony_ci { 657c804472Sopenharmony_ci int32_t width = 100; 667c804472Sopenharmony_ci int32_t height = 200; 677c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetOrignalWidth(width); 687c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetOrignalHeight(height); 697c804472Sopenharmony_ci int32_t x = -1; 707c804472Sopenharmony_ci int32_t y = 100; 717c804472Sopenharmony_ci EXPECT_FALSE(VirtualScreenImpl::GetInstance().IsRectValid(x, y, width, height)); 727c804472Sopenharmony_ci 737c804472Sopenharmony_ci x = 50; 747c804472Sopenharmony_ci y = -1; 757c804472Sopenharmony_ci EXPECT_FALSE(VirtualScreenImpl::GetInstance().IsRectValid(x, y, width, height)); 767c804472Sopenharmony_ci 777c804472Sopenharmony_ci x = 50; 787c804472Sopenharmony_ci y = 100; 797c804472Sopenharmony_ci width = 100; 807c804472Sopenharmony_ci height = 100; 817c804472Sopenharmony_ci EXPECT_FALSE(VirtualScreenImpl::GetInstance().IsRectValid(x, y, width, height)); 827c804472Sopenharmony_ci 837c804472Sopenharmony_ci width = 50; 847c804472Sopenharmony_ci height = 200; 857c804472Sopenharmony_ci EXPECT_FALSE(VirtualScreenImpl::GetInstance().IsRectValid(x, y, width, height)); 867c804472Sopenharmony_ci 877c804472Sopenharmony_ci width = 50; 887c804472Sopenharmony_ci height = 100; 897c804472Sopenharmony_ci EXPECT_TRUE(VirtualScreenImpl::GetInstance().IsRectValid(x, y, width, height)); 907c804472Sopenharmony_ci } 917c804472Sopenharmony_ci 927c804472Sopenharmony_ci TEST_F(VirtualScreenImplTest, GetScreenWidthTest) 937c804472Sopenharmony_ci { 947c804472Sopenharmony_ci int32_t width = 100; 957c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetOrignalWidth(width); 967c804472Sopenharmony_ci EXPECT_EQ(VirtualScreenImpl::GetInstance().GetScreenWidth(), 977c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().GetOrignalWidth()); 987c804472Sopenharmony_ci } 997c804472Sopenharmony_ci 1007c804472Sopenharmony_ci TEST_F(VirtualScreenImplTest, GetScreenHeightTest) 1017c804472Sopenharmony_ci { 1027c804472Sopenharmony_ci int32_t height = 200; 1037c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetOrignalHeight(height); 1047c804472Sopenharmony_ci EXPECT_EQ(VirtualScreenImpl::GetInstance().GetScreenHeight(), 1057c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().GetOrignalHeight()); 1067c804472Sopenharmony_ci } 1077c804472Sopenharmony_ci 1087c804472Sopenharmony_ci TEST_F(VirtualScreenImplTest, InitAllTest) 1097c804472Sopenharmony_ci { 1107c804472Sopenharmony_ci CommandParser::GetInstance().deviceType = "liteWearable"; 1117c804472Sopenharmony_ci int32_t height = -1; 1127c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetOrignalWidth(jpgWidth); 1137c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetOrignalHeight(height); 1147c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().InitAll("aaa", "8888"); 1157c804472Sopenharmony_ci EXPECT_TRUE(VirtualScreenImpl::GetInstance().wholeBuffer == nullptr); 1167c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetOrignalHeight(jpgHeight); 1177c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().InitAll("aaa", "8888"); 1187c804472Sopenharmony_ci EXPECT_TRUE(VirtualScreenImpl::GetInstance().wholeBuffer != nullptr); 1197c804472Sopenharmony_ci EXPECT_TRUE(VirtualScreenImpl::GetInstance().currentPos > 0); 1207c804472Sopenharmony_ci } 1217c804472Sopenharmony_ci 1227c804472Sopenharmony_ci TEST_F(VirtualScreenImplTest, GetFBBufferInfoTest) 1237c804472Sopenharmony_ci { 1247c804472Sopenharmony_ci OHOS::BufferInfo* info = VirtualScreenImpl::GetInstance().GetFBBufferInfo(); 1257c804472Sopenharmony_ci EXPECT_EQ(info->color, 0x44); 1267c804472Sopenharmony_ci } 1277c804472Sopenharmony_ci 1287c804472Sopenharmony_ci TEST_F(VirtualScreenImplTest, UpdateRegionTest) 1297c804472Sopenharmony_ci { 1307c804472Sopenharmony_ci int32_t width = 100; 1317c804472Sopenharmony_ci int32_t height = 200; 1327c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetCompressionWidth(width); 1337c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetCompressionHeight(height); 1347c804472Sopenharmony_ci int32_t x1 = 10; 1357c804472Sopenharmony_ci int32_t y1 = 10; 1367c804472Sopenharmony_ci int32_t x2 = 20; 1377c804472Sopenharmony_ci int32_t y2 = 20; 1387c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().UpdateRegion(x1, y1, x2, y2); 1397c804472Sopenharmony_ci int32_t expectVal = 26; 1407c804472Sopenharmony_ci EXPECT_EQ(VirtualScreenImpl::GetInstance().regionWidth, expectVal); 1417c804472Sopenharmony_ci EXPECT_EQ(VirtualScreenImpl::GetInstance().regionHeight, expectVal); 1427c804472Sopenharmony_ci } 1437c804472Sopenharmony_ci 1447c804472Sopenharmony_ci TEST_F(VirtualScreenImplTest, SendRegionBufferTest) 1457c804472Sopenharmony_ci { 1467c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetCompressionWidth(jpgWidth); 1477c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetCompressionHeight(jpgHeight); 1487c804472Sopenharmony_ci 1497c804472Sopenharmony_ci CommandParser::GetInstance().screenMode = CommandParser::ScreenMode::STATIC; 1507c804472Sopenharmony_ci VirtualScreen::isOutOfSeconds = true; 1517c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SendRegionBuffer(); 1527c804472Sopenharmony_ci EXPECT_TRUE(VirtualScreenImpl::GetInstance().jpgScreenBuffer == nullptr); 1537c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().FreeJpgMemory(); 1547c804472Sopenharmony_ci CommandParser::GetInstance().screenMode = CommandParser::ScreenMode::DYNAMIC; 1557c804472Sopenharmony_ci VirtualScreen::isOutOfSeconds = false; 1567c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SendRegionBuffer(); 1577c804472Sopenharmony_ci EXPECT_TRUE(VirtualScreenImpl::GetInstance().jpgScreenBuffer == nullptr); 1587c804472Sopenharmony_ci } 1597c804472Sopenharmony_ci 1607c804472Sopenharmony_ci TEST_F(VirtualScreenImplTest, FlushTest) 1617c804472Sopenharmony_ci { 1627c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetCompressionWidth(jpgWidth); 1637c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetCompressionHeight(jpgHeight); 1647c804472Sopenharmony_ci OHOS::Rect flushRect; 1657c804472Sopenharmony_ci 1667c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isWebSocketConfiged = false; 1677c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().Flush(flushRect); 1687c804472Sopenharmony_ci EXPECT_TRUE(VirtualScreenImpl::GetInstance().isChanged); 1697c804472Sopenharmony_ci 1707c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isWebSocketConfiged = true; 1717c804472Sopenharmony_ci CommandParser::GetInstance().isRegionRefresh = true; 1727c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isFirstSend = false; 1737c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().Flush(flushRect); 1747c804472Sopenharmony_ci EXPECT_FALSE(VirtualScreenImpl::GetInstance().isChanged); 1757c804472Sopenharmony_ci 1767c804472Sopenharmony_ci CommandParser::GetInstance().isRegionRefresh = false; 1777c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isFirstSend = false; 1787c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().Flush(flushRect); 1797c804472Sopenharmony_ci EXPECT_FALSE(VirtualScreenImpl::GetInstance().isChanged); 1807c804472Sopenharmony_ci } 1817c804472Sopenharmony_ci 1827c804472Sopenharmony_ci TEST_F(VirtualScreenImplTest, CheckBufferSendTest) 1837c804472Sopenharmony_ci { 1847c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetCompressionWidth(jpgWidth); 1857c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().SetCompressionHeight(jpgHeight); 1867c804472Sopenharmony_ci 1877c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isChanged = false; 1887c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().CheckBufferSend(); 1897c804472Sopenharmony_ci EXPECT_FALSE(VirtualScreenImpl::GetInstance().isChanged); 1907c804472Sopenharmony_ci 1917c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isChanged = true; 1927c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isWebSocketConfiged = false; 1937c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().CheckBufferSend(); 1947c804472Sopenharmony_ci EXPECT_TRUE(VirtualScreenImpl::GetInstance().isChanged); 1957c804472Sopenharmony_ci 1967c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isWebSocketConfiged = true; 1977c804472Sopenharmony_ci CommandParser::GetInstance().isRegionRefresh = true; 1987c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isFirstSend = false; 1997c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().CheckBufferSend(); 2007c804472Sopenharmony_ci EXPECT_FALSE(VirtualScreenImpl::GetInstance().isChanged); 2017c804472Sopenharmony_ci 2027c804472Sopenharmony_ci CommandParser::GetInstance().isRegionRefresh = false; 2037c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().isFirstSend = false; 2047c804472Sopenharmony_ci VirtualScreenImpl::GetInstance().CheckBufferSend(); 2057c804472Sopenharmony_ci EXPECT_FALSE(VirtualScreenImpl::GetInstance().isChanged); 2067c804472Sopenharmony_ci } 2077c804472Sopenharmony_ci}