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}