14ed2deddSopenharmony_ci/*
24ed2deddSopenharmony_ci * Copyright (c) 2020-2022 Huawei Device Co., Ltd.
34ed2deddSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44ed2deddSopenharmony_ci * you may not use this file except in compliance with the License.
54ed2deddSopenharmony_ci * You may obtain a copy of the License at
64ed2deddSopenharmony_ci *
74ed2deddSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84ed2deddSopenharmony_ci *
94ed2deddSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104ed2deddSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114ed2deddSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124ed2deddSopenharmony_ci * See the License for the specific language governing permissions and
134ed2deddSopenharmony_ci * limitations under the License.
144ed2deddSopenharmony_ci */
154ed2deddSopenharmony_ci
164ed2deddSopenharmony_ci#include <climits>
174ed2deddSopenharmony_ci#include <gtest/gtest.h>
184ed2deddSopenharmony_ci
194ed2deddSopenharmony_ci#include "buffer_common.h"
204ed2deddSopenharmony_ci#include "surface.h"
214ed2deddSopenharmony_ci#include "surface_impl.h"
224ed2deddSopenharmony_ci
234ed2deddSopenharmony_ciusing namespace std;
244ed2deddSopenharmony_ciusing namespace testing::ext;
254ed2deddSopenharmony_ci
264ed2deddSopenharmony_cinamespace OHOS {
274ed2deddSopenharmony_ciclass SurfaceTest : public testing::Test {
284ed2deddSopenharmony_cipublic:
294ed2deddSopenharmony_ci    static void SetUpTestCase(void);
304ed2deddSopenharmony_ci    static void TearDownTestCase(void);
314ed2deddSopenharmony_ci    void SetUp();
324ed2deddSopenharmony_ci    void TearDown();
334ed2deddSopenharmony_ci};
344ed2deddSopenharmony_ci
354ed2deddSopenharmony_ciclass BufferConsumerTest : public IBufferConsumerListener {
364ed2deddSopenharmony_cipublic:
374ed2deddSopenharmony_ci    void OnBufferAvailable();
384ed2deddSopenharmony_ci    ~BufferConsumerTest() {}
394ed2deddSopenharmony_ci};
404ed2deddSopenharmony_civoid BufferConsumerTest::OnBufferAvailable()
414ed2deddSopenharmony_ci{
424ed2deddSopenharmony_ci}
434ed2deddSopenharmony_ci
444ed2deddSopenharmony_civoid SurfaceTest::SetUpTestCase(void)
454ed2deddSopenharmony_ci{
464ed2deddSopenharmony_ci}
474ed2deddSopenharmony_ci
484ed2deddSopenharmony_civoid SurfaceTest::TearDownTestCase(void)
494ed2deddSopenharmony_ci{
504ed2deddSopenharmony_ci}
514ed2deddSopenharmony_ci
524ed2deddSopenharmony_civoid SurfaceTest::SetUp(void)
534ed2deddSopenharmony_ci{
544ed2deddSopenharmony_ci}
554ed2deddSopenharmony_ci
564ed2deddSopenharmony_civoid SurfaceTest::TearDown(void)
574ed2deddSopenharmony_ci{
584ed2deddSopenharmony_ci}
594ed2deddSopenharmony_ci
604ed2deddSopenharmony_ci/*
614ed2deddSopenharmony_ci * Feature: Surface
624ed2deddSopenharmony_ci * Function: new SurfaceBuffer
634ed2deddSopenharmony_ci * SubFunction: NA
644ed2deddSopenharmony_ci * FunctionPoints: Surface Buffer initialization.
654ed2deddSopenharmony_ci * EnvConditions: NA
664ed2deddSopenharmony_ci * CaseDescription: Verify the Surface Buffer initialization.
674ed2deddSopenharmony_ci */
684ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_buffer_001, TestSize.Level1)
694ed2deddSopenharmony_ci{
704ed2deddSopenharmony_ci    SurfaceBufferImpl* buffer = new SurfaceBufferImpl();
714ed2deddSopenharmony_ci    EXPECT_TRUE(buffer);
724ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetKey());
734ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetPhyAddr());
744ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetSize());
754ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetUsage());
764ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetDeletePending());
774ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetState());
784ed2deddSopenharmony_ci
794ed2deddSopenharmony_ci    int32_t aValue32;
804ed2deddSopenharmony_ci    int32_t ret = buffer->GetInt32(1, aValue32); // key = 1, test has value with key(1). if not, ret < 0.
814ed2deddSopenharmony_ci    EXPECT_LT(ret, 0);
824ed2deddSopenharmony_ci    int64_t aValue64;
834ed2deddSopenharmony_ci    ret = buffer->GetInt64(1, aValue64); // key = 1, test has value with key(1). if not, ret < 0.
844ed2deddSopenharmony_ci    EXPECT_LT(ret, 0);
854ed2deddSopenharmony_ci    delete buffer;
864ed2deddSopenharmony_ci}
874ed2deddSopenharmony_ci
884ed2deddSopenharmony_ci/*
894ed2deddSopenharmony_ci * Feature: Surface
904ed2deddSopenharmony_ci * Function: new SurfaceBuffer(uint32_t size, uint32_t flag, uint32_t usage)
914ed2deddSopenharmony_ci * SubFunction: NA
924ed2deddSopenharmony_ci * FunctionPoints: Surface Buffer initialization.
934ed2deddSopenharmony_ci * EnvConditions: NA
944ed2deddSopenharmony_ci * CaseDescription: Verify the Surface Buffer initialization.
954ed2deddSopenharmony_ci */
964ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_buffer_002, TestSize.Level1)
974ed2deddSopenharmony_ci{
984ed2deddSopenharmony_ci    int32_t usage = BUFFER_CONSUMER_USAGE_HARDWARE; // alloc buffer with usage = BUFFER_CONSUMER_USAGE_HARDWARE
994ed2deddSopenharmony_ci    int32_t size = 1024; // alloc buffer with size = 1024;
1004ed2deddSopenharmony_ci
1014ed2deddSopenharmony_ci    SurfaceBufferImpl* buffer = new SurfaceBufferImpl();
1024ed2deddSopenharmony_ci    buffer->SetUsage(usage);
1034ed2deddSopenharmony_ci    buffer->SetMaxSize(size);
1044ed2deddSopenharmony_ci    EXPECT_TRUE(buffer);
1054ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetKey());
1064ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetPhyAddr());
1074ed2deddSopenharmony_ci    EXPECT_EQ(size, buffer->GetMaxSize());
1084ed2deddSopenharmony_ci    EXPECT_EQ(usage, buffer->GetUsage());
1094ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetDeletePending());
1104ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer->GetState());
1114ed2deddSopenharmony_ci
1124ed2deddSopenharmony_ci    int32_t aValue32;
1134ed2deddSopenharmony_ci    int32_t ret = buffer->GetInt32(1, aValue32); // key = 1, test has value with key(1). if not, ret < 0.
1144ed2deddSopenharmony_ci    EXPECT_LT(ret, 0);
1154ed2deddSopenharmony_ci    int64_t aValue64;
1164ed2deddSopenharmony_ci    ret = buffer->GetInt64(1, aValue64); // key = 1, test has value with key(1). if not, ret < 0?
1174ed2deddSopenharmony_ci    EXPECT_LT(ret, 0);
1184ed2deddSopenharmony_ci    delete buffer;
1194ed2deddSopenharmony_ci}
1204ed2deddSopenharmony_ci
1214ed2deddSopenharmony_ci/*
1224ed2deddSopenharmony_ci * Feature: Surface
1234ed2deddSopenharmony_ci * Function: Surface Buffer set/get key-value
1244ed2deddSopenharmony_ci * SubFunction: NA
1254ed2deddSopenharmony_ci * FunctionPoints: buffer attr and extra attr set/get.
1264ed2deddSopenharmony_ci * EnvConditions: NA
1274ed2deddSopenharmony_ci * CaseDescription: Verify the Surface Buffer attr set/get.
1284ed2deddSopenharmony_ci */
1294ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_buffer_003, TestSize.Level1)
1304ed2deddSopenharmony_ci{
1314ed2deddSopenharmony_ci    SurfaceBufferImpl buffer;
1324ed2deddSopenharmony_ci
1334ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer.GetPhyAddr());
1344ed2deddSopenharmony_ci    uint64_t phyAddr = 0x040a7000; // mock physical address as 0x040a7000
1354ed2deddSopenharmony_ci    buffer.SetPhyAddr(phyAddr);
1364ed2deddSopenharmony_ci    EXPECT_EQ(phyAddr, buffer.GetPhyAddr());
1374ed2deddSopenharmony_ci
1384ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer.GetMaxSize());
1394ed2deddSopenharmony_ci    uint32_t size = 1;
1404ed2deddSopenharmony_ci    buffer.SetMaxSize(size);
1414ed2deddSopenharmony_ci    EXPECT_EQ(size, buffer.GetMaxSize());
1424ed2deddSopenharmony_ci
1434ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer.GetUsage());
1444ed2deddSopenharmony_ci    uint32_t usage = 1;
1454ed2deddSopenharmony_ci    buffer.SetUsage(usage);
1464ed2deddSopenharmony_ci    EXPECT_EQ(usage, buffer.GetUsage());
1474ed2deddSopenharmony_ci
1484ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer.GetDeletePending());
1494ed2deddSopenharmony_ci    uint8_t deletePending = 1;
1504ed2deddSopenharmony_ci    buffer.SetDeletePending(deletePending);
1514ed2deddSopenharmony_ci    EXPECT_EQ(deletePending, buffer.GetDeletePending());
1524ed2deddSopenharmony_ci
1534ed2deddSopenharmony_ci    EXPECT_EQ(0, buffer.GetState());
1544ed2deddSopenharmony_ci    buffer.SetState(BUFFER_STATE_REQUEST);
1554ed2deddSopenharmony_ci    EXPECT_EQ(BUFFER_STATE_REQUEST, buffer.GetState());
1564ed2deddSopenharmony_ci
1574ed2deddSopenharmony_ci    int32_t aValue32;
1584ed2deddSopenharmony_ci    int32_t ret = buffer.GetInt32(1, aValue32); // key = 1, test has value for key(1). if not, ret < 0.
1594ed2deddSopenharmony_ci    EXPECT_LT(ret, 0);
1604ed2deddSopenharmony_ci
1614ed2deddSopenharmony_ci    int32_t key32 = 1; // set key-value , key = 1;
1624ed2deddSopenharmony_ci    int32_t value32 = 100; // set key-value, value = 1;
1634ed2deddSopenharmony_ci    buffer.SetInt32(key32, value32);
1644ed2deddSopenharmony_ci    ret = buffer.GetInt32(key32, aValue32);
1654ed2deddSopenharmony_ci    EXPECT_EQ(ret, 0);
1664ed2deddSopenharmony_ci    EXPECT_EQ(value32, aValue32);
1674ed2deddSopenharmony_ci
1684ed2deddSopenharmony_ci    int64_t aValue64;
1694ed2deddSopenharmony_ci    ret = buffer.GetInt64(1, aValue64); // key = 1, test has value for key(1). if not, ret < 0?
1704ed2deddSopenharmony_ci    EXPECT_LT(ret, 0);
1714ed2deddSopenharmony_ci
1724ed2deddSopenharmony_ci    uint32_t key64 = 2; // set key-value , key = 2;
1734ed2deddSopenharmony_ci    int64_t value64 = 0x040a7003; // set key-value, value = 0x040a7003;
1744ed2deddSopenharmony_ci    buffer.SetInt64(key64, value64);
1754ed2deddSopenharmony_ci    ret = buffer.GetInt64(key64, aValue64);
1764ed2deddSopenharmony_ci    EXPECT_EQ(ret, 0);
1774ed2deddSopenharmony_ci    EXPECT_EQ(value64, aValue64);
1784ed2deddSopenharmony_ci
1794ed2deddSopenharmony_ci    value64 = 0x040a7004; // set key-value, value = 0x040a7004 over cover 0x040a7003;
1804ed2deddSopenharmony_ci    buffer.SetInt64(key64, value64);
1814ed2deddSopenharmony_ci    ret = buffer.GetInt64(key64, aValue64);
1824ed2deddSopenharmony_ci    EXPECT_EQ(ret, 0);
1834ed2deddSopenharmony_ci    EXPECT_EQ(value64, aValue64);
1844ed2deddSopenharmony_ci}
1854ed2deddSopenharmony_ci
1864ed2deddSopenharmony_ci/*
1874ed2deddSopenharmony_ci * Feature: Surface
1884ed2deddSopenharmony_ci * Function: Surface set width and height
1894ed2deddSopenharmony_ci * SubFunction: NA
1904ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get width and height.
1914ed2deddSopenharmony_ci * EnvConditions: NA
1924ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set attr.
1934ed2deddSopenharmony_ci */
1944ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_001, TestSize.Level1)
1954ed2deddSopenharmony_ci{
1964ed2deddSopenharmony_ci    IBufferConsumerListener* consumerListener = new BufferConsumerTest();
1974ed2deddSopenharmony_ci    if (consumerListener == nullptr) {
1984ed2deddSopenharmony_ci        return;
1994ed2deddSopenharmony_ci    }
2004ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
2014ed2deddSopenharmony_ci    if (surface == nullptr) {
2024ed2deddSopenharmony_ci        delete consumerListener;
2034ed2deddSopenharmony_ci        consumerListener = nullptr;
2044ed2deddSopenharmony_ci        return;
2054ed2deddSopenharmony_ci    }
2064ed2deddSopenharmony_ci    surface->RegisterConsumerListener(*consumerListener);
2074ed2deddSopenharmony_ci
2084ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
2094ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0)
2104ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
2114ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
2124ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
2134ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101)
2144ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4
2154ed2deddSopenharmony_ci
2164ed2deddSopenharmony_ci    // set width = 0 failed, return default.
2174ed2deddSopenharmony_ci    surface->SetWidthAndHeight(0, 1080);
2184ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
2194ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
2204ed2deddSopenharmony_ci
2214ed2deddSopenharmony_ci    // set width = 7681 failed, return default.
2224ed2deddSopenharmony_ci    surface->SetWidthAndHeight(7681, 1080);
2234ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
2244ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
2254ed2deddSopenharmony_ci
2264ed2deddSopenharmony_ci    // set width = 7680 succeed, return 7680.
2274ed2deddSopenharmony_ci    surface->SetWidthAndHeight(7680, 1080);
2284ed2deddSopenharmony_ci    EXPECT_EQ(7680, surface->GetWidth());
2294ed2deddSopenharmony_ci    EXPECT_EQ(1080, surface->GetHeight());
2304ed2deddSopenharmony_ci
2314ed2deddSopenharmony_ci    // set width = 1920 succeed, return 1980.
2324ed2deddSopenharmony_ci    surface->SetWidthAndHeight(1920, 1080);
2334ed2deddSopenharmony_ci    EXPECT_EQ(1920, surface->GetWidth());
2344ed2deddSopenharmony_ci    EXPECT_EQ(1080, surface->GetHeight());
2354ed2deddSopenharmony_ci
2364ed2deddSopenharmony_ci    // set height = 0 failed, return default.
2374ed2deddSopenharmony_ci    surface->SetWidthAndHeight(1920, 0);
2384ed2deddSopenharmony_ci    EXPECT_EQ(1920, surface->GetWidth());
2394ed2deddSopenharmony_ci    EXPECT_EQ(1080, surface->GetHeight());
2404ed2deddSopenharmony_ci
2414ed2deddSopenharmony_ci    // set height = 7681 failed, return default.
2424ed2deddSopenharmony_ci    surface->SetWidthAndHeight(1920, 7681);
2434ed2deddSopenharmony_ci    EXPECT_EQ(1920, surface->GetWidth());
2444ed2deddSopenharmony_ci    EXPECT_EQ(1080, surface->GetHeight());
2454ed2deddSopenharmony_ci
2464ed2deddSopenharmony_ci    // set height = 7680 succeed, return 7680.
2474ed2deddSopenharmony_ci    surface->SetWidthAndHeight(1920, 7680);
2484ed2deddSopenharmony_ci    EXPECT_EQ(1920, surface->GetWidth());
2494ed2deddSopenharmony_ci    EXPECT_EQ(7680, surface->GetHeight());
2504ed2deddSopenharmony_ci
2514ed2deddSopenharmony_ci    // set height = 720 succeed, return 720.
2524ed2deddSopenharmony_ci    surface->SetWidthAndHeight(1280, 720);
2534ed2deddSopenharmony_ci    EXPECT_EQ(1280, surface->GetWidth());
2544ed2deddSopenharmony_ci    EXPECT_EQ(720, surface->GetHeight());
2554ed2deddSopenharmony_ci
2564ed2deddSopenharmony_ci    surface->UnregisterConsumerListener();
2574ed2deddSopenharmony_ci    delete surface;
2584ed2deddSopenharmony_ci    delete consumerListener;
2594ed2deddSopenharmony_ci}
2604ed2deddSopenharmony_ci
2614ed2deddSopenharmony_ci/*
2624ed2deddSopenharmony_ci * Feature: Surface
2634ed2deddSopenharmony_ci * Function: Surface set format
2644ed2deddSopenharmony_ci * SubFunction: NA
2654ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get format.
2664ed2deddSopenharmony_ci * EnvConditions: NA
2674ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set format.
2684ed2deddSopenharmony_ci */
2694ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_002, TestSize.Level1)
2704ed2deddSopenharmony_ci{
2714ed2deddSopenharmony_ci    IBufferConsumerListener* consumerListener = new BufferConsumerTest();
2724ed2deddSopenharmony_ci    if (consumerListener == nullptr) {
2734ed2deddSopenharmony_ci        return;
2744ed2deddSopenharmony_ci    }
2754ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
2764ed2deddSopenharmony_ci    if (surface == nullptr) {
2774ed2deddSopenharmony_ci        delete consumerListener;
2784ed2deddSopenharmony_ci        consumerListener = nullptr;
2794ed2deddSopenharmony_ci        return;
2804ed2deddSopenharmony_ci    }
2814ed2deddSopenharmony_ci    surface->RegisterConsumerListener(*consumerListener);
2824ed2deddSopenharmony_ci
2834ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
2844ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0)
2854ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
2864ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
2874ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
2884ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101)
2894ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4
2904ed2deddSopenharmony_ci
2914ed2deddSopenharmony_ci    // set format 0 failed, return default.
2924ed2deddSopenharmony_ci    surface->SetFormat(0);
2934ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetFormat());
2944ed2deddSopenharmony_ci
2954ed2deddSopenharmony_ci    // set format 102 succeed, return 102.
2964ed2deddSopenharmony_ci    surface->SetFormat(102);
2974ed2deddSopenharmony_ci    EXPECT_EQ(102, surface->GetFormat());
2984ed2deddSopenharmony_ci
2994ed2deddSopenharmony_ci    surface->UnregisterConsumerListener();
3004ed2deddSopenharmony_ci    delete surface;
3014ed2deddSopenharmony_ci    delete consumerListener;
3024ed2deddSopenharmony_ci}
3034ed2deddSopenharmony_ci
3044ed2deddSopenharmony_ci/*
3054ed2deddSopenharmony_ci * Feature: Surface
3064ed2deddSopenharmony_ci * Function: Surface set stride alignment
3074ed2deddSopenharmony_ci * SubFunction: NA
3084ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get stride alignment.
3094ed2deddSopenharmony_ci * EnvConditions: NA
3104ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set stride alignment.
3114ed2deddSopenharmony_ci */
3124ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_003, TestSize.Level1)
3134ed2deddSopenharmony_ci{
3144ed2deddSopenharmony_ci    IBufferConsumerListener* consumerListener = new BufferConsumerTest();
3154ed2deddSopenharmony_ci    if (consumerListener == nullptr) {
3164ed2deddSopenharmony_ci        return;
3174ed2deddSopenharmony_ci    }
3184ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
3194ed2deddSopenharmony_ci    if (surface == nullptr) {
3204ed2deddSopenharmony_ci        delete consumerListener;
3214ed2deddSopenharmony_ci        consumerListener = nullptr;
3224ed2deddSopenharmony_ci        return;
3234ed2deddSopenharmony_ci    }
3244ed2deddSopenharmony_ci    surface->RegisterConsumerListener(*consumerListener);
3254ed2deddSopenharmony_ci
3264ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
3274ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0)
3284ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
3294ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
3304ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
3314ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101)
3324ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4
3334ed2deddSopenharmony_ci
3344ed2deddSopenharmony_ci    surface->SetWidthAndHeight(99, 90);
3354ed2deddSopenharmony_ci    SurfaceBuffer* bufferFirst = surface->RequestBuffer();
3364ed2deddSopenharmony_ci    EXPECT_EQ(208, surface->GetStride());
3374ed2deddSopenharmony_ci    surface->CancelBuffer(bufferFirst);
3384ed2deddSopenharmony_ci
3394ed2deddSopenharmony_ci    // set stride alignment 3 failed, return default.SetStrideAlignment has expired, delete again
3404ed2deddSopenharmony_ci    surface->SetStrideAlignment(3);
3414ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment());
3424ed2deddSopenharmony_ci
3434ed2deddSopenharmony_ci    // set stride alignment 33 failed, return default.SetStrideAlignment has expired, delete again
3444ed2deddSopenharmony_ci    surface->SetStrideAlignment(33);
3454ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment());
3464ed2deddSopenharmony_ci
3474ed2deddSopenharmony_ci    // set stride alignment 32 succeed, return default.SetStrideAlignment has expired, delete again
3484ed2deddSopenharmony_ci    surface->SetStrideAlignment(32);
3494ed2deddSopenharmony_ci    EXPECT_EQ(32, surface->GetStrideAlignment());
3504ed2deddSopenharmony_ci
3514ed2deddSopenharmony_ci    surface->UnregisterConsumerListener();
3524ed2deddSopenharmony_ci    delete surface;
3534ed2deddSopenharmony_ci    delete consumerListener;
3544ed2deddSopenharmony_ci}
3554ed2deddSopenharmony_ci
3564ed2deddSopenharmony_ci/*
3574ed2deddSopenharmony_ci * Feature: Surface
3584ed2deddSopenharmony_ci * Function: Surface set size
3594ed2deddSopenharmony_ci * SubFunction: NA
3604ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get size.
3614ed2deddSopenharmony_ci * EnvConditions: NA
3624ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set size.
3634ed2deddSopenharmony_ci */
3644ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_004, TestSize.Level1)
3654ed2deddSopenharmony_ci{
3664ed2deddSopenharmony_ci    IBufferConsumerListener* consumerListener = new BufferConsumerTest();
3674ed2deddSopenharmony_ci    if (consumerListener == nullptr) {
3684ed2deddSopenharmony_ci        return;
3694ed2deddSopenharmony_ci    }
3704ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
3714ed2deddSopenharmony_ci    if (surface == nullptr) {
3724ed2deddSopenharmony_ci        delete consumerListener;
3734ed2deddSopenharmony_ci        consumerListener = nullptr;
3744ed2deddSopenharmony_ci        return;
3754ed2deddSopenharmony_ci    }
3764ed2deddSopenharmony_ci    surface->RegisterConsumerListener(*consumerListener);
3774ed2deddSopenharmony_ci
3784ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
3794ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0)
3804ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
3814ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
3824ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
3834ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101)
3844ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4
3854ed2deddSopenharmony_ci
3864ed2deddSopenharmony_ci    // set size 0 failed, return default.
3874ed2deddSopenharmony_ci    surface->SetSize(0);
3884ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
3894ed2deddSopenharmony_ci
3904ed2deddSopenharmony_ci    // set size 58982400 failed, return default.
3914ed2deddSopenharmony_ci    surface->SetSize(58982400);
3924ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
3934ed2deddSopenharmony_ci
3944ed2deddSopenharmony_ci    // set size 1024 succeed, return default.
3954ed2deddSopenharmony_ci    surface->SetSize(1024);
3964ed2deddSopenharmony_ci    EXPECT_EQ(1024, surface->GetSize());
3974ed2deddSopenharmony_ci
3984ed2deddSopenharmony_ci    surface->UnregisterConsumerListener();
3994ed2deddSopenharmony_ci    delete surface;
4004ed2deddSopenharmony_ci    delete consumerListener;
4014ed2deddSopenharmony_ci}
4024ed2deddSopenharmony_ci
4034ed2deddSopenharmony_ci/*
4044ed2deddSopenharmony_ci * Feature: Surface
4054ed2deddSopenharmony_ci * Function: Surface set usage
4064ed2deddSopenharmony_ci * SubFunction: NA
4074ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get usage.
4084ed2deddSopenharmony_ci * EnvConditions: NA
4094ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set usage.
4104ed2deddSopenharmony_ci */
4114ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_005, TestSize.Level1)
4124ed2deddSopenharmony_ci{
4134ed2deddSopenharmony_ci    IBufferConsumerListener* consumerListener = new BufferConsumerTest();
4144ed2deddSopenharmony_ci    if (consumerListener == nullptr) {
4154ed2deddSopenharmony_ci        return;
4164ed2deddSopenharmony_ci    }
4174ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
4184ed2deddSopenharmony_ci    if (surface == nullptr) {
4194ed2deddSopenharmony_ci        delete consumerListener;
4204ed2deddSopenharmony_ci        consumerListener = nullptr;
4214ed2deddSopenharmony_ci        return;
4224ed2deddSopenharmony_ci    }
4234ed2deddSopenharmony_ci    surface->RegisterConsumerListener(*consumerListener);
4244ed2deddSopenharmony_ci
4254ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
4264ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0)
4274ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
4284ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
4294ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
4304ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
4314ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101)
4324ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4
4334ed2deddSopenharmony_ci
4344ed2deddSopenharmony_ci    // set size BUFFER_CONSUMER_USAGE_MAX(4) failed, return default.
4354ed2deddSopenharmony_ci    surface->SetUsage(4);
4364ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetUsage());
4374ed2deddSopenharmony_ci
4384ed2deddSopenharmony_ci    // set size 3 succeed, return default.
4394ed2deddSopenharmony_ci    surface->SetUsage(3);
4404ed2deddSopenharmony_ci    EXPECT_EQ(3, surface->GetUsage());
4414ed2deddSopenharmony_ci
4424ed2deddSopenharmony_ci    surface->UnregisterConsumerListener();
4434ed2deddSopenharmony_ci    delete surface;
4444ed2deddSopenharmony_ci    delete consumerListener;
4454ed2deddSopenharmony_ci}
4464ed2deddSopenharmony_ci
4474ed2deddSopenharmony_ci/*
4484ed2deddSopenharmony_ci * Feature: Surface
4494ed2deddSopenharmony_ci * Function: Surface set queue size
4504ed2deddSopenharmony_ci * SubFunction: NA
4514ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get queue size.
4524ed2deddSopenharmony_ci * EnvConditions: NA
4534ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set attr.
4544ed2deddSopenharmony_ci */
4554ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_006, TestSize.Level1)
4564ed2deddSopenharmony_ci{
4574ed2deddSopenharmony_ci    IBufferConsumerListener* consumerListener = new BufferConsumerTest();
4584ed2deddSopenharmony_ci    if (consumerListener == nullptr) {
4594ed2deddSopenharmony_ci        return;
4604ed2deddSopenharmony_ci    }
4614ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
4624ed2deddSopenharmony_ci    if (surface == nullptr) {
4634ed2deddSopenharmony_ci        delete consumerListener;
4644ed2deddSopenharmony_ci        consumerListener = nullptr;
4654ed2deddSopenharmony_ci        return;
4664ed2deddSopenharmony_ci    }
4674ed2deddSopenharmony_ci    surface->RegisterConsumerListener(*consumerListener);
4684ed2deddSopenharmony_ci
4694ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
4704ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0)
4714ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
4724ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
4734ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
4744ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
4754ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101)
4764ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4
4774ed2deddSopenharmony_ci
4784ed2deddSopenharmony_ci    // set queue size failed, return default.
4794ed2deddSopenharmony_ci    surface->SetQueueSize(0);
4804ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
4814ed2deddSopenharmony_ci
4824ed2deddSopenharmony_ci    // set queue size failed more than SURFACE_MAX_QUEUE_SIZE(10), return default.
4834ed2deddSopenharmony_ci    surface->SetQueueSize(11);
4844ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
4854ed2deddSopenharmony_ci
4864ed2deddSopenharmony_ci    // set queue size SURFACE_MAX_QUEUE_SIZE(10), return 10.
4874ed2deddSopenharmony_ci    surface->SetQueueSize(10);
4884ed2deddSopenharmony_ci    EXPECT_EQ(10, surface->GetQueueSize());
4894ed2deddSopenharmony_ci
4904ed2deddSopenharmony_ci    // set queue size 5 succeed, return 5.
4914ed2deddSopenharmony_ci    surface->SetQueueSize(5);
4924ed2deddSopenharmony_ci    EXPECT_EQ(5, surface->GetQueueSize());
4934ed2deddSopenharmony_ci
4944ed2deddSopenharmony_ci    surface->UnregisterConsumerListener();
4954ed2deddSopenharmony_ci    delete surface;
4964ed2deddSopenharmony_ci    delete consumerListener;
4974ed2deddSopenharmony_ci}
4984ed2deddSopenharmony_ci
4994ed2deddSopenharmony_ci/*
5004ed2deddSopenharmony_ci * Feature: Surface
5014ed2deddSopenharmony_ci * Function: Surface set user data
5024ed2deddSopenharmony_ci * SubFunction: NA
5034ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get user data.
5044ed2deddSopenharmony_ci * EnvConditions: NA
5054ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set user data.
5064ed2deddSopenharmony_ci */
5074ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_007, TestSize.Level1)
5084ed2deddSopenharmony_ci{
5094ed2deddSopenharmony_ci    IBufferConsumerListener* consumerListener = new BufferConsumerTest();
5104ed2deddSopenharmony_ci    if (consumerListener == nullptr) {
5114ed2deddSopenharmony_ci        return;
5124ed2deddSopenharmony_ci    }
5134ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
5144ed2deddSopenharmony_ci    if (surface == nullptr) {
5154ed2deddSopenharmony_ci        delete consumerListener;
5164ed2deddSopenharmony_ci        consumerListener = nullptr;
5174ed2deddSopenharmony_ci        return;
5184ed2deddSopenharmony_ci    }
5194ed2deddSopenharmony_ci    surface->RegisterConsumerListener(*consumerListener);
5204ed2deddSopenharmony_ci
5214ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
5224ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0)
5234ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
5244ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
5254ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
5264ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101)
5274ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4
5284ed2deddSopenharmony_ci
5294ed2deddSopenharmony_ci    surface->SetUserData("testkey", "testvalue");
5304ed2deddSopenharmony_ci    EXPECT_EQ("testvalue", surface->GetUserData("testkey"));
5314ed2deddSopenharmony_ci
5324ed2deddSopenharmony_ci    surface->UnregisterConsumerListener();
5334ed2deddSopenharmony_ci    delete surface;
5344ed2deddSopenharmony_ci    delete consumerListener;
5354ed2deddSopenharmony_ci}
5364ed2deddSopenharmony_ci
5374ed2deddSopenharmony_ci/*
5384ed2deddSopenharmony_ci * Feature: Surface
5394ed2deddSopenharmony_ci * Function: Surface single process constuctor.
5404ed2deddSopenharmony_ci * SubFunction: NA
5414ed2deddSopenharmony_ci * FunctionPoints: buffer constuctor and set/get attr.
5424ed2deddSopenharmony_ci * EnvConditions: NA
5434ed2deddSopenharmony_ci * CaseDescription: Surface constuctor.
5444ed2deddSopenharmony_ci */
5454ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_001, TestSize.Level1)
5464ed2deddSopenharmony_ci{
5474ed2deddSopenharmony_ci    IBufferConsumerListener* consumerListener = new BufferConsumerTest();
5484ed2deddSopenharmony_ci    if (consumerListener == nullptr) {
5494ed2deddSopenharmony_ci        return;
5504ed2deddSopenharmony_ci    }
5514ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
5524ed2deddSopenharmony_ci    if (surface == nullptr) {
5534ed2deddSopenharmony_ci        delete consumerListener;
5544ed2deddSopenharmony_ci        consumerListener = nullptr;
5554ed2deddSopenharmony_ci        return;
5564ed2deddSopenharmony_ci    }
5574ed2deddSopenharmony_ci    surface->RegisterConsumerListener(*consumerListener);
5584ed2deddSopenharmony_ci
5594ed2deddSopenharmony_ci    EXPECT_EQ(1, surface->GetQueueSize());
5604ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0)
5614ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetSize());
5624ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetWidth());
5634ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
5644ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->GetHeight());
5654ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101)
5664ed2deddSopenharmony_ci    EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4
5674ed2deddSopenharmony_ci
5684ed2deddSopenharmony_ci    surface->SetSize(1024); // Set alloc 1024B SHM
5694ed2deddSopenharmony_ci    EXPECT_EQ(1024, surface->GetSize());
5704ed2deddSopenharmony_ci
5714ed2deddSopenharmony_ci    surface->SetWidthAndHeight(101, 202); // set width(101), height(202)
5724ed2deddSopenharmony_ci    surface->SetFormat(102); // set format IMAGE_PIXEL_FORMAT_ARGB1555(102)
5734ed2deddSopenharmony_ci    surface->SetStrideAlignment(8); // set format stride alignment is 8
5744ed2deddSopenharmony_ci
5754ed2deddSopenharmony_ci    EXPECT_EQ(101, surface->GetWidth());
5764ed2deddSopenharmony_ci    EXPECT_EQ(202, surface->GetHeight());
5774ed2deddSopenharmony_ci    EXPECT_EQ(102, surface->GetFormat());
5784ed2deddSopenharmony_ci    EXPECT_EQ(8, surface->GetStrideAlignment());
5794ed2deddSopenharmony_ci    SurfaceBuffer* bufferFirst = surface->RequestBuffer();
5804ed2deddSopenharmony_ci    EXPECT_EQ(208, surface->GetStride()); // calculate by width, height, format.
5814ed2deddSopenharmony_ci    EXPECT_EQ(42016, surface->GetSize()); // calculate by width, height, format.
5824ed2deddSopenharmony_ci    surface->CancelBuffer(bufferFirst);
5834ed2deddSopenharmony_ci
5844ed2deddSopenharmony_ci    surface->UnregisterConsumerListener();
5854ed2deddSopenharmony_ci    delete surface;
5864ed2deddSopenharmony_ci    delete consumerListener;
5874ed2deddSopenharmony_ci}
5884ed2deddSopenharmony_ci
5894ed2deddSopenharmony_ci/*
5904ed2deddSopenharmony_ci * Feature: Surface
5914ed2deddSopenharmony_ci * Function: Surface single process request and cancel Buffer
5924ed2deddSopenharmony_ci * SubFunction: NA
5934ed2deddSopenharmony_ci * FunctionPoints: buffer request and cancel.
5944ed2deddSopenharmony_ci * EnvConditions: NA
5954ed2deddSopenharmony_ci * CaseDescription: Surface single process request and cancel Buffer.
5964ed2deddSopenharmony_ci */
5974ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_002, TestSize.Level1)
5984ed2deddSopenharmony_ci{
5994ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
6004ed2deddSopenharmony_ci    if (surface == nullptr) {
6014ed2deddSopenharmony_ci        return;
6024ed2deddSopenharmony_ci    }
6034ed2deddSopenharmony_ci
6044ed2deddSopenharmony_ci    SurfaceBuffer* bufferFirst = surface->RequestBuffer(); // no size, return null pointer
6054ed2deddSopenharmony_ci    EXPECT_FALSE(bufferFirst);
6064ed2deddSopenharmony_ci
6074ed2deddSopenharmony_ci    surface->SetSize(1024); // Set alloc 1024B SHM
6084ed2deddSopenharmony_ci    bufferFirst = surface->RequestBuffer();
6094ed2deddSopenharmony_ci    EXPECT_TRUE(bufferFirst);
6104ed2deddSopenharmony_ci
6114ed2deddSopenharmony_ci    SurfaceBuffer* bufferSecond = surface->RequestBuffer(); // default queue size = 1, second return null pointer
6124ed2deddSopenharmony_ci
6134ed2deddSopenharmony_ci    EXPECT_FALSE(bufferSecond);
6144ed2deddSopenharmony_ci    surface->CancelBuffer(bufferFirst);
6154ed2deddSopenharmony_ci    EXPECT_TRUE(surface->RequestBuffer());
6164ed2deddSopenharmony_ci
6174ed2deddSopenharmony_ci    delete surface;
6184ed2deddSopenharmony_ci}
6194ed2deddSopenharmony_ci
6204ed2deddSopenharmony_ci/*
6214ed2deddSopenharmony_ci * Feature: Surface
6224ed2deddSopenharmony_ci * Function: Surface single process request and flush Buffer
6234ed2deddSopenharmony_ci * SubFunction: NA
6244ed2deddSopenharmony_ci * FunctionPoints: buffer request and flush.
6254ed2deddSopenharmony_ci * EnvConditions: NA
6264ed2deddSopenharmony_ci * CaseDescription: Surface single process request and flush Buffer.
6274ed2deddSopenharmony_ci */
6284ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_003, TestSize.Level1)
6294ed2deddSopenharmony_ci{
6304ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
6314ed2deddSopenharmony_ci    ASSERT_TRUE(surface);
6324ed2deddSopenharmony_ci
6334ed2deddSopenharmony_ci    SurfaceBuffer* requestBuffer = surface->RequestBuffer(); // no size, return null pointer
6344ed2deddSopenharmony_ci    EXPECT_FALSE(requestBuffer);
6354ed2deddSopenharmony_ci
6364ed2deddSopenharmony_ci    surface->SetWidthAndHeight(454, 454); // 454 : surface width and height
6374ed2deddSopenharmony_ci    requestBuffer = surface->RequestBuffer();
6384ed2deddSopenharmony_ci    EXPECT_TRUE(requestBuffer);
6394ed2deddSopenharmony_ci
6404ed2deddSopenharmony_ci    SurfaceBufferImpl* buffer = new SurfaceBufferImpl();
6414ed2deddSopenharmony_ci    EXPECT_TRUE(surface->FlushBuffer(buffer) != 0); // Not allocated by surface, could not flush.
6424ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->FlushBuffer(requestBuffer)); // allocated by surface, could flush.
6434ed2deddSopenharmony_ci
6444ed2deddSopenharmony_ci    delete buffer;
6454ed2deddSopenharmony_ci    delete surface;
6464ed2deddSopenharmony_ci}
6474ed2deddSopenharmony_ci
6484ed2deddSopenharmony_ci/*
6494ed2deddSopenharmony_ci * Feature: Surface
6504ed2deddSopenharmony_ci * Function: Surface single process acquire Buffer
6514ed2deddSopenharmony_ci * SubFunction: NA
6524ed2deddSopenharmony_ci * FunctionPoints: buffer acquire buffer
6534ed2deddSopenharmony_ci * EnvConditions: NA
6544ed2deddSopenharmony_ci * CaseDescription: Surface single process acquire Buffer.
6554ed2deddSopenharmony_ci */
6564ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_004, TestSize.Level1)
6574ed2deddSopenharmony_ci{
6584ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
6594ed2deddSopenharmony_ci    ASSERT_TRUE(surface);
6604ed2deddSopenharmony_ci
6614ed2deddSopenharmony_ci    SurfaceBuffer* acquireBuffer = surface->AcquireBuffer(); // no size, return null pointer
6624ed2deddSopenharmony_ci    EXPECT_FALSE(acquireBuffer);
6634ed2deddSopenharmony_ci
6644ed2deddSopenharmony_ci    surface->SetSize(1024); // Set alloc 1024B SHM
6654ed2deddSopenharmony_ci    SurfaceBuffer* requestBuffer = surface->RequestBuffer();
6664ed2deddSopenharmony_ci    if (requestBuffer == nullptr) {
6674ed2deddSopenharmony_ci        delete surface;
6684ed2deddSopenharmony_ci        return;
6694ed2deddSopenharmony_ci    }
6704ed2deddSopenharmony_ci    requestBuffer->SetInt32(10, 11); // set key-value <10, 11>
6714ed2deddSopenharmony_ci
6724ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->FlushBuffer(requestBuffer)); // allocated by surface, could flush.
6734ed2deddSopenharmony_ci
6744ed2deddSopenharmony_ci    acquireBuffer = surface->AcquireBuffer();
6754ed2deddSopenharmony_ci    ASSERT_TRUE(acquireBuffer);
6764ed2deddSopenharmony_ci    int32_t value;
6774ed2deddSopenharmony_ci    acquireBuffer->GetInt32(10, value);
6784ed2deddSopenharmony_ci    EXPECT_EQ(11, value);
6794ed2deddSopenharmony_ci
6804ed2deddSopenharmony_ci    delete surface;
6814ed2deddSopenharmony_ci}
6824ed2deddSopenharmony_ci
6834ed2deddSopenharmony_ci/*
6844ed2deddSopenharmony_ci * Feature: Surface
6854ed2deddSopenharmony_ci * Function: Surface single process release Buffer
6864ed2deddSopenharmony_ci * SubFunction: NA
6874ed2deddSopenharmony_ci * FunctionPoints: buffer release buffer
6884ed2deddSopenharmony_ci * EnvConditions: NA
6894ed2deddSopenharmony_ci * CaseDescription: Surface single process release Buffer.
6904ed2deddSopenharmony_ci */
6914ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_005, TestSize.Level1)
6924ed2deddSopenharmony_ci{
6934ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
6944ed2deddSopenharmony_ci    ASSERT_TRUE(surface);
6954ed2deddSopenharmony_ci
6964ed2deddSopenharmony_ci    SurfaceBufferImpl* buffer = new SurfaceBufferImpl();
6974ed2deddSopenharmony_ci    EXPECT_FALSE(surface->ReleaseBuffer(buffer)); // Not allocated by surface, could not release
6984ed2deddSopenharmony_ci
6994ed2deddSopenharmony_ci    SurfaceBuffer* acquireBuffer = surface->AcquireBuffer(); // no size, return null pointer
7004ed2deddSopenharmony_ci    EXPECT_FALSE(acquireBuffer);
7014ed2deddSopenharmony_ci
7024ed2deddSopenharmony_ci    surface->SetSize(1024); // Set alloc 1024B SHM
7034ed2deddSopenharmony_ci    SurfaceBuffer* requestBuffer = surface->RequestBuffer();
7044ed2deddSopenharmony_ci    if (requestBuffer == nullptr) {
7054ed2deddSopenharmony_ci        delete buffer;
7064ed2deddSopenharmony_ci        delete surface;
7074ed2deddSopenharmony_ci        return;
7084ed2deddSopenharmony_ci    }
7094ed2deddSopenharmony_ci    requestBuffer->SetInt32(10, 11); // set key-value <10, 11>
7104ed2deddSopenharmony_ci
7114ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->FlushBuffer(requestBuffer)); // allocated by surface, could flush.
7124ed2deddSopenharmony_ci
7134ed2deddSopenharmony_ci    acquireBuffer = surface->AcquireBuffer();
7144ed2deddSopenharmony_ci    if (acquireBuffer == nullptr) {
7154ed2deddSopenharmony_ci        delete buffer;
7164ed2deddSopenharmony_ci        delete surface;
7174ed2deddSopenharmony_ci        return;
7184ed2deddSopenharmony_ci    }
7194ed2deddSopenharmony_ci    int32_t value;
7204ed2deddSopenharmony_ci    acquireBuffer->GetInt32(10, value);
7214ed2deddSopenharmony_ci    EXPECT_EQ(11, value);
7224ed2deddSopenharmony_ci
7234ed2deddSopenharmony_ci    EXPECT_TRUE(surface->ReleaseBuffer(acquireBuffer));
7244ed2deddSopenharmony_ci    EXPECT_TRUE(acquireBuffer->GetInt32(10, value) != 0);
7254ed2deddSopenharmony_ci
7264ed2deddSopenharmony_ci    delete buffer;
7274ed2deddSopenharmony_ci    delete surface;
7284ed2deddSopenharmony_ci}
7294ed2deddSopenharmony_ci
7304ed2deddSopenharmony_ci/*
7314ed2deddSopenharmony_ci * Feature: Surface
7324ed2deddSopenharmony_ci * Function: Surface single process release Buffer
7334ed2deddSopenharmony_ci * SubFunction: NA
7344ed2deddSopenharmony_ci * FunctionPoints: buffer release buffer
7354ed2deddSopenharmony_ci * EnvConditions: NA
7364ed2deddSopenharmony_ci * CaseDescription: Surface single process release Buffer.
7374ed2deddSopenharmony_ci */
7384ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_006, TestSize.Level1)
7394ed2deddSopenharmony_ci{
7404ed2deddSopenharmony_ci    IBufferConsumerListener* consumerListener = new BufferConsumerTest();
7414ed2deddSopenharmony_ci    if (consumerListener == nullptr) {
7424ed2deddSopenharmony_ci        return;
7434ed2deddSopenharmony_ci    }
7444ed2deddSopenharmony_ci    Surface* surface = Surface::CreateSurface();
7454ed2deddSopenharmony_ci    if (surface == nullptr) {
7464ed2deddSopenharmony_ci        delete consumerListener;
7474ed2deddSopenharmony_ci        consumerListener = nullptr;
7484ed2deddSopenharmony_ci        return;
7494ed2deddSopenharmony_ci    }
7504ed2deddSopenharmony_ci    surface->RegisterConsumerListener(*consumerListener);
7514ed2deddSopenharmony_ci
7524ed2deddSopenharmony_ci    SurfaceBufferImpl* buffer = new SurfaceBufferImpl();
7534ed2deddSopenharmony_ci    EXPECT_FALSE(surface->ReleaseBuffer(buffer)); // Not allocated by surface, could not release
7544ed2deddSopenharmony_ci
7554ed2deddSopenharmony_ci    SurfaceBuffer* acquireBuffer = surface->AcquireBuffer(); // no size, return null pointer
7564ed2deddSopenharmony_ci    EXPECT_FALSE(acquireBuffer);
7574ed2deddSopenharmony_ci
7584ed2deddSopenharmony_ci    surface->SetSize(1024); // Set alloc 1024B SHM
7594ed2deddSopenharmony_ci    SurfaceBuffer* requestBuffer = surface->RequestBuffer();
7604ed2deddSopenharmony_ci    if (requestBuffer == nullptr) {
7614ed2deddSopenharmony_ci        delete buffer;
7624ed2deddSopenharmony_ci        buffer = nullptr;
7634ed2deddSopenharmony_ci        delete surface;
7644ed2deddSopenharmony_ci        surface = nullptr;
7654ed2deddSopenharmony_ci        delete consumerListener;
7664ed2deddSopenharmony_ci        consumerListener = nullptr;
7674ed2deddSopenharmony_ci        return;
7684ed2deddSopenharmony_ci    }
7694ed2deddSopenharmony_ci
7704ed2deddSopenharmony_ci    requestBuffer->SetInt32(10, 11); // set key-value <10, 11>
7714ed2deddSopenharmony_ci
7724ed2deddSopenharmony_ci    EXPECT_EQ(0, surface->FlushBuffer(requestBuffer)); // allocated by surface, could flush.
7734ed2deddSopenharmony_ci
7744ed2deddSopenharmony_ci    acquireBuffer = surface->AcquireBuffer();
7754ed2deddSopenharmony_ci    if (acquireBuffer == nullptr) {
7764ed2deddSopenharmony_ci        delete buffer;
7774ed2deddSopenharmony_ci        buffer = nullptr;
7784ed2deddSopenharmony_ci        delete surface;
7794ed2deddSopenharmony_ci        surface = nullptr;
7804ed2deddSopenharmony_ci        delete consumerListener;
7814ed2deddSopenharmony_ci        consumerListener = nullptr;
7824ed2deddSopenharmony_ci        return;
7834ed2deddSopenharmony_ci    }
7844ed2deddSopenharmony_ci
7854ed2deddSopenharmony_ci    int32_t value;
7864ed2deddSopenharmony_ci    acquireBuffer->GetInt32(10, value);
7874ed2deddSopenharmony_ci    EXPECT_EQ(11, value);
7884ed2deddSopenharmony_ci
7894ed2deddSopenharmony_ci    EXPECT_TRUE(surface->ReleaseBuffer(acquireBuffer));
7904ed2deddSopenharmony_ci    EXPECT_TRUE(acquireBuffer->GetInt32(10, value) != 0);
7914ed2deddSopenharmony_ci
7924ed2deddSopenharmony_ci    delete buffer;
7934ed2deddSopenharmony_ci    delete surface;
7944ed2deddSopenharmony_ci    delete consumerListener;
7954ed2deddSopenharmony_ci}
7964ed2deddSopenharmony_ci} // namespace OHOS
797