1 /*
2 * Copyright (c) 2021 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 #include <gtest/gtest.h>
16 #include "iconsumer_surface.h"
17 #include <iservice_registry.h>
18 #include <native_window.h>
19 #include <securec.h>
20 #include <ctime>
21 #include "buffer_log.h"
22 #include "external_window.h"
23 #include "surface_utils.h"
24 #include "sync_fence.h"
25 #include "ipc_inner_object.h"
26 #include "ipc_cparcel.h"
27
28 using namespace std;
29 using namespace testing;
30 using namespace testing::ext;
31
32 namespace OHOS::Rosen {
33 class BufferConsumerListener : public IBufferConsumerListener {
34 public:
OnBufferAvailable()35 void OnBufferAvailable() override
36 {
37 }
38 };
39
OnBufferRelease(sptr<SurfaceBuffer> & buffer)40 static inline GSError OnBufferRelease(sptr<SurfaceBuffer> &buffer)
41 {
42 return GSERROR_OK;
43 }
44
AllocOHExtDataHandle(uint32_t reserveInts)45 static OHExtDataHandle *AllocOHExtDataHandle(uint32_t reserveInts)
46 {
47 size_t handleSize = sizeof(OHExtDataHandle) + (sizeof(int32_t) * reserveInts);
48 OHExtDataHandle *handle = static_cast<OHExtDataHandle *>(malloc(handleSize));
49 if (handle == nullptr) {
50 BLOGE("AllocOHExtDataHandle malloc %zu failed", handleSize);
51 return nullptr;
52 }
53 auto ret = memset_s(handle, handleSize, 0, handleSize);
54 if (ret != EOK) {
55 BLOGE("AllocOHExtDataHandle memset_s failed");
56 free(handle);
57 return nullptr;
58 }
59 handle->fd = -1;
60 handle->reserveInts = reserveInts;
61 for (uint32_t i = 0; i < reserveInts; i++) {
62 handle->reserve[i] = -1;
63 }
64 return handle;
65 }
66
FreeOHExtDataHandle(OHExtDataHandle * handle)67 static void FreeOHExtDataHandle(OHExtDataHandle *handle)
68 {
69 if (handle == nullptr) {
70 BLOGW("FreeOHExtDataHandle with nullptr handle");
71 return ;
72 }
73 if (handle->fd >= 0) {
74 close(handle->fd);
75 handle->fd = -1;
76 }
77 free(handle);
78 }
79
80 class NativeWindowTest : public testing::Test {
81 public:
82 static void SetUpTestCase();
83 static void TearDownTestCase();
84
85 static inline BufferRequestConfig requestConfig = {};
86 static inline BufferFlushConfig flushConfig = {};
87 static inline sptr<OHOS::IConsumerSurface> cSurface = nullptr;
88 static inline sptr<OHOS::IBufferProducer> producer = nullptr;
89 static inline sptr<OHOS::Surface> pSurface = nullptr;
90 static inline sptr<OHOS::SurfaceBuffer> sBuffer = nullptr;
91 static inline NativeWindow* nativeWindow = nullptr;
92 static inline NativeWindowBuffer* nativeWindowBuffer = nullptr;
93 static inline uint32_t firstSeqnum = 0;
94 };
95
SetUpTestCase()96 void NativeWindowTest::SetUpTestCase()
97 {
98 requestConfig = {
99 .width = 0x100, // small
100 .height = 0x100, // small
101 .strideAlignment = 0x8,
102 .format = GRAPHIC_PIXEL_FMT_RGBA_8888,
103 .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
104 .timeout = 0,
105 };
106
107 cSurface = IConsumerSurface::Create();
108 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
109 cSurface->RegisterConsumerListener(listener);
110 producer = cSurface->GetProducer();
111 pSurface = Surface::CreateSurfaceAsProducer(producer);
112 int32_t fence;
113 pSurface->RequestBuffer(sBuffer, fence, requestConfig);
114 firstSeqnum = sBuffer->GetSeqNum();
115 }
116
TearDownTestCase()117 void NativeWindowTest::TearDownTestCase()
118 {
119 flushConfig = { .damage = {
120 .w = 0x100,
121 .h = 0x100,
122 } };
123 pSurface->FlushBuffer(sBuffer, -1, flushConfig);
124 sBuffer = nullptr;
125 cSurface = nullptr;
126 producer = nullptr;
127 pSurface = nullptr;
128 OH_NativeWindow_DestroyNativeWindow(nativeWindow);
129 nativeWindow = nullptr;
130 nativeWindowBuffer = nullptr;
131 }
132
133 /*
134 * Function: OH_NativeWindow_CreateNativeWindow
135 * Type: Function
136 * Rank: Important(2)
137 * EnvConditions: N/A
138 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindow by abnormal input
139 * 2. check ret
140 */
141 HWTEST_F(NativeWindowTest, CreateNativeWindow001, TestSize.Level0)
142 {
143 ASSERT_EQ(OH_NativeWindow_CreateNativeWindow(nullptr), nullptr);
144 }
145
146 /*
147 * Function: OH_NativeWindow_CreateNativeWindow
148 * Type: Function
149 * Rank: Important(2)
150 * EnvConditions: N/A
151 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindow
152 * 2. check ret
153 */
154 HWTEST_F(NativeWindowTest, CreateNativeWindow002, TestSize.Level0)
155 {
156 nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
157 ASSERT_NE(nativeWindow, nullptr);
158 }
159
160 /*
161 * Function: OH_NativeWindow_CreateNativeWindow
162 * Type: Function
163 * Rank: Important(2)
164 * EnvConditions: N/A
165 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindow
166 * 2. check ret
167 */
168 HWTEST_F(NativeWindowTest, CreateNativeWindow003, TestSize.Level0)
169 {
170 uint64_t surfaceId = 0;
171 int32_t ret = OH_NativeWindow_GetSurfaceId(nativeWindow, &surfaceId);
172 ASSERT_EQ(ret, OHOS::GSERROR_OK);
173 ASSERT_EQ(surfaceId, pSurface->GetUniqueId());
174 }
175
176 /*
177 * Function: OH_NativeWindow_CreateNativeWindow
178 * Type: Function
179 * Rank: Important(2)
180 * EnvConditions: N/A
181 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindow
182 * 2. check ret
183 */
184 HWTEST_F(NativeWindowTest, CreateNativeWindow004, TestSize.Level0)
185 {
186 sptr<OHOS::Surface> surfaceTmp = nullptr;
187 auto nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&surfaceTmp);
188 ASSERT_EQ(nativeWindowTmp, nullptr);
189 }
190
191 /*
192 * Function: OH_NativeWindow_CreateNativeWindowFromSurfaceId
193 * Type: Function
194 * Rank: Important(2)
195 * EnvConditions: N/A
196 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowFromSurfaceId
197 * 2. check ret
198 */
199 HWTEST_F(NativeWindowTest, CreateNativeWindowFromSurfaceId001, TestSize.Level0)
200 {
201 uint64_t surfaceId = static_cast<uint64_t>(pSurface->GetUniqueId());
202 OHNativeWindow *window = nullptr;
203 int32_t ret = OH_NativeWindow_CreateNativeWindowFromSurfaceId(surfaceId, &window);
204 ASSERT_EQ(ret, OHOS::GSERROR_OK);
205 surfaceId = 0;
206 ret = OH_NativeWindow_GetSurfaceId(window, &surfaceId);
207 ASSERT_EQ(ret, OHOS::GSERROR_OK);
208 ASSERT_EQ(surfaceId, pSurface->GetUniqueId());
209 OH_NativeWindow_DestroyNativeWindow(window);
210 }
211
212 /*
213 * Function: OH_NativeWindow_CreateNativeWindowFromSurfaceId
214 * Type: Function
215 * Rank: Important(2)
216 * EnvConditions: N/A
217 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowFromSurfaceId
218 * 2. check ret
219 */
220 HWTEST_F(NativeWindowTest, CreateNativeWindowFromSurfaceId002, TestSize.Level0)
221 {
222 int32_t ret = OH_NativeWindow_CreateNativeWindowFromSurfaceId(0, nullptr);
223 ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
224 ret = OH_NativeWindow_GetSurfaceId(nullptr, nullptr);
225 ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
226 }
227
228 /*
229 * Function: OH_NativeWindow_CreateNativeWindowFromSurfaceId
230 * Type: Function
231 * Rank: Important(2)
232 * EnvConditions: N/A
233 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowFromSurfaceId
234 * 2. check ret
235 */
236 HWTEST_F(NativeWindowTest, CreateNativeWindowFromSurfaceId003, TestSize.Level0)
237 {
238 sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
239 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
240 cSurfaceTmp->RegisterConsumerListener(listener);
241 sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
242 sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
243
244 uint64_t surfaceId = static_cast<uint64_t>(pSurfaceTmp->GetUniqueId());
245 auto utils = SurfaceUtils::GetInstance();
246 utils->Add(surfaceId, pSurfaceTmp);
247 OHNativeWindow *nativeWindowTmp = nullptr;
248 int32_t ret = OH_NativeWindow_CreateNativeWindowFromSurfaceId(0xFFFFFFFF, &nativeWindowTmp);
249 ASSERT_EQ(ret, OHOS::GSERROR_INVALID_ARGUMENTS);
250 ret = OH_NativeWindow_CreateNativeWindowFromSurfaceId(surfaceId, &nativeWindowTmp);
251 ASSERT_EQ(ret, OHOS::GSERROR_OK);
252 surfaceId = 0;
253 ret = OH_NativeWindow_GetSurfaceId(nativeWindowTmp, &surfaceId);
254 ASSERT_EQ(ret, OHOS::GSERROR_OK);
255 ASSERT_EQ(surfaceId, pSurfaceTmp->GetUniqueId());
256
257 cSurfaceTmp = nullptr;
258 producerTmp = nullptr;
259 pSurfaceTmp = nullptr;
260 OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
261 }
262
263 /*
264 * Function: OH_NativeWindow_NativeWindowHandleOpt
265 * Type: Function
266 * Rank: Important(2)
267 * EnvConditions: N/A
268 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by abnormal input
269 * 2. check ret
270 */
271 HWTEST_F(NativeWindowTest, HandleOpt001, TestSize.Level0)
272 {
273 int code = SET_USAGE;
274 uint64_t usage = BUFFER_USAGE_CPU_READ;
275 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nullptr, code, usage), OHOS::GSERROR_INVALID_ARGUMENTS);
276 }
277
278 /*
279 * Function: OH_NativeWindow_NativeWindowHandleOpt
280 * Type: Function
281 * Rank: Important(2)
282 * EnvConditions: N/A
283 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
284 * 2. check ret
285 */
286 HWTEST_F(NativeWindowTest, HandleOpt002, TestSize.Level0)
287 {
288 int code = SET_USAGE;
289 uint64_t usageSet = BUFFER_USAGE_CPU_READ;
290 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usageSet), OHOS::GSERROR_OK);
291
292 code = GET_USAGE;
293 uint64_t usageGet = BUFFER_USAGE_CPU_WRITE;
294 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &usageGet), OHOS::GSERROR_OK);
295 ASSERT_EQ(usageSet, usageGet);
296 }
297
298 /*
299 * Function: OH_NativeWindow_NativeWindowHandleOpt
300 * Type: Function
301 * Rank: Important(2)
302 * EnvConditions: N/A
303 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
304 * 2. check ret
305 */
306 HWTEST_F(NativeWindowTest, HandleOpt003, TestSize.Level0)
307 {
308 int code = SET_BUFFER_GEOMETRY;
309 int32_t heightSet = 0x100;
310 int32_t widthSet = 0x100;
311 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, heightSet, widthSet), OHOS::GSERROR_OK);
312
313 code = GET_BUFFER_GEOMETRY;
314 int32_t heightGet = 0;
315 int32_t widthGet = 0;
316 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &heightGet, &widthGet), OHOS::GSERROR_OK);
317 ASSERT_EQ(heightSet, heightGet);
318 ASSERT_EQ(widthSet, widthGet);
319 }
320
321 /*
322 * Function: OH_NativeWindow_NativeWindowHandleOpt
323 * Type: Function
324 * Rank: Important(2)
325 * EnvConditions: N/A
326 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
327 * 2. check ret
328 */
329 HWTEST_F(NativeWindowTest, HandleOpt004, TestSize.Level0)
330 {
331 int code = SET_FORMAT;
332 int32_t formatSet = GRAPHIC_PIXEL_FMT_RGBA_8888;
333 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
334
335 code = GET_FORMAT;
336 int32_t formatGet = GRAPHIC_PIXEL_FMT_CLUT8;
337 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &formatGet), OHOS::GSERROR_OK);
338 ASSERT_EQ(formatSet, formatGet);
339 }
340
341 /*
342 * Function: OH_NativeWindow_NativeWindowHandleOpt
343 * Type: Function
344 * Rank: Important(2)
345 * EnvConditions: N/A
346 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
347 * 2. check ret
348 */
349 HWTEST_F(NativeWindowTest, HandleOpt005, TestSize.Level0)
350 {
351 int code = SET_STRIDE;
352 int32_t strideSet = 0x8;
353 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, strideSet), OHOS::GSERROR_OK);
354
355 code = GET_STRIDE;
356 int32_t strideGet = 0;
357 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &strideGet), OHOS::GSERROR_OK);
358 ASSERT_EQ(strideSet, strideGet);
359 }
360
361 /*
362 * Function: OH_NativeWindow_NativeWindowHandleOpt
363 * Type: Function
364 * Rank: Important(2)
365 * EnvConditions: N/A
366 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
367 * 2. check ret
368 */
369 HWTEST_F(NativeWindowTest, HandleOpt006, TestSize.Level0)
370 {
371 int code = SET_COLOR_GAMUT;
372 int32_t colorGamutSet = static_cast<int32_t>(GraphicColorGamut::GRAPHIC_COLOR_GAMUT_DCI_P3);
373 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, colorGamutSet), OHOS::GSERROR_OK);
374
375 code = GET_COLOR_GAMUT;
376 int32_t colorGamutGet = 0;
377 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &colorGamutGet), OHOS::GSERROR_OK);
378 ASSERT_EQ(colorGamutSet, colorGamutGet);
379 }
380
381 /*
382 * Function: OH_NativeWindow_NativeWindowHandleOpt
383 * Type: Function
384 * Rank: Important(2)
385 * EnvConditions: N/A
386 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
387 * 2. check ret
388 */
389 HWTEST_F(NativeWindowTest, HandleOpt007, TestSize.Level0)
390 {
391 int code = SET_TIMEOUT;
392 int32_t timeoutSet = 10; // 10: for test
393 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, timeoutSet), OHOS::GSERROR_OK);
394
395 code = GET_TIMEOUT;
396 int32_t timeoutGet = 0;
397 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &timeoutGet), OHOS::GSERROR_OK);
398 ASSERT_EQ(timeoutSet, timeoutGet);
399 }
400
401 /*
402 * Function: OH_NativeWindow_NativeWindowHandleOpt
403 * Type: Function
404 * Rank: Important(2)
405 * EnvConditions: N/A
406 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
407 * 2. check ret
408 */
409 HWTEST_F(NativeWindowTest, HandleOpt008, TestSize.Level0)
410 {
411 int code = GET_TRANSFORM;
412 int32_t transform = 0;
413 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &transform), OHOS::GSERROR_OK);
414 transform = GraphicTransformType::GRAPHIC_ROTATE_90;
415 code = SET_TRANSFORM;
416 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, transform), OHOS::GSERROR_OK);
417 int32_t transformTmp = 0;
418 code = GET_TRANSFORM;
419 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &transformTmp), OHOS::GSERROR_OK);
420 ASSERT_EQ(transformTmp, GraphicTransformType::GRAPHIC_ROTATE_90);
421 nativeWindow->surface->SetTransform(GraphicTransformType::GRAPHIC_ROTATE_180);
422 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &transformTmp), OHOS::GSERROR_OK);
423 ASSERT_EQ(transformTmp, GraphicTransformType::GRAPHIC_ROTATE_180);
424 }
425
426 /*
427 * Function: OH_NativeWindow_NativeWindowHandleOpt
428 * Type: Function
429 * Rank: Important(2)
430 * EnvConditions: N/A
431 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
432 * 2. check ret
433 */
434 HWTEST_F(NativeWindowTest, HandleOpt009, TestSize.Level0)
435 {
436 int code = GET_BUFFERQUEUE_SIZE;
437 int32_t queueSize = 0;
438 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &queueSize), OHOS::GSERROR_OK);
439 ASSERT_EQ(queueSize, 3);
440 nativeWindow->surface->SetQueueSize(5);
441 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &queueSize), OHOS::GSERROR_OK);
442 ASSERT_EQ(queueSize, 5);
443 }
444
445 /*
446 * Function: OH_NativeWindow_NativeWindowHandleOpt
447 * Type: Function
448 * Rank: Important(2)
449 * EnvConditions: N/A
450 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
451 * 2. check ret
452 */
453 HWTEST_F(NativeWindowTest, HandleOpt010, TestSize.Level0)
454 {
455 int code = SET_USAGE;
456 uint64_t usageSet = NATIVEBUFFER_USAGE_HW_RENDER | NATIVEBUFFER_USAGE_HW_TEXTURE |
457 NATIVEBUFFER_USAGE_CPU_READ_OFTEN | NATIVEBUFFER_USAGE_ALIGNMENT_512;
458 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usageSet), OHOS::GSERROR_OK);
459
460 code = GET_USAGE;
461 uint64_t usageGet = usageSet;
462 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &usageGet), OHOS::GSERROR_OK);
463 ASSERT_EQ(usageSet, usageGet);
464
465 code = SET_FORMAT;
466 int32_t formatSet = NATIVEBUFFER_PIXEL_FMT_YCBCR_P010;
467 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
468
469 code = GET_FORMAT;
470 int32_t formatGet = NATIVEBUFFER_PIXEL_FMT_YCBCR_P010;
471 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &formatGet), OHOS::GSERROR_OK);
472 ASSERT_EQ(formatSet, formatGet);
473 }
474
475 /*
476 * Function: OH_NativeWindow_NativeWindowHandleOpt
477 * Type: Function
478 * Rank: Important(2)
479 * EnvConditions: N/A
480 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
481 * 2. check ret
482 */
483 HWTEST_F(NativeWindowTest, HandleOpt011, TestSize.Level0)
484 {
485 int code = SET_SOURCE_TYPE;
486 OHSurfaceSource typeSet = OHSurfaceSource::OH_SURFACE_SOURCE_GAME;
487 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, typeSet), OHOS::GSERROR_OK);
488
489 code = GET_SOURCE_TYPE;
490 OHSurfaceSource typeGet = OHSurfaceSource::OH_SURFACE_SOURCE_DEFAULT;
491 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &typeGet), OHOS::GSERROR_OK);
492 ASSERT_EQ(typeSet, typeGet);
493 }
494
495 /*
496 * Function: OH_NativeWindow_NativeWindowHandleOpt
497 * Type: Function
498 * Rank: Important(2)
499 * EnvConditions: N/A
500 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
501 * 2. check ret
502 */
503 HWTEST_F(NativeWindowTest, HandleOpt012, TestSize.Level0)
504 {
505 int code = SET_APP_FRAMEWORK_TYPE;
506 const char* typeSet = "test";
507 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, typeSet), OHOS::GSERROR_OK);
508
509 code = GET_APP_FRAMEWORK_TYPE;
510 const char* typeGet;
511 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &typeGet), OHOS::GSERROR_OK);
512 ASSERT_EQ(0, strcmp(typeSet, typeGet));
513 }
514
515 /*
516 * Function: OH_NativeWindow_NativeWindowHandleOpt
517 * Type: Function
518 * Rank: Important(2)
519 * EnvConditions: N/A
520 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
521 * 2. check ret
522 */
523 HWTEST_F(NativeWindowTest, HandleOpt013, TestSize.Level0)
524 {
525 int code = SET_HDR_WHITE_POINT_BRIGHTNESS;
526 float brightness = 0.8;
527 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
528
529 code = SET_SDR_WHITE_POINT_BRIGHTNESS;
530 brightness = 0.5;
531 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
532
533 ASSERT_EQ(fabs(cSurface->GetHdrWhitePointBrightness() - 0.8) < 1e-6, true);
534 ASSERT_EQ(fabs(cSurface->GetSdrWhitePointBrightness() - 0.5) < 1e-6, true);
535
536 code = SET_HDR_WHITE_POINT_BRIGHTNESS;
537 brightness = 1.8;
538 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
539 ASSERT_EQ(fabs(cSurface->GetHdrWhitePointBrightness() - 0.8) < 1e-6, true);
540 brightness = -0.5;
541 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
542 ASSERT_EQ(fabs(cSurface->GetHdrWhitePointBrightness() - 0.8) < 1e-6, true);
543 brightness = 0.5;
544 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
545 ASSERT_EQ(fabs(cSurface->GetHdrWhitePointBrightness() - 0.5) < 1e-6, true);
546
547 code = SET_SDR_WHITE_POINT_BRIGHTNESS;
548 brightness = 1.5;
549 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
550 ASSERT_EQ(fabs(cSurface->GetSdrWhitePointBrightness() - 0.5) < 1e-6, true);
551 brightness = -0.1;
552 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
553 ASSERT_EQ(fabs(cSurface->GetSdrWhitePointBrightness() - 0.5) < 1e-6, true);
554 brightness = 0.8;
555 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, brightness), OHOS::GSERROR_OK);
556 ASSERT_EQ(fabs(cSurface->GetSdrWhitePointBrightness() - 0.8) < 1e-6, true);
557 }
558
559 /*
560 * Function: OH_NativeWindow_NativeWindowHandleOpt
561 * Type: Function
562 * Rank: Important(2)
563 * EnvConditions: N/A
564 * CaseDescription: 1. call OH_NativeWindow_NativeWindowHandleOpt by different param
565 * 2. check ret
566 */
567 HWTEST_F(NativeWindowTest, HandleOpt014, TestSize.Level0)
568 {
569 int code = SET_APP_FRAMEWORK_TYPE;
570 const char* typeSet = "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttest";
571 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, typeSet), OHOS::GSERROR_OK);
572
573 code = GET_APP_FRAMEWORK_TYPE;
574 const char* typeGet;
575 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, &typeGet), OHOS::GSERROR_OK);
576 ASSERT_EQ(0, strcmp(typeSet, typeGet));
577 }
578
579 /*
580 * Function: OH_NativeWindow_NativeWindowAttachBuffer
581 * Type: Function
582 * Rank: Important(2)
583 * EnvConditions: N/A
584 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by abnormal input
585 * 2. check ret
586 */
587 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer001, TestSize.Level0)
588 {
589 ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
590 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
591 ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
592 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
593 }
594
SetNativeWindowConfig(NativeWindow * nativeWindow)595 void SetNativeWindowConfig(NativeWindow *nativeWindow)
596 {
597 int code = SET_USAGE;
598 uint64_t usageSet = BUFFER_USAGE_CPU_READ;
599 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usageSet), OHOS::GSERROR_OK);
600
601 code = SET_BUFFER_GEOMETRY;
602 int32_t heightSet = 0x100;
603 int32_t widthSet = 0x100;
604 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, heightSet, widthSet), OHOS::GSERROR_OK);
605
606 code = SET_FORMAT;
607 int32_t formatSet = GRAPHIC_PIXEL_FMT_RGBA_8888;
608 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
609
610 code = SET_STRIDE;
611 int32_t strideSet = 0x8;
612 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, strideSet), OHOS::GSERROR_OK);
613
614 code = SET_COLOR_GAMUT;
615 int32_t colorGamutSet = static_cast<int32_t>(GraphicColorGamut::GRAPHIC_COLOR_GAMUT_DCI_P3);
616 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, colorGamutSet), OHOS::GSERROR_OK);
617
618 code = SET_TIMEOUT;
619 int32_t timeoutSet = 10; // 10: for test
620 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, timeoutSet), OHOS::GSERROR_OK);
621 }
622
623 /*
624 * Function: OH_NativeWindow_NativeWindowAttachBuffer
625 * Type: Function
626 * Rank: Important(2)
627 * EnvConditions: N/A
628 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
629 * 2. check ret
630 */
631 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer002, TestSize.Level0)
632 {
633 sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
634 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
635 cSurfaceTmp->RegisterConsumerListener(listener);
636 sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
637 sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
638
639 NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
640 ASSERT_NE(nativeWindowTmp, nullptr);
641 SetNativeWindowConfig(nativeWindowTmp);
642
643 NativeWindowBuffer *nativeWindowBuffer = nullptr;
644 int fenceFd = -1;
645 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer, &fenceFd);
646 ASSERT_EQ(ret, GSERROR_OK);
647
648 int code = GET_BUFFERQUEUE_SIZE;
649 int32_t queueSize = 0;
650 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
651 ASSERT_EQ(queueSize, 3);
652
653 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer), OHOS::GSERROR_OK);
654
655 ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nativeWindowBuffer), OHOS::GSERROR_OK);
656
657 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nativeWindowBuffer), OHOS::GSERROR_OK);
658
659 ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindowTmp, nativeWindowBuffer), OHOS::GSERROR_OK);
660 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
661 ASSERT_EQ(queueSize, 3);
662 ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindowTmp, nativeWindowBuffer),
663 OHOS::GSERROR_BUFFER_IS_INCACHE);
664
665 struct Region *region = new Region();
666 struct Region::Rect *rect = new Region::Rect();
667 rect->x = 0x100;
668 rect->y = 0x100;
669 rect->w = 0x100;
670 rect->h = 0x100;
671 region->rects = rect;
672 ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindowTmp, nativeWindowBuffer, fenceFd, *region);
673 ASSERT_EQ(ret, GSERROR_OK);
674
675 OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
676 }
677
NativeWindowAttachBuffer003Test(NativeWindow * nativeWindowTmp,NativeWindow * nativeWindowTmp1)678 void NativeWindowAttachBuffer003Test(NativeWindow *nativeWindowTmp, NativeWindow *nativeWindowTmp1)
679 {
680 NativeWindowBuffer *nativeWindowBuffer1 = nullptr;
681 int fenceFd = -1;
682 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer1, &fenceFd);
683 ASSERT_EQ(ret, GSERROR_OK);
684
685 NativeWindowBuffer *nativeWindowBuffer2 = nullptr;
686 fenceFd = -1;
687 ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer2, &fenceFd);
688 ASSERT_EQ(ret, GSERROR_OK);
689
690 NativeWindowBuffer *nativeWindowBuffer3 = nullptr;
691 fenceFd = -1;
692 ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer3, &fenceFd);
693 ASSERT_EQ(ret, GSERROR_OK);
694
695 int code = GET_BUFFERQUEUE_SIZE;
696 int32_t queueSize = 0;
697 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
698 ASSERT_EQ(queueSize, 3);
699
700 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer1), OHOS::GSERROR_OK);
701 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer2), OHOS::GSERROR_OK);
702 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer3), OHOS::GSERROR_OK);
703
704 NativeWindowBuffer *nativeWindowBuffer4 = nullptr;
705 fenceFd = -1;
706 ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer4, &fenceFd);
707 ASSERT_EQ(ret, GSERROR_OK);
708
709 NativeWindowBuffer *nativeWindowBuffer10 = nullptr;
710 fenceFd = -1;
711 ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp1, &nativeWindowBuffer10, &fenceFd);
712 ASSERT_EQ(ret, GSERROR_OK);
713
714 NativeWindowBuffer *nativeWindowBuffer11 = nullptr;
715 fenceFd = -1;
716 ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp1, &nativeWindowBuffer11, &fenceFd);
717 ASSERT_EQ(ret, GSERROR_OK);
718
719 NativeWindowBuffer *nativeWindowBuffer12 = nullptr;
720 fenceFd = -1;
721 ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp1, &nativeWindowBuffer12, &fenceFd);
722 ASSERT_EQ(ret, GSERROR_OK);
723
724 ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindowTmp1, nativeWindowBuffer1),
725 OHOS::SURFACE_ERROR_BUFFER_QUEUE_FULL);
726 }
727
728 /*
729 * Function: OH_NativeWindow_NativeWindowAttachBuffer
730 * Type: Function
731 * Rank: Important(2)
732 * EnvConditions: N/A
733 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
734 * 2. check ret
735 */
736 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer003, TestSize.Level0)
737 {
738 sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
739 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
740 cSurfaceTmp->RegisterConsumerListener(listener);
741 sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
742 sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
743
744 NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
745 ASSERT_NE(nativeWindowTmp, nullptr);
746 SetNativeWindowConfig(nativeWindowTmp);
747
748 sptr<OHOS::IConsumerSurface> cSurfaceTmp1 = IConsumerSurface::Create();
749 sptr<IBufferConsumerListener> listener1 = new BufferConsumerListener();
750 cSurfaceTmp1->RegisterConsumerListener(listener1);
751 sptr<OHOS::IBufferProducer> producerTmp1 = cSurfaceTmp1->GetProducer();
752 sptr<OHOS::Surface> pSurfaceTmp1 = Surface::CreateSurfaceAsProducer(producerTmp1);
753
754 NativeWindow *nativeWindowTmp1 = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp1);
755 ASSERT_NE(nativeWindowTmp1, nullptr);
756 SetNativeWindowConfig(nativeWindowTmp1);
757
758 NativeWindowAttachBuffer003Test(nativeWindowTmp, nativeWindowTmp1);
759
760 OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
761 OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp1);
762 }
763
764 /*
765 * Function: OH_NativeWindow_NativeWindowAttachBuffer
766 * Type: Function
767 * Rank: Important(2)
768 * EnvConditions: N/A
769 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
770 * 2. check ret
771 */
772 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer004, TestSize.Level0)
773 {
774 sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
775 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
776 cSurfaceTmp->RegisterConsumerListener(listener);
777 sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
778 sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
779
780 NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
781 ASSERT_NE(nativeWindowTmp, nullptr);
782 SetNativeWindowConfig(nativeWindowTmp);
783
784 NativeWindowBuffer *nativeWindowBuffer = nullptr;
785 int fenceFd = -1;
786 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer, &fenceFd);
787 ASSERT_EQ(ret, GSERROR_OK);
788
789 struct Region *region = new Region();
790 struct Region::Rect *rect = new Region::Rect();
791 rect->x = 0x100;
792 rect->y = 0x100;
793 rect->w = 0x100;
794 rect->h = 0x100;
795 region->rects = rect;
796 ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindowTmp, nativeWindowBuffer, fenceFd, *region);
797 ASSERT_EQ(ret, GSERROR_OK);
798
799 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer),
800 OHOS::SURFACE_ERROR_BUFFER_STATE_INVALID);
801
802 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nativeWindowBuffer),
803 OHOS::SURFACE_ERROR_BUFFER_NOT_INCACHE);
804
805 OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
806 }
807
808 /*
809 * Function: OH_NativeWindow_NativeWindowAttachBuffer
810 * Type: Function
811 * Rank: Important(2)
812 * EnvConditions: N/A
813 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
814 * 2. check ret
815 */
816 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer005, TestSize.Level0)
817 {
818 sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
819 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
820 cSurfaceTmp->RegisterConsumerListener(listener);
821 sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
822 sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
823
824 NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
825 ASSERT_NE(nativeWindowTmp, nullptr);
826 SetNativeWindowConfig(nativeWindowTmp);
827
828 NativeWindowBuffer *nativeWindowBuffer = nullptr;
829 int fenceFd = -1;
830 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer, &fenceFd);
831 ASSERT_EQ(ret, GSERROR_OK);
832
833 ASSERT_EQ(cSurface->AttachBufferToQueue(nativeWindowBuffer->sfbuffer), GSERROR_OK);
834
835 ASSERT_EQ(cSurface->DetachBufferFromQueue(nativeWindowBuffer->sfbuffer), GSERROR_OK);
836
837 ASSERT_EQ(cSurface->AttachBufferToQueue(nativeWindowBuffer->sfbuffer), GSERROR_OK);
838
839 sptr<SyncFence> fence = SyncFence::INVALID_FENCE;
840 ASSERT_EQ(cSurface->ReleaseBuffer(nativeWindowBuffer->sfbuffer, fence), GSERROR_OK);
841
842 OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
843 }
844
845 /*
846 * Function: OH_NativeWindow_NativeWindowAttachBuffer
847 * Type: Function
848 * Rank: Important(2)
849 * EnvConditions: N/A
850 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAttachBuffer by normal input
851 * 2. check ret
852 */
853 HWTEST_F(NativeWindowTest, NativeWindowAttachBuffer006, TestSize.Level0)
854 {
855 sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
856 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
857 cSurfaceTmp->RegisterConsumerListener(listener);
858 sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
859 sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
860
861 NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
862 ASSERT_NE(nativeWindowTmp, nullptr);
863 SetNativeWindowConfig(nativeWindowTmp);
864
865 NativeWindowBuffer *nativeWindowBuffer1 = nullptr;
866 int fenceFd = -1;
867 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer1, &fenceFd);
868 ASSERT_EQ(ret, GSERROR_OK);
869
870 int code = GET_BUFFERQUEUE_SIZE;
871 int32_t queueSize = 0;
872 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
873 ASSERT_EQ(queueSize, 3);
874 clock_t startTime, endTime;
875 startTime = clock();
876 for (int32_t i = 0; i < 1000; i++) {
877 ASSERT_EQ(OH_NativeWindow_NativeWindowDetachBuffer(nativeWindowTmp, nativeWindowBuffer1), OHOS::GSERROR_OK);
878 ASSERT_EQ(OH_NativeWindow_NativeWindowAttachBuffer(nativeWindowTmp, nativeWindowBuffer1), OHOS::GSERROR_OK);
879 }
880 endTime = clock();
881 cout << "DetachBuffer and AttachBuffer 1000 times cost time: " << (endTime - startTime) << "ms" << endl;
882 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTmp, code, &queueSize), OHOS::GSERROR_OK);
883 ASSERT_EQ(queueSize, 3);
884 OH_NativeWindow_DestroyNativeWindow(nativeWindowTmp);
885 }
886
887 /*
888 * Function: OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer
889 * Type: Function
890 * Rank: Important(2)
891 * EnvConditions: N/A
892 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer by abnormal input
893 * 2. check ret
894 */
895 HWTEST_F(NativeWindowTest, CreateNativeWindowBuffer001, TestSize.Level0)
896 {
897 ASSERT_EQ(OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(nullptr), nullptr);
898 }
899
900 /*
901 * Function: OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer
902 * Type: Function
903 * Rank: Important(2)
904 * EnvConditions: N/A
905 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer
906 * 2. check ret
907 */
908 HWTEST_F(NativeWindowTest, CreateNativeWindowBuffer002, TestSize.Level0)
909 {
910 nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&sBuffer);
911 ASSERT_NE(nativeWindowBuffer, nullptr);
912 }
913
914 /*
915 * Function: OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer
916 * Type: Function
917 * Rank: Important(2)
918 * EnvConditions: N/A
919 * CaseDescription: 1. call OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer
920 * 2. check ret
921 */
922 HWTEST_F(NativeWindowTest, CreateNativeWindowBuffer003, TestSize.Level0)
923 {
924 OH_NativeBuffer* nativeBuffer = sBuffer->SurfaceBufferToNativeBuffer();
925 ASSERT_NE(nativeBuffer, nullptr);
926 NativeWindowBuffer* nwBuffer = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(nativeBuffer);
927 ASSERT_NE(nwBuffer, nullptr);
928 OH_NativeWindow_DestroyNativeWindowBuffer(nwBuffer);
929 }
930
931 /*
932 * Function: OH_NativeWindow_NativeWindowRequestBuffer
933 * Type: Function
934 * Rank: Important(2)
935 * EnvConditions: N/A
936 * CaseDescription: 1. call OH_NativeWindow_NativeWindowRequestBuffer by abnormal input
937 * 2. check ret
938 */
939 HWTEST_F(NativeWindowTest, RequestBuffer001, TestSize.Level0)
940 {
941 ASSERT_EQ(OH_NativeWindow_NativeWindowRequestBuffer(nullptr, &nativeWindowBuffer, nullptr),
942 OHOS::GSERROR_INVALID_ARGUMENTS);
943 }
944
945 /*
946 * Function: OH_NativeWindow_NativeWindowRequestBuffer
947 * Type: Function
948 * Rank: Important(2)
949 * EnvConditions: N/A
950 * CaseDescription: 1. call OH_NativeWindow_NativeWindowRequestBuffer by abnormal input
951 * 2. check ret
952 */
953 HWTEST_F(NativeWindowTest, RequestBuffer002, TestSize.Level0)
954 {
955 ASSERT_EQ(OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, nullptr, nullptr),
956 OHOS::GSERROR_INVALID_ARGUMENTS);
957 }
958
959 /*
960 * Function: OH_NativeWindow_GetBufferHandleFromNative
961 * Type: Function
962 * Rank: Important(2)
963 * EnvConditions: N/A
964 * CaseDescription: 1. call OH_NativeWindow_GetBufferHandleFromNative by abnormal input
965 * 2. check ret
966 */
967 HWTEST_F(NativeWindowTest, GetBufferHandle001, TestSize.Level0)
968 {
969 ASSERT_EQ(OH_NativeWindow_GetBufferHandleFromNative(nullptr), nullptr);
970 }
971
972 /*
973 * Function: OH_NativeWindow_GetBufferHandleFromNative
974 * Type: Function
975 * Rank: Important(2)
976 * EnvConditions: N/A
977 * CaseDescription: 1. call OH_NativeWindow_GetBufferHandleFromNative
978 * 2. check ret
979 */
980 HWTEST_F(NativeWindowTest, GetBufferHandle002, TestSize.Level0)
981 {
982 struct NativeWindowBuffer *buffer = new NativeWindowBuffer();
983 buffer->sfbuffer = sBuffer;
984 ASSERT_NE(OH_NativeWindow_GetBufferHandleFromNative(nativeWindowBuffer), nullptr);
985 delete buffer;
986 }
987
988 /*
989 * Function: OH_NativeWindow_NativeWindowFlushBuffer
990 * Type: Function
991 * Rank: Important(2)
992 * EnvConditions: N/A
993 * CaseDescription: 1. call OH_NativeWindow_NativeWindowFlushBuffer by abnormal input
994 * 2. check ret
995 */
996 HWTEST_F(NativeWindowTest, FlushBuffer001, TestSize.Level0)
997 {
998 int fenceFd = -1;
999 struct Region *region = new Region();
1000 struct Region::Rect * rect = new Region::Rect();
1001 rect->x = 0x100;
1002 rect->y = 0x100;
1003 rect->w = 0x100;
1004 rect->h = 0x100;
1005 region->rects = rect;
1006
1007 ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nullptr, nullptr, fenceFd, *region),
1008 OHOS::GSERROR_INVALID_ARGUMENTS);
1009 delete region;
1010 }
1011
1012 /*
1013 * Function: OH_NativeWindow_NativeWindowFlushBuffer
1014 * Type: Function
1015 * Rank: Important(2)
1016 * EnvConditions: N/A
1017 * CaseDescription: 1. call OH_NativeWindow_NativeWindowFlushBuffer by abnormal input
1018 * 2. check ret
1019 */
1020 HWTEST_F(NativeWindowTest, FlushBuffer002, TestSize.Level0)
1021 {
1022 int fenceFd = -1;
1023 struct Region *region = new Region();
1024 struct Region::Rect * rect = new Region::Rect();
1025 rect->x = 0x100;
1026 rect->y = 0x100;
1027 rect->w = 0x100;
1028 rect->h = 0x100;
1029 region->rects = rect;
1030
1031 ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nullptr, fenceFd, *region),
1032 OHOS::GSERROR_INVALID_ARGUMENTS);
1033 delete region;
1034 }
1035
1036 /*
1037 * Function: OH_NativeWindow_NativeWindowFlushBuffer
1038 * Type: Function
1039 * Rank: Important(2)
1040 * EnvConditions: N/A
1041 * CaseDescription: 1. call OH_NativeWindow_NativeWindowFlushBuffer
1042 * 2. check ret
1043 */
1044 HWTEST_F(NativeWindowTest, FlushBuffer003, TestSize.Level0)
1045 {
1046 int fenceFd = -1;
1047 struct Region *region = new Region();
1048 region->rectNumber = 0;
1049 region->rects = nullptr;
1050 ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region),
1051 OHOS::GSERROR_OK);
1052
1053 region->rectNumber = 1;
1054 struct Region::Rect * rect = new Region::Rect();
1055 rect->x = 0x100;
1056 rect->y = 0x100;
1057 rect->w = 0x100;
1058 rect->h = 0x100;
1059 region->rects = rect;
1060 ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region),
1061 OHOS::SURFACE_ERROR_BUFFER_STATE_INVALID);
1062 delete rect;
1063 delete region;
1064 }
1065 constexpr int32_t MATRIX_SIZE = 16;
CheckMatricIsSame(float matrixOld[MATRIX_SIZE],float matrixNew[MATRIX_SIZE])1066 bool CheckMatricIsSame(float matrixOld[MATRIX_SIZE], float matrixNew[MATRIX_SIZE])
1067 {
1068 for (int32_t i = 0; i < MATRIX_SIZE; i++) {
1069 if (fabs(matrixOld[i] - matrixNew[i]) > 1e-6) {
1070 return false;
1071 }
1072 }
1073 return true;
1074 }
1075
1076 /*
1077 * Function: OH_NativeWindow_GetLastFlushedBuffer
1078 * Type: Function
1079 * Rank: Important(2)
1080 * EnvConditions: N/A
1081 * CaseDescription: 1. call OH_NativeWindow_NativeWindowRequestBuffer
1082 * 2. call OH_NativeWindow_NativeWindowFlushBuffer
1083 * 3. call OH_NativeWindow_GetLastFlushedBuffer
1084 * 4. check ret
1085 */
1086 HWTEST_F(NativeWindowTest, GetLastFlushedBuffer001, TestSize.Level0)
1087 {
1088 int code = SET_TRANSFORM;
1089 int32_t transform = GraphicTransformType::GRAPHIC_ROTATE_90;
1090 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, transform), OHOS::GSERROR_OK);
1091
1092 code = SET_FORMAT;
1093 int32_t format = GRAPHIC_PIXEL_FMT_RGBA_8888;
1094 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, format), OHOS::GSERROR_OK);
1095
1096 NativeWindowBuffer *nativeWindowBuffer = nullptr;
1097 int fenceFd = -1;
1098 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1099 ASSERT_EQ(ret, GSERROR_OK);
1100
1101 struct Region *region = new Region();
1102 struct Region::Rect *rect = new Region::Rect();
1103 rect->x = 0x100;
1104 rect->y = 0x100;
1105 rect->w = 0x100;
1106 rect->h = 0x100;
1107 region->rects = rect;
1108 BufferHandle *bufferHanlde = OH_NativeWindow_GetBufferHandleFromNative(nativeWindowBuffer);
1109 ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region);
1110 ASSERT_EQ(ret, GSERROR_OK);
1111 NativeWindowBuffer *lastFlushedBuffer;
1112 int lastFlushedFenceFd;
1113 float matrix[16];
1114 ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, &lastFlushedBuffer, nullptr, matrix),
1115 SURFACE_ERROR_INVALID_PARAM);
1116 ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, &lastFlushedBuffer, &lastFlushedFenceFd, matrix),
1117 OHOS::GSERROR_OK);
1118 BufferHandle *lastFlushedHanlde = OH_NativeWindow_GetBufferHandleFromNative(lastFlushedBuffer);
1119 ASSERT_EQ(bufferHanlde->virAddr, lastFlushedHanlde->virAddr);
1120
1121 ASSERT_EQ(OH_NativeWindow_GetLastFlushedBufferV2(nativeWindow, &lastFlushedBuffer, &lastFlushedFenceFd, matrix),
1122 OHOS::GSERROR_OK);
1123 float matrix90[16] = {0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
1124 bool bRet = CheckMatricIsSame(matrix90, matrix);
1125 ASSERT_EQ(bRet, true);
1126 }
1127
1128 /*
1129 * Function: OH_NativeWindow_GetLastFlushedBuffer
1130 * Type: Function
1131 * Rank: Important(2)
1132 * EnvConditions: N/A
1133 * CaseDescription: 1. call NativeWindowHandleOpt set BUFFER_USAGE_PROTECTED
1134 * 2. call OH_NativeWindow_NativeWindowRequestBuffer
1135 * 3. call OH_NativeWindow_NativeWindowFlushBuffer
1136 * 4. call OH_NativeWindow_GetLastFlushedBuffer
1137 * 5. check ret
1138 */
1139 HWTEST_F(NativeWindowTest, GetLastFlushedBuffer002, TestSize.Level0)
1140 {
1141 int code = SET_USAGE;
1142 uint64_t usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_MEM_DMA | BUFFER_USAGE_PROTECTED;
1143 ASSERT_EQ(NativeWindowHandleOpt(nativeWindow, code, usage), OHOS::GSERROR_OK);
1144
1145 NativeWindowBuffer* nativeWindowBuffer = nullptr;
1146 int fenceFd = -1;
1147 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1148 ASSERT_EQ(ret, GSERROR_OK);
1149
1150 struct Region *region = new Region();
1151 struct Region::Rect *rect = new Region::Rect();
1152 rect->x = 0x100;
1153 rect->y = 0x100;
1154 rect->w = 0x100;
1155 rect->h = 0x100;
1156 region->rects = rect;
1157 ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region);
1158 ASSERT_EQ(ret, GSERROR_OK);
1159 NativeWindowBuffer* lastFlushedBuffer;
1160 int lastFlushedFenceFd;
1161 float matrix[16];
1162 ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, &lastFlushedBuffer, &lastFlushedFenceFd, matrix),
1163 OHOS::SURFACE_ERROR_NOT_SUPPORT);
1164 }
1165
1166 /*
1167 * Function: OH_NativeWindow_SetColorSpace
1168 * Type: Function
1169 * Rank: Important(2)
1170 * EnvConditions: N/A
1171 * CaseDescription: 1. call OH_NativeWindow_SetColorSpace
1172 * 2. check ret
1173 */
1174 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetColorSpace001, TestSize.Level0)
1175 {
1176 OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_BT709_LIMIT;
1177 auto ret = OH_NativeWindow_GetColorSpace(nullptr, &colorSpace);
1178 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1179 ASSERT_NE(ret, GSERROR_INTERNAL);
1180 }
1181 }
1182
1183 /*
1184 * Function: OH_NativeWindow_SetColorSpace
1185 * Type: Function
1186 * Rank: Important(2)
1187 * EnvConditions: N/A
1188 * CaseDescription: 1. call OH_NativeWindow_SetColorSpace
1189 * 2. check ret
1190 */
1191 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetColorSpace002, TestSize.Level0)
1192 {
1193 OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_BT709_LIMIT;
1194 auto ret = OH_NativeWindow_SetColorSpace(nativeWindow, colorSpace);
1195 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1196 ASSERT_EQ(ret, GSERROR_OK);
1197 }
1198 }
1199
1200 /*
1201 * Function: OH_NativeWindow_GetColorSpace
1202 * Type: Function
1203 * Rank: Important(2)
1204 * EnvConditions: N/A
1205 * CaseDescription: 1. call OH_NativeWindow_GetColorSpace
1206 * 2. check ret
1207 */
1208 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetColorSpace001, TestSize.Level0)
1209 {
1210 OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE;
1211 auto ret = OH_NativeWindow_GetColorSpace(nativeWindow, &colorSpace);
1212 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1213 ASSERT_EQ(ret, GSERROR_OK);
1214 }
1215 }
1216
1217 /*
1218 * Function: OH_NativeWindow_GetColorSpace
1219 * Type: Function
1220 * Rank: Important(2)
1221 * EnvConditions: N/A
1222 * CaseDescription: 1. call OH_NativeWindow_GetColorSpace
1223 * 2. check ret
1224 */
1225 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetColorSpace002, TestSize.Level0)
1226 {
1227 OH_NativeBuffer_ColorSpace colorSpace = OH_COLORSPACE_NONE;
1228 OH_NativeBuffer_ColorSpace colorSpaceSet = OH_COLORSPACE_BT709_FULL;
1229 auto ret = OH_NativeWindow_SetColorSpace(nativeWindow, colorSpaceSet);
1230 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1231 ASSERT_EQ(ret, GSERROR_OK);
1232 }
1233 ret = OH_NativeWindow_GetColorSpace(nativeWindow, &colorSpace);
1234 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1235 ASSERT_EQ(ret, GSERROR_OK);
1236 ASSERT_EQ(colorSpace, colorSpaceSet);
1237 }
1238 }
1239
1240 /*
1241 * Function: OH_NativeWindow_SetMetadataValue
1242 * Type: Function
1243 * Rank: Important(2)
1244 * EnvConditions: N/A
1245 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1246 * 2. check ret
1247 */
1248 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue001, TestSize.Level0)
1249 {
1250 int len = 60;
1251 uint8_t buff[len];
1252 for (int i = 0; i < 60; ++i) {
1253 buff[i] = static_cast<uint8_t>(i);
1254 }
1255 int32_t buffSize;
1256 uint8_t *checkMetaData;
1257 auto ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, &buffSize, &checkMetaData);
1258 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1259 ASSERT_NE(ret, GSERROR_OK);
1260 }
1261 ret = OH_NativeWindow_SetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1262 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1263 ASSERT_NE(ret, GSERROR_OK);
1264 }
1265 }
1266
1267 /*
1268 * Function: OH_NativeWindow_SetMetadataValue
1269 * Type: Function
1270 * Rank: Important(2)
1271 * EnvConditions: N/A
1272 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1273 * 2. check ret
1274 */
1275 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue002, TestSize.Level0)
1276 {
1277 int len = 60;
1278 uint8_t buff[len];
1279 for (int i = 0; i < 60; ++i) {
1280 buff[i] = static_cast<uint8_t>(i);
1281 }
1282 int32_t max_size = -1;
1283 auto ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)max_size, buff);
1284 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1285 ASSERT_NE(ret, GSERROR_OK);
1286 }
1287 }
1288
1289 /*
1290 * Function: OH_NativeWindow_SetMetadataValue
1291 * Type: Function
1292 * Rank: Important(2)
1293 * EnvConditions: N/A
1294 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1295 * 2. check ret
1296 */
1297 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue003, TestSize.Level0)
1298 {
1299 int len = 60;
1300 uint8_t buff[len];
1301 for (int i = 0; i < 60; ++i) {
1302 buff[i] = static_cast<uint8_t>(i);
1303 }
1304 auto ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1305 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1306 ASSERT_EQ(ret, GSERROR_OK);
1307 }
1308 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1309 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1310 ASSERT_EQ(ret, GSERROR_OK);
1311 }
1312 OH_NativeBuffer_MetadataType type = OH_VIDEO_HDR_HLG;
1313 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type),
1314 reinterpret_cast<uint8_t *>(&type));
1315 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1316 ASSERT_EQ(ret, GSERROR_OK);
1317 }
1318 }
1319
1320 /*
1321 * Function: OH_NativeWindow_SetMetadataValue
1322 * Type: Function
1323 * Rank: Important(2)
1324 * EnvConditions: N/A
1325 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1326 * 2. check ret
1327 */
1328 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue004, TestSize.Level0)
1329 {
1330 int len = 60;
1331 uint8_t buff[len];
1332 for (int i = 0; i < 60; ++i) {
1333 buff[i] = static_cast<uint8_t>(i);
1334 }
1335 auto ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1336 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1337 ASSERT_EQ(ret, GSERROR_OK);
1338 }
1339 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1340 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1341 ASSERT_EQ(ret, GSERROR_OK);
1342 }
1343 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1344 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1345 ASSERT_EQ(ret, GSERROR_OK);
1346 }
1347 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1348 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1349 ASSERT_EQ(ret, GSERROR_OK);
1350 }
1351 OH_NativeBuffer_MetadataType type = OH_VIDEO_HDR_HLG;
1352 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type),
1353 reinterpret_cast<uint8_t *>(&type));
1354 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1355 ASSERT_EQ(ret, GSERROR_OK);
1356 }
1357 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type),
1358 reinterpret_cast<uint8_t *>(&type));
1359 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1360 ASSERT_EQ(ret, GSERROR_OK);
1361 }
1362 }
1363
1364 /*
1365 * Function: OH_NativeWindow_SetMetadataValue
1366 * Type: Function
1367 * Rank: Important(2)
1368 * EnvConditions: N/A
1369 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1370 * 2. check ret
1371 */
1372 HWTEST_F(NativeWindowTest, OH_NativeWindow_SetMetadataValue005, TestSize.Level0)
1373 {
1374 int len = 60;
1375 uint8_t buff[len];
1376 for (int i = 0; i < 60; ++i) {
1377 buff[i] = static_cast<uint8_t>(i);
1378 }
1379 NativeWindowBuffer *nativeWindowbuffer1 = nullptr;
1380 int fenceFd = -1;
1381 auto ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowbuffer1, &fenceFd);
1382 if (ret != GSERROR_HDI_ERROR) {
1383 ASSERT_EQ(ret, GSERROR_OK);
1384 }
1385 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1386 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1387 ASSERT_EQ(ret, GSERROR_OK);
1388 }
1389 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1390 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1391 ASSERT_EQ(ret, GSERROR_OK);
1392 }
1393 OH_NativeBuffer_MetadataType type = OH_VIDEO_HDR_HLG;
1394 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type),
1395 reinterpret_cast<uint8_t *>(&type));
1396 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1397 ASSERT_EQ(ret, GSERROR_OK);
1398 }
1399 }
1400
1401 /*
1402 * Function: OH_NativeWindow_GetMetadataValue
1403 * Type: Function
1404 * Rank: Important(2)
1405 * EnvConditions: N/A
1406 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1407 * 2. check ret
1408 */
1409 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetMetadataValue001, TestSize.Level0)
1410 {
1411 int32_t buffSize;
1412 uint8_t *checkMetaData;
1413 auto ret = OH_NativeWindow_GetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, &buffSize, &checkMetaData);
1414 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1415 ASSERT_NE(ret, GSERROR_OK);
1416 }
1417 }
1418
1419 /*
1420 * Function: OH_NativeWindow_GetMetadataValue
1421 * Type: Function
1422 * Rank: Important(2)
1423 * EnvConditions: N/A
1424 * CaseDescription: 1. call OH_NativeWindow_GetMetadataValue
1425 * 2. check ret
1426 */
1427 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetMetadataValue002, TestSize.Level0)
1428 {
1429 uint8_t *checkMetaData;
1430 auto ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, nullptr, &checkMetaData);
1431 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1432 ASSERT_NE(ret, GSERROR_OK);
1433 }
1434 }
1435
1436 /*
1437 * Function: OH_NativeWindow_SetMetadataValue
1438 * Type: Function
1439 * Rank: Important(2)
1440 * EnvConditions: N/A
1441 * CaseDescription: 1. call OH_NativeWindow_SetMetadataValue
1442 * 2. check ret
1443 */
1444 HWTEST_F(NativeWindowTest, OH_NativeWindow_GetMetadataValue003, TestSize.Level0)
1445 {
1446 int len = 60;
1447 uint8_t buff[len];
1448 for (int i = 0; i < 60; ++i) {
1449 buff[i] = static_cast<uint8_t>(60 - i);
1450 }
1451 int32_t buffSize;
1452 uint8_t *checkMetaData;
1453 auto ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, (int32_t)len, buff);
1454 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1455 ASSERT_EQ(ret, GSERROR_OK);
1456 }
1457 ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_STATIC_METADATA, &buffSize, &checkMetaData);
1458 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1459 ASSERT_EQ(memcmp(checkMetaData, buff, 60), 0);
1460 delete[] checkMetaData;
1461 checkMetaData = nullptr;
1462 ASSERT_EQ(ret, GSERROR_OK);
1463 }
1464 for (int i = 0; i < 60; i++) {
1465 buff[i] = static_cast<uint8_t>(70 - i);
1466 }
1467 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, (int32_t)len, buff);
1468 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1469 ASSERT_EQ(ret, GSERROR_OK);
1470 }
1471 ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_DYNAMIC_METADATA, &buffSize, &checkMetaData);
1472 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1473 ASSERT_EQ(memcmp(checkMetaData, buff, 60), 0);
1474 delete[] checkMetaData;
1475 checkMetaData = nullptr;
1476 ASSERT_EQ(ret, GSERROR_OK);
1477 }
1478 OH_NativeBuffer_MetadataType type = OH_VIDEO_HDR_HDR10;
1479 int32_t typeSize = sizeof(type);
1480 uint8_t pa = static_cast<uint8_t>(type);
1481 ret = OH_NativeWindow_SetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, sizeof(type), &pa);
1482 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set colorspace
1483 ASSERT_EQ(ret, GSERROR_OK);
1484 }
1485 ret = OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, &typeSize, &checkMetaData);
1486 if (ret != GSERROR_NOT_SUPPORT) { // some device not support set metadataValue
1487 ASSERT_EQ(static_cast<uint8_t>(type), checkMetaData[0]);
1488 delete[] checkMetaData;
1489 checkMetaData = nullptr;
1490 ASSERT_EQ(ret, GSERROR_OK);
1491 }
1492 }
1493 /*
1494 * Function: OH_NativeWindow_NativeWindowAbortBuffer
1495 * Type: Function
1496 * Rank: Important(2)
1497 * EnvConditions: N/A
1498 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAbortBuffer by abnormal input
1499 * 2. check ret
1500 */
1501 HWTEST_F(NativeWindowTest, CancelBuffer001, TestSize.Level0)
1502 {
1503 ASSERT_EQ(OH_NativeWindow_NativeWindowAbortBuffer(nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1504 }
1505
1506 /*
1507 * Function: OH_NativeWindow_NativeWindowAbortBuffer
1508 * Type: Function
1509 * Rank: Important(2)
1510 * EnvConditions: N/A
1511 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAbortBuffer by abnormal input
1512 * 2. check ret
1513 */
1514 HWTEST_F(NativeWindowTest, CancelBuffer002, TestSize.Level0)
1515 {
1516 ASSERT_EQ(OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1517 }
1518
1519 /*
1520 * Function: OH_NativeWindow_NativeWindowAbortBuffer
1521 * Type: Function
1522 * Rank: Important(2)
1523 * EnvConditions: N/A
1524 * CaseDescription: 1. call OH_NativeWindow_NativeWindowAbortBuffer
1525 * 2. check ret
1526 */
1527 HWTEST_F(NativeWindowTest, CancelBuffer003, TestSize.Level0)
1528 {
1529 ASSERT_EQ(OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nativeWindowBuffer), OHOS::GSERROR_OK);
1530 }
1531
1532 /*
1533 * Function: OH_NativeWindow_NativeObjectReference
1534 * Type: Function
1535 * Rank: Important(2)
1536 * EnvConditions: N/A
1537 * CaseDescription: 1. call OH_NativeWindow_NativeObjectReference
1538 * 2. check ret
1539 */
1540 HWTEST_F(NativeWindowTest, Reference001, TestSize.Level0)
1541 {
1542 struct NativeWindowBuffer *buffer = new NativeWindowBuffer();
1543 buffer->sfbuffer = sBuffer;
1544 ASSERT_EQ(OH_NativeWindow_NativeObjectReference(reinterpret_cast<void *>(buffer)), OHOS::GSERROR_OK);
1545 delete buffer;
1546 }
1547
1548 /*
1549 * Function: OH_NativeWindow_NativeObjectUnreference
1550 * Type: Function
1551 * Rank: Important(2)
1552 * EnvConditions: N/A
1553 * CaseDescription: 1. call OH_NativeWindow_NativeObjectUnreference
1554 * 2. check ret
1555 */
1556 HWTEST_F(NativeWindowTest, Unreference001, TestSize.Level0)
1557 {
1558 struct NativeWindowBuffer *buffer = new NativeWindowBuffer();
1559 buffer->sfbuffer = sBuffer;
1560 ASSERT_EQ(OH_NativeWindow_NativeObjectUnreference(reinterpret_cast<void *>(buffer)), OHOS::GSERROR_OK);
1561 delete buffer;
1562 }
1563
1564 /*
1565 * Function: OH_NativeWindow_DestroyNativeWindow
1566 * Type: Function
1567 * Rank: Important(2)
1568 * EnvConditions: N/A
1569 * CaseDescription: 1. call OH_NativeWindow_DestroyNativeWindow by abnormal input
1570 * 2. check ret
1571 */
1572 HWTEST_F(NativeWindowTest, DestroyNativeWindow001, TestSize.Level0)
1573 {
1574 OHNativeWindow* window = nullptr;
1575 ASSERT_EQ(window, nullptr);
1576 OH_NativeWindow_DestroyNativeWindow(window);
1577 }
1578
1579 /*
1580 * Function: OH_NativeWindow_DestroyNativeWindowBuffer
1581 * Type: Function
1582 * Rank: Important(2)
1583 * EnvConditions: N/A
1584 * CaseDescription: 1. call OH_NativeWindow_DestroyNativeWindowBuffer by abnormal input
1585 * 2. check ret
1586 */
1587 HWTEST_F(NativeWindowTest, OH_NativeWindow_DestroyNativeWindowBuffer001, TestSize.Level0)
1588 {
1589 OHNativeWindowBuffer* buffer = nullptr;
1590 ASSERT_EQ(buffer, nullptr);
1591 OH_NativeWindow_DestroyNativeWindowBuffer(buffer);
1592 }
1593
1594 /*
1595 * Function: OH_NativeWindow_NativeWindowSetScalingMode
1596 * Type: Function
1597 * Rank: Important(2)
1598 * EnvConditions: N/A
1599 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingMode with abnormal parameters and check ret
1600 */
1601 HWTEST_F(NativeWindowTest, SetScalingMode001, TestSize.Level0)
1602 {
1603 OHScalingMode scalingMode = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
1604 ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nullptr, -1, scalingMode), OHOS::GSERROR_INVALID_ARGUMENTS);
1605 }
1606
1607 /*
1608 * Function: OH_NativeWindow_NativeWindowSetScalingMode
1609 * Type: Function
1610 * Rank: Important(2)
1611 * EnvConditions: N/A
1612 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingMode with abnormal parameters and check ret
1613 */
1614 HWTEST_F(NativeWindowTest, SetScalingMode002, TestSize.Level0)
1615 {
1616 OHScalingMode scalingMode = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
1617 ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nativeWindow, -1, scalingMode), OHOS::GSERROR_NO_ENTRY);
1618 }
1619
1620 /*
1621 * Function: OH_NativeWindow_NativeWindowSetScalingMode
1622 * Type: Function
1623 * Rank: Important(2)
1624 * EnvConditions: N/A
1625 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingMode with abnormal parameters and check ret
1626 */
1627 HWTEST_F(NativeWindowTest, SetScalingMode003, TestSize.Level0)
1628 {
1629 ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nativeWindow, firstSeqnum,
1630 static_cast<OHScalingMode>(OHScalingMode::OH_SCALING_MODE_NO_SCALE_CROP + 1)),
1631 OHOS::GSERROR_INVALID_ARGUMENTS);
1632 }
1633
1634 /*
1635 * Function: OH_NativeWindow_NativeWindowSetScalingMode
1636 * Type: Function
1637 * Rank: Important(1)
1638 * EnvConditions: N/A
1639 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingMode with abnormal parameters and check ret
1640 * 2. call OH_NativeWindow_NativeWindowSetScalingMode with normal parameters and check ret
1641 */
1642 HWTEST_F(NativeWindowTest, SetScalingMode004, TestSize.Level0)
1643 {
1644 OHScalingMode scalingMode = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
1645 ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nativeWindow, firstSeqnum, scalingMode), OHOS::GSERROR_OK);
1646 }
1647
1648 /*
1649 * Function: OH_NativeWindow_NativeWindowSetScalingModeV2
1650 * Type: Function
1651 * Rank: Important(1)
1652 * EnvConditions: N/A
1653 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetScalingModeV2 with abnormal parameters and check ret
1654 * 2. call OH_NativeWindow_NativeWindowSetScalingModeV2 with normal parameters and check ret
1655 */
1656 HWTEST_F(NativeWindowTest, SetScalingMode005, TestSize.Level0)
1657 {
1658 OHScalingModeV2 scalingMode = OHScalingModeV2::OH_SCALING_MODE_SCALE_TO_WINDOW_V2;
1659 ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingModeV2(nativeWindow, scalingMode), OHOS::GSERROR_OK);
1660 }
1661
1662
1663 /*
1664 * Function: OH_NativeWindow_NativeWindowSetMetaData
1665 * Type: Function
1666 * Rank: Important(2)
1667 * EnvConditions: N/A
1668 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1669 */
1670 HWTEST_F(NativeWindowTest, SetMetaData001, TestSize.Level0)
1671 {
1672 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nullptr, -1, 0, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1673 }
1674
1675 /*
1676 * Function: OH_NativeWindow_NativeWindowSetMetaData
1677 * Type: Function
1678 * Rank: Important(2)
1679 * EnvConditions: N/A
1680 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1681 */
1682 HWTEST_F(NativeWindowTest, SetMetaData002, TestSize.Level0)
1683 {
1684 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, -1, 0, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1685 }
1686
1687 /*
1688 * Function: OH_NativeWindow_NativeWindowSetMetaData
1689 * Type: Function
1690 * Rank: Important(2)
1691 * EnvConditions: N/A
1692 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1693 * 2. call OH_NativeWindow_NativeWindowSetMetaData with normal parameters and check ret
1694 */
1695 HWTEST_F(NativeWindowTest, SetMetaData003, TestSize.Level0)
1696 {
1697 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, firstSeqnum, 0, nullptr),
1698 OHOS::GSERROR_INVALID_ARGUMENTS);
1699 }
1700
1701 /*
1702 * Function: OH_NativeWindow_NativeWindowSetMetaData
1703 * Type: Function
1704 * Rank: Important(2)
1705 * EnvConditions: N/A
1706 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1707 */
1708 HWTEST_F(NativeWindowTest, SetMetaData004, TestSize.Level0)
1709 {
1710 int32_t size = 1;
1711 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, firstSeqnum, size, nullptr),
1712 OHOS::GSERROR_INVALID_ARGUMENTS);
1713 }
1714
1715 /*
1716 * Function: OH_NativeWindow_NativeWindowSetMetaData
1717 * Type: Function
1718 * Rank: Important(2)
1719 * EnvConditions: N/A
1720 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with abnormal parameters and check ret
1721 */
1722 HWTEST_F(NativeWindowTest, SetMetaData005, TestSize.Level0)
1723 {
1724 int32_t size = 1;
1725 const OHHDRMetaData metaData[] = {{OH_METAKEY_RED_PRIMARY_X, 0}};
1726 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, -1, size, metaData), OHOS::GSERROR_NO_ENTRY);
1727 }
1728
1729 /*
1730 * Function: OH_NativeWindow_NativeWindowSetMetaData
1731 * Type: Function
1732 * Rank: Important(1)
1733 * EnvConditions: N/A
1734 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaData with normal parameters and check ret
1735 */
1736 HWTEST_F(NativeWindowTest, SetMetaData006, TestSize.Level0)
1737 {
1738 int32_t size = 1;
1739 const OHHDRMetaData metaData[] = {{OH_METAKEY_RED_PRIMARY_X, 0}};
1740 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaData(nativeWindow, firstSeqnum, size, metaData), OHOS::GSERROR_OK);
1741 }
1742
1743 /*
1744 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1745 * Type: Function
1746 * Rank: Important(2)
1747 * EnvConditions: N/A
1748 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1749 */
1750 HWTEST_F(NativeWindowTest, SetMetaDataSet001, TestSize.Level0)
1751 {
1752 OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1753 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nullptr, -1, key, 0, nullptr),
1754 OHOS::GSERROR_INVALID_ARGUMENTS);
1755 }
1756
1757 /*
1758 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1759 * Type: Function
1760 * Rank: Important(2)
1761 * EnvConditions: N/A
1762 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1763 */
1764 HWTEST_F(NativeWindowTest, SetMetaDataSet002, TestSize.Level0)
1765 {
1766 OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1767 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, -1, key, 0, nullptr),
1768 OHOS::GSERROR_INVALID_ARGUMENTS);
1769 }
1770
1771 /*
1772 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1773 * Type: Function
1774 * Rank: Important(2)
1775 * EnvConditions: N/A
1776 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1777 */
1778 HWTEST_F(NativeWindowTest, SetMetaDataSet003, TestSize.Level0)
1779 {
1780 OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1781 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, firstSeqnum, key, 0, nullptr),
1782 OHOS::GSERROR_INVALID_ARGUMENTS);
1783 }
1784
1785 /*
1786 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1787 * Type: Function
1788 * Rank: Important(2)
1789 * EnvConditions: N/A
1790 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1791 */
1792 HWTEST_F(NativeWindowTest, SetMetaDataSet004, TestSize.Level0)
1793 {
1794 int32_t size = 1;
1795 OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1796 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, firstSeqnum, key, size, nullptr),
1797 OHOS::GSERROR_INVALID_ARGUMENTS);
1798 }
1799
1800 /*
1801 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1802 * Type: Function
1803 * Rank: Important(2)
1804 * EnvConditions: N/A
1805 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with abnormal parameters and check ret
1806 */
1807 HWTEST_F(NativeWindowTest, SetMetaDataSet005, TestSize.Level0)
1808 {
1809 int32_t size = 1;
1810 OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1811 const uint8_t metaData[] = {0};
1812 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, -1, key, size, metaData),
1813 OHOS::GSERROR_NO_ENTRY);
1814 }
1815
1816 /*
1817 * Function: OH_NativeWindow_NativeWindowSetMetaDataSet
1818 * Type: Function
1819 * Rank: Important(1)
1820 * EnvConditions: N/A
1821 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetMetaDataSet with normal parameters and check ret
1822 */
1823 HWTEST_F(NativeWindowTest, SetMetaDataSet006, TestSize.Level0)
1824 {
1825 int32_t size = 1;
1826 OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
1827 const uint8_t metaData[] = {0};
1828 ASSERT_EQ(OH_NativeWindow_NativeWindowSetMetaDataSet(nativeWindow, firstSeqnum, key, size, metaData),
1829 OHOS::GSERROR_OK);
1830 }
1831
1832 /*
1833 * Function: OH_NativeWindow_NativeWindowSetTunnelHandle
1834 * Type: Function
1835 * Rank: Important(2)
1836 * EnvConditions: N/A
1837 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetTunnelHandle with abnormal parameters and check ret
1838 */
1839 HWTEST_F(NativeWindowTest, SetTunnelHandle001, TestSize.Level0)
1840 {
1841 ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1842 }
1843
1844 /*
1845 * Function: OH_NativeWindow_NativeWindowSetTunnelHandle
1846 * Type: Function
1847 * Rank: Important(2)
1848 * EnvConditions: N/A
1849 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetTunnelHandle with abnormal parameters and check ret
1850 */
1851 HWTEST_F(NativeWindowTest, SetTunnelHandle002, TestSize.Level0)
1852 {
1853 ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nativeWindow, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1854 }
1855
1856 /*
1857 * Function: OH_NativeWindow_NativeWindowSetTunnelHandle
1858 * Type: Function
1859 * Rank: Important(2)
1860 * EnvConditions: N/A
1861 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetTunnelHandle with normal parameters and check ret
1862 */
1863 HWTEST_F(NativeWindowTest, SetTunnelHandle003, TestSize.Level0)
1864 {
1865 uint32_t reserveInts = 1;
1866 OHExtDataHandle *handle = AllocOHExtDataHandle(reserveInts);
1867 ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nativeWindow, handle), OHOS::GSERROR_OK);
1868 FreeOHExtDataHandle(handle);
1869 }
1870
1871 /*
1872 * Function: OH_NativeWindow_NativeWindowSetTunnelHandle
1873 * Type: Function
1874 * Rank: Important(1)
1875 * EnvConditions: N/A
1876 * CaseDescription: 1. call OH_NativeWindow_NativeWindowSetTunnelHandle with normal parameters and check ret
1877 * @tc.require: issueI5GMZN issueI5IWHW
1878 */
1879 HWTEST_F(NativeWindowTest, SetTunnelHandle004, TestSize.Level0)
1880 {
1881 uint32_t reserveInts = 2;
1882 OHExtDataHandle *handle = AllocOHExtDataHandle(reserveInts);
1883 nativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurface);
1884 ASSERT_NE(nativeWindow, nullptr);
1885 ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nativeWindow, handle), OHOS::GSERROR_OK);
1886 ASSERT_EQ(OH_NativeWindow_NativeWindowSetTunnelHandle(nativeWindow, handle), OHOS::GSERROR_NO_ENTRY);
1887 FreeOHExtDataHandle(handle);
1888 }
1889
1890 /*
1891 * Function: NativeWindowGetTransformHint
1892 * Type: Function
1893 * Rank: Important(1)
1894 * EnvConditions: N/A
1895 * CaseDescription: 1. call NativeWindowGetTransformHint with normal parameters and check ret
1896 * @tc.require: issueI5GMZN issueI5IWHW
1897 */
1898 HWTEST_F(NativeWindowTest, NativeWindowGetTransformHint001, TestSize.Level0)
1899 {
1900 OH_NativeBuffer_TransformType transform = OH_NativeBuffer_TransformType::NATIVEBUFFER_ROTATE_180;
1901 ASSERT_EQ(NativeWindowGetTransformHint(nullptr, &transform), OHOS::GSERROR_INVALID_ARGUMENTS);
1902 ASSERT_EQ(NativeWindowSetTransformHint(nullptr, transform), OHOS::GSERROR_INVALID_ARGUMENTS);
1903 ASSERT_EQ(NativeWindowSetTransformHint(nativeWindow, transform), OHOS::GSERROR_OK);
1904 transform = OH_NativeBuffer_TransformType::NATIVEBUFFER_ROTATE_NONE;
1905 ASSERT_EQ(NativeWindowGetTransformHint(nativeWindow, &transform), OHOS::GSERROR_OK);
1906 ASSERT_EQ(transform, OH_NativeBuffer_TransformType::NATIVEBUFFER_ROTATE_180);
1907 }
1908
1909 /*
1910 * Function: NativeWindowGetDefaultWidthAndHeight
1911 * Type: Function
1912 * Rank: Important(1)
1913 * EnvConditions: N/A
1914 * CaseDescription: 1. call NativeWindowGetDefaultWidthAndHeight with normal parameters and check ret
1915 * @tc.require: issueI5GMZN issueI5IWHW
1916 */
1917 HWTEST_F(NativeWindowTest, NativeWindowGetDefaultWidthAndHeight001, TestSize.Level0)
1918 {
1919 ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nullptr, nullptr, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
1920 cSurface->SetDefaultWidthAndHeight(300, 400);
1921 int32_t width;
1922 int32_t height;
1923 ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nativeWindow, &width, &height), OHOS::GSERROR_OK);
1924 ASSERT_EQ(width, 300);
1925 ASSERT_EQ(height, 400);
1926 }
1927
1928 /*
1929 * Function: NativeWindowSetBufferHold
1930 * Type: Function
1931 * Rank: Important(1)
1932 * EnvConditions: N/A
1933 * CaseDescription: 1. call NativeWindowSetBufferHold and no ret
1934 * @tc.require: issueI5GMZN issueI5IWHW
1935 */
1936 HWTEST_F(NativeWindowTest, NativeWindowSetBufferHold001, TestSize.Level0)
1937 {
1938 NativeWindowSetBufferHold(nullptr);
1939 NativeWindowSetBufferHold(nativeWindow);
1940 int fenceFd = -1;
1941 struct Region *region = new Region();
1942 region->rectNumber = 0;
1943 region->rects = nullptr;
1944 ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region),
1945 OHOS::GSERROR_BUFFER_STATE_INVALID);
1946 region->rectNumber = 1;
1947 struct Region::Rect * rect = new Region::Rect();
1948 rect->x = 0x100;
1949 rect->y = 0x100;
1950 rect->w = 0x100;
1951 rect->h = 0x100;
1952 region->rects = rect;
1953 ASSERT_EQ(OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, *region),
1954 OHOS::GSERROR_BUFFER_STATE_INVALID);
1955 cSurface->SetBufferHold(false);
1956 delete rect;
1957 delete region;
1958 }
1959
1960 /*
1961 * Function: NativeWindow_ReadWriteWindow
1962 * Type: Function
1963 * Rank: Important(1)
1964 * EnvConditions: N/A
1965 * CaseDescription: 1. call OH_NativeWindow_WriteToParcel and OH_NativeWindow_ReadFromParcel
1966 * @tc.require: issueI5GMZN issueI5IWHW
1967 */
1968 HWTEST_F(NativeWindowTest, NativeWindowReadWriteWindow001, TestSize.Level0)
1969 {
1970 using namespace OHOS;
1971 sptr<OHOS::IConsumerSurface> cSurface = IConsumerSurface::Create();
1972 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
1973 cSurface->RegisterConsumerListener(listener);
1974 sptr<OHOS::IBufferProducer> producer = cSurface->GetProducer();
1975 sptr<OHOS::Surface> pSurface = Surface::CreateSurfaceAsProducer(producer);
1976 OHNativeWindow* nativeWindow = CreateNativeWindowFromSurface(&pSurface);
1977 auto uniqueId = nativeWindow->surface->GetUniqueId();
1978 ASSERT_NE(nativeWindow, nullptr);
1979 OHIPCParcel *parcel1 = OH_IPCParcel_Create();
1980 OHIPCParcel *parcel2 = OH_IPCParcel_Create();
1981 ASSERT_NE(parcel1, nullptr);
1982 ASSERT_NE(parcel2, nullptr);
1983 ASSERT_EQ(OH_NativeWindow_WriteToParcel(nullptr, parcel1), SURFACE_ERROR_INVALID_PARAM);
1984 ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow, nullptr), SURFACE_ERROR_INVALID_PARAM);
1985 auto innerParcel = parcel1->msgParcel;
1986 parcel1->msgParcel = nullptr;
1987 ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow, parcel1), SURFACE_ERROR_INVALID_PARAM);
1988 parcel1->msgParcel = innerParcel;
1989 ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow, parcel1), GSERROR_OK);
1990 ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow, parcel2), GSERROR_OK);
1991 // test read
1992 OHNativeWindow *readWindow = nullptr;
1993 ASSERT_EQ(OH_NativeWindow_ReadFromParcel(nullptr, &readWindow), SURFACE_ERROR_INVALID_PARAM);
1994 ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel1, &readWindow), GSERROR_OK);
1995 ASSERT_NE(readWindow, nullptr);
1996 // test read twice
1997 OHNativeWindow *tempWindow = nullptr;
1998 ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel1, &tempWindow), SURFACE_ERROR_INVALID_PARAM);
1999 cout << "test read write window, write window is " << nativeWindow << ", read windows is " << readWindow << endl;
2000 auto readId = readWindow->surface->GetUniqueId();
2001 ASSERT_EQ(uniqueId, readId);
2002 OHNativeWindow *readWindow1 = nullptr;
2003 SurfaceUtils::GetInstance()->RemoveNativeWindow(uniqueId);
2004 ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel2, &readWindow1), GSERROR_OK);
2005 ASSERT_NE(readWindow1, nativeWindow);
2006 auto readId1 = readWindow1->surface->GetUniqueId();
2007 ASSERT_EQ(uniqueId, readId1);
2008 cout << "write uniqueId is " << uniqueId << ", parcel1 read id is " << readId <<
2009 ", parcel2 read id is " << readId1 << endl;
2010 OH_NativeWindow_DestroyNativeWindow(readWindow1);
2011 OH_NativeWindow_DestroyNativeWindow(nativeWindow);
2012 OH_IPCParcel_Destroy(parcel1);
2013 OH_IPCParcel_Destroy(parcel2);
2014 }
2015
2016 /*
2017 * Function: NativeWindow_ReadWriteWindow
2018 * Type: Function
2019 * Rank: Important(1)
2020 * EnvConditions: N/A
2021 * CaseDescription: 1. call OH_NativeWindow_WriteToParcel and OH_NativeWindow_ReadFromParcel
2022 * @tc.require: issueI5GMZN issueI5IWHW
2023 */
2024 HWTEST_F(NativeWindowTest, NativeWindowReadWriteWindow002, TestSize.Level0)
2025 {
2026 using namespace OHOS;
2027 // test for no surface->GetUniqueId
2028 OHNativeWindow* nativeWindow1 = new OHNativeWindow();
2029 ASSERT_NE(nativeWindow1, nullptr);
2030 OHIPCParcel *parcel1 = OH_IPCParcel_Create();
2031 ASSERT_NE(parcel1, nullptr);
2032 ASSERT_EQ(OH_NativeWindow_WriteToParcel(nativeWindow1, parcel1), SURFACE_ERROR_INVALID_PARAM);
2033 OHNativeWindow *readWindow = nullptr;
2034 ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel1, nullptr), SURFACE_ERROR_INVALID_PARAM);
2035 ASSERT_EQ(OH_NativeWindow_ReadFromParcel(parcel1, &readWindow), SURFACE_ERROR_INVALID_PARAM);
2036 OH_IPCParcel_Destroy(parcel1);
2037 delete nativeWindow1;
2038 }
2039
2040 /*
2041 * Function: SurfaceErrorInvalidParameter
2042 * Type: Function
2043 * Rank: Important(2)
2044 * EnvConditions: N/A
2045 * CaseDescription: 1. call functions with invalid parameters and check ret
2046 */
2047 HWTEST_F(NativeWindowTest, SurfaceErrorInvalidParameter001, TestSize.Level0)
2048 {
2049 int fence = -1;
2050 ASSERT_EQ(OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(nullptr), nullptr);
2051 ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nullptr, nullptr, &fence, nullptr), SURFACE_ERROR_INVALID_PARAM);
2052 ASSERT_EQ(OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, nullptr, &fence, nullptr),
2053 SURFACE_ERROR_INVALID_PARAM);
2054 ASSERT_EQ(GetNativeObjectMagic(nullptr), -1);
2055 ASSERT_EQ(GetSurfaceId(nativeWindow, nullptr), SURFACE_ERROR_INVALID_PARAM);
2056 ASSERT_EQ(NativeWindowGetTransformHint(nativeWindow, nullptr), SURFACE_ERROR_INVALID_PARAM);
2057 ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nativeWindow, nullptr, nullptr), SURFACE_ERROR_INVALID_PARAM);
2058 int32_t width;
2059 ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nativeWindow, &width, nullptr), SURFACE_ERROR_INVALID_PARAM);
2060 ASSERT_EQ(OH_NativeWindow_GetLastFlushedBufferV2(nullptr, nullptr, &fence, nullptr), SURFACE_ERROR_INVALID_PARAM);
2061 ASSERT_EQ(OH_NativeWindow_GetLastFlushedBufferV2(nativeWindow, nullptr, &fence, nullptr),
2062 SURFACE_ERROR_INVALID_PARAM);
2063 ASSERT_EQ(OH_NativeWindow_GetLastFlushedBufferV2(nativeWindow, nullptr, nullptr, nullptr),
2064 SURFACE_ERROR_INVALID_PARAM);
2065 ASSERT_EQ(NativeWindowDisconnect(nullptr), SURFACE_ERROR_INVALID_PARAM);
2066 ASSERT_EQ(OH_NativeWindow_SetColorSpace(nullptr, OH_COLORSPACE_NONE), SURFACE_ERROR_INVALID_PARAM);
2067 ASSERT_EQ(OH_NativeWindow_GetColorSpace(nullptr, nullptr), SURFACE_ERROR_INVALID_PARAM);
2068 ASSERT_EQ(OH_NativeWindow_GetColorSpace(nativeWindow, nullptr), SURFACE_ERROR_INVALID_PARAM);
2069 ASSERT_EQ(OH_NativeWindow_GetMetadataValue(nullptr, OH_HDR_METADATA_TYPE, nullptr, nullptr),
2070 SURFACE_ERROR_INVALID_PARAM);
2071 ASSERT_EQ(OH_NativeWindow_GetMetadataValue(nativeWindow, OH_HDR_METADATA_TYPE, nullptr, nullptr),
2072 SURFACE_ERROR_INVALID_PARAM);
2073 }
2074
2075 /*
2076 * Function: SurfaceErrorInvalidParameter
2077 * Type: Function
2078 * Rank: Important(2)
2079 * EnvConditions: N/A
2080 * CaseDescription: 1. call functions with invalid parameters and check ret
2081 */
2082 HWTEST_F(NativeWindowTest, SurfaceErrorInvalidParameter002, TestSize.Level0)
2083 {
2084 OHNativeWindow *nativeWindowTemp = new OHNativeWindow();
2085 NativeWindowBuffer *nativeWindowBuffer1;
2086 Region region;
2087 int32_t height;
2088 int32_t width;
2089 int fence = -1;
2090 ASSERT_EQ(OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer1, nullptr),
2091 SURFACE_ERROR_INVALID_PARAM);
2092 ASSERT_EQ(NativeWindowFlushBuffer(nativeWindowTemp, nativeWindowBuffer, fence, region),
2093 SURFACE_ERROR_INVALID_PARAM);
2094 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindowTemp, 0), OHOS::GSERROR_INVALID_ARGUMENTS);
2095 OHScalingMode scalingMode1 = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
2096 OHScalingModeV2 scalingMode2 = OHScalingModeV2::OH_SCALING_MODE_SCALE_TO_WINDOW_V2;
2097 ASSERT_EQ(OH_NativeWindow_NativeWindowSetScalingMode(nativeWindowTemp, firstSeqnum, scalingMode1),
2098 OHOS::GSERROR_INVALID_ARGUMENTS);
2099 ASSERT_EQ(NativeWindowSetScalingModeV2(nativeWindowTemp, scalingMode2), OHOS::GSERROR_INVALID_ARGUMENTS);
2100 ASSERT_EQ(NativeWindowSetScalingModeV2(nullptr, scalingMode2), OHOS::GSERROR_INVALID_ARGUMENTS);
2101 ASSERT_EQ(NativeWindowSetMetaData(nativeWindowTemp, 0, 0, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
2102 OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
2103 ASSERT_EQ(NativeWindowSetMetaDataSet(nativeWindowTemp, 0, key, 0, nullptr), OHOS::GSERROR_INVALID_ARGUMENTS);
2104 OHExtDataHandle *handle = AllocOHExtDataHandle(1);
2105 ASSERT_EQ(NativeWindowSetTunnelHandle(nativeWindowTemp, handle), OHOS::GSERROR_INVALID_ARGUMENTS);
2106 OH_NativeBuffer_TransformType transform = OH_NativeBuffer_TransformType::NATIVEBUFFER_ROTATE_180;
2107 ASSERT_EQ(NativeWindowGetTransformHint(nativeWindowTemp, &transform), OHOS::GSERROR_INVALID_ARGUMENTS);
2108 ASSERT_EQ(NativeWindowSetTransformHint(nativeWindowTemp, transform), OHOS::GSERROR_INVALID_ARGUMENTS);
2109 ASSERT_EQ(NativeWindowGetDefaultWidthAndHeight(nativeWindowTemp, &width, &height), OHOS::GSERROR_INVALID_ARGUMENTS);
2110 NativeWindowSetBufferHold(nativeWindowTemp);
2111 }
2112
2113 /*
2114 * Function: NativeWindowSetRequestWidthAndHeight
2115 * Type: Function
2116 * Rank: Important(2)
2117 * EnvConditions: N/A
2118 * CaseDescription: 1. call NativeWindowSetRequestWidthAndHeight with invalid parameters and check ret
2119 * 2. call NativeWindowSetRequestWidthAndHeight with normal parameters and check ret
2120 * 3. call NativeWindowSetRequestWidthAndHeight with zore width and check ret
2121 * 3. call NativeWindowSetRequestWidthAndHeight with zore height and check ret
2122 */
2123 HWTEST_F(NativeWindowTest, NativeWindowSetRequestWidthAndHeight001, TestSize.Level0)
2124 {
2125 int fence = -1;
2126 ASSERT_EQ(NativeWindowSetRequestWidthAndHeight(nullptr, 0, 0), SURFACE_ERROR_INVALID_PARAM);
2127 cSurface->SetDefaultWidthAndHeight(300, 400);
2128 //分支1:走使用requestWidth/Height新建config分支
2129 ASSERT_EQ(NativeWindowSetRequestWidthAndHeight(nativeWindow, 100, 200), OHOS::GSERROR_OK);
2130 NativeWindowBuffer *nativeWindowBuffer1 = nullptr;
2131 auto ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer1, &fence);
2132 if (ret != GSERROR_HDI_ERROR) {
2133 ASSERT_EQ(ret, GSERROR_OK);
2134 ASSERT_EQ(nativeWindowBuffer1->sfbuffer->GetWidth(), 100);
2135 ASSERT_EQ(nativeWindowBuffer1->sfbuffer->GetHeight(), 200);
2136 ASSERT_EQ(NativeWindowCancelBuffer(nativeWindow, nativeWindowBuffer1), GSERROR_OK);
2137 }
2138 //分支2:使用surface成员变量windowConfig_(未初始化)
2139 ASSERT_EQ(NativeWindowSetRequestWidthAndHeight(nativeWindow, 0, 200), OHOS::GSERROR_OK);
2140 ASSERT_NE(OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer1, &fence),
2141 OHOS::GSERROR_OK);
2142 ASSERT_EQ(NativeWindowSetRequestWidthAndHeight(nativeWindow, 100, 0), OHOS::GSERROR_OK);
2143 ASSERT_NE(OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer1, &fence),
2144 OHOS::GSERROR_OK);
2145 }
2146
2147 /*
2148 * Function: OH_NativeWindow_DestroyNativeWindowBuffer
2149 * Type: Function
2150 * Rank: Important(2)
2151 * EnvConditions: N/A
2152 * CaseDescription: 1. call OH_NativeWindow_DestroyNativeWindowBuffer again
2153 * 2. check ret
2154 */
2155 HWTEST_F(NativeWindowTest, OH_NativeWindow_DestroyNativeWindowBuffer002, TestSize.Level0)
2156 {
2157 ASSERT_NE(nativeWindowBuffer, nullptr);
2158 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
2159 }
2160
2161 /*
2162 * Function: NativeWindowSetUsageAndFormat
2163 * Type: Function
2164 * Rank: Important(2)
2165 * EnvConditions: N/A
2166 * CaseDescription: 1. preSet: call SET_USAGE with NATIVEBUFFER_USAGE_MEM_MMZ_CACHE and SET_FORMAT with
2167 * NATIVEBUFFER_PIXEL_FMT_Y8 and NATIVEBUFFER_PIXEL_FMT_Y16.
2168 * 2. operation: request buffer and alloc buffer
2169 * 3. result: request buffer and alloc buffer success
2170 */
2171 HWTEST_F(NativeWindowTest, NativeWindowSetUsageAndFormat, TestSize.Level0)
2172 {
2173 sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
2174 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
2175 cSurfaceTmp->RegisterConsumerListener(listener);
2176 sptr<OHOS::IBufferProducer> producerTmp = cSurfaceTmp->GetProducer();
2177 sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
2178
2179 NativeWindow *nativeWindowTmp = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
2180 ASSERT_NE(nativeWindowTmp, nullptr);
2181 SetNativeWindowConfig(nativeWindowTmp);
2182
2183 int code = SET_USAGE;
2184 uint64_t usageSet = NATIVEBUFFER_USAGE_MEM_MMZ_CACHE;
2185 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usageSet), OHOS::GSERROR_OK);
2186 ASSERT_EQ(usageSet, BUFFER_USAGE_MEM_MMZ_CACHE);
2187
2188 code = SET_FORMAT;
2189 int32_t formatSet = NATIVEBUFFER_PIXEL_FMT_Y8;
2190 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
2191 ASSERT_EQ(formatSet, GRAPHIC_PIXEL_FMT_Y8);
2192
2193 NativeWindowBuffer *nativeWindowBuffer1 = nullptr;
2194 int fenceFd = -1;
2195 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer1, &fenceFd);
2196 ASSERT_EQ(ret, GSERROR_OK);
2197 ASSERT_NE(nativeWindowBuffer1, nullptr);
2198
2199 code = SET_FORMAT;
2200 formatSet = NATIVEBUFFER_PIXEL_FMT_Y16;
2201 ASSERT_EQ(OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, formatSet), OHOS::GSERROR_OK);
2202 ASSERT_EQ(formatSet, GRAPHIC_PIXEL_FMT_Y16);
2203
2204 NativeWindowBuffer *nativeWindowBuffer2 = nullptr;
2205 ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindowTmp, &nativeWindowBuffer2, &fenceFd);
2206 ASSERT_EQ(ret, GSERROR_OK);
2207 ASSERT_NE(nativeWindowBuffer2, nullptr);
2208 }
2209
2210 /*
2211 * Function: GetNativeObjectMagic
2212 * Type: Function
2213 * Rank: Important(2)
2214 * EnvConditions: N/A
2215 * CaseDescription: 1. call Func With Invalid NativeWindow
2216 * 2. check ret
2217 */
2218 HWTEST_F(NativeWindowTest, InvalidNativewindow001, TestSize.Level0)
2219 {
2220 sptr<OHOS::IConsumerSurface> cSurfaceTestInvalid = IConsumerSurface::Create();
2221 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
2222 cSurfaceTestInvalid->RegisterConsumerListener(listener);
2223 sptr<OHOS::IBufferProducer> producerTestInvalid = cSurfaceTestInvalid->GetProducer();
2224 sptr<OHOS::Surface> pSurfaceTestInvalid = Surface::CreateSurfaceAsProducer(producerTestInvalid);
2225 NativeWindow* InvalidNativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurfaceTestInvalid);
2226 const char src[sizeof(NativeWindow)] = "TestInvalidNativeWindow";
2227 memcpy_s((void*)InvalidNativeWindow, sizeof(NativeWindow), src, strlen(src) + 1);
2228
2229 NativeWindowBuffer *nativeWindowBuffer = nullptr;
2230 int fenceFd = -1;
2231 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(InvalidNativeWindow, &nativeWindowBuffer, &fenceFd);
2232 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2233
2234 struct Region *region = new Region();
2235 struct NativeWindowBuffer *buffer = new NativeWindowBuffer();
2236 ret = OH_NativeWindow_NativeWindowFlushBuffer(InvalidNativeWindow, buffer, fenceFd, *region);
2237 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2238
2239 float matrix[16];
2240 ret = OH_NativeWindow_GetLastFlushedBuffer(InvalidNativeWindow, &nativeWindowBuffer, &fenceFd, matrix);
2241 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2242
2243 ret = OH_NativeWindow_NativeWindowAttachBuffer(InvalidNativeWindow, buffer);
2244 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2245
2246 ret = OH_NativeWindow_NativeWindowDetachBuffer(InvalidNativeWindow, buffer);
2247 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2248
2249 ret = OH_NativeWindow_NativeWindowAbortBuffer(InvalidNativeWindow, buffer);
2250 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2251
2252 int code = SET_USAGE;
2253 uint64_t usageSet = BUFFER_USAGE_CPU_READ;
2254 ret = OH_NativeWindow_NativeWindowHandleOpt(InvalidNativeWindow, code, usageSet);
2255 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2256
2257 OHScalingMode scalingMode = OHScalingMode::OH_SCALING_MODE_SCALE_TO_WINDOW;
2258 ret = OH_NativeWindow_NativeWindowSetScalingMode(InvalidNativeWindow, -1, scalingMode);
2259 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2260
2261 OHScalingModeV2 scalingModev2 = OHScalingModeV2::OH_SCALING_MODE_SCALE_TO_WINDOW_V2;
2262 ret = OH_NativeWindow_NativeWindowSetScalingModeV2(InvalidNativeWindow, scalingModev2);
2263 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2264 }
2265
2266 /*
2267 * Function: GetNativeObjectMagic
2268 * Type: Function
2269 * Rank: Important(2)
2270 * EnvConditions: N/A
2271 * CaseDescription: 1. call Func With Invalid NativeWindow
2272 * 2. check ret
2273 */
2274 HWTEST_F(NativeWindowTest, InvalidNativewindow002, TestSize.Level0)
2275 {
2276 sptr<OHOS::IConsumerSurface> cSurfaceTestInvalid = IConsumerSurface::Create();
2277 sptr<IBufferConsumerListener> listener = new BufferConsumerListener();
2278 cSurfaceTestInvalid->RegisterConsumerListener(listener);
2279 sptr<OHOS::IBufferProducer> producerTestInvalid = cSurfaceTestInvalid->GetProducer();
2280 sptr<OHOS::Surface> pSurfaceTestInvalid = Surface::CreateSurfaceAsProducer(producerTestInvalid);
2281 NativeWindow* InvalidNativeWindow = OH_NativeWindow_CreateNativeWindow(&pSurfaceTestInvalid);
2282 const char src[sizeof(NativeWindow)] = "TestInvalidNativeWindow";
2283 memcpy_s((void*)InvalidNativeWindow, sizeof(NativeWindow), src, strlen(src) + 1);
2284
2285
2286 int32_t size = 1;
2287 const OHHDRMetaData metaData[] = {{OH_METAKEY_RED_PRIMARY_X, 0}};
2288 int32_t ret = OH_NativeWindow_NativeWindowSetMetaData(InvalidNativeWindow, firstSeqnum, size, metaData);
2289 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2290
2291 OHHDRMetadataKey key = OHHDRMetadataKey::OH_METAKEY_HDR10_PLUS;
2292 const uint8_t metaDataSet[] = {0};
2293 ret = OH_NativeWindow_NativeWindowSetMetaDataSet(InvalidNativeWindow, firstSeqnum, key, size, metaDataSet);
2294 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2295
2296 OHExtDataHandle *handle = AllocOHExtDataHandle(1);
2297 ret = NativeWindowSetTunnelHandle(InvalidNativeWindow, handle);
2298 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2299
2300 uint64_t surfaceId = 0;
2301 ret = OH_NativeWindow_GetSurfaceId(InvalidNativeWindow, &surfaceId);
2302 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2303
2304 NativeWindowSetBufferHold(InvalidNativeWindow);
2305 OHIPCParcel *parcel = OH_IPCParcel_Create();
2306 ret = NativeWindowWriteToParcel(InvalidNativeWindow, parcel);
2307 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2308
2309 float matrix[16];
2310 NativeWindowBuffer* lastFlushedBuffer;
2311 int lastFlushedFenceFd;
2312 ret = OH_NativeWindow_GetLastFlushedBufferV2(InvalidNativeWindow, &lastFlushedBuffer, &lastFlushedFenceFd, matrix);
2313 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2314
2315 ret = OH_NativeWindow_CleanCache(InvalidNativeWindow);
2316 EXPECT_EQ(ret, OHOS::SURFACE_ERROR_INVALID_PARAM);
2317 }
2318
2319 /*
2320 * Function: OH_NativeWindow_NativeWindowRequestBuffer
2321 * Type: Function
2322 * Rank: Important(2)
2323 * EnvConditions: N/A
2324 * CaseDescription: 1. call OH_NativeWindow_NativeWindowRequestBuffer by abnormal input
2325 * 2. check ret
2326 */
2327 HWTEST_F(NativeWindowTest, DisconnectStrictly001, TestSize.Level0)
2328 {
2329 int32_t sRet = 0;
2330 uint32_t queueSize = 32;
2331
2332 sptr<OHOS::IConsumerSurface> pConsumerSurface = IConsumerSurface::Create();
2333 sptr<IBufferConsumerListener> pListener = new BufferConsumerListener();
2334 pConsumerSurface->RegisterConsumerListener(pListener);
2335 sptr<OHOS::IBufferProducer> pBufferProducer = pConsumerSurface->GetProducer();
2336 sptr<OHOS::Surface> pSurface1 = Surface::CreateSurfaceAsProducer(pBufferProducer);
2337 sptr<OHOS::Surface> pSurface2 = Surface::CreateSurfaceAsProducer(pBufferProducer);
2338
2339 sptr<OHOS::IConsumerSurface> tConsumerSurface = IConsumerSurface::Create();
2340 sptr<IBufferConsumerListener> tListener = new BufferConsumerListener();
2341 tConsumerSurface->RegisterConsumerListener(tListener);
2342 sptr<OHOS::IBufferProducer> tBufferProducer = tConsumerSurface->GetProducer();
2343 sptr<OHOS::Surface> tSurface = Surface::CreateSurfaceAsProducer(tBufferProducer);
2344
2345 pSurface1->RegisterReleaseListener(OnBufferRelease);
2346 pSurface2->RegisterReleaseListener(OnBufferRelease);
2347 tSurface->RegisterReleaseListener(OnBufferRelease);
2348 pSurface1->SetQueueSize(queueSize);
2349 pSurface2->SetQueueSize(queueSize);
2350 tSurface->SetQueueSize(queueSize);
2351
2352 OHNativeWindow* nativeWindow1 = OH_NativeWindow_CreateNativeWindow(&pSurface1);
2353 OHNativeWindow* nativeWindow2 = OH_NativeWindow_CreateNativeWindow(&pSurface2);
2354 OHNativeWindow* nativeWindow3 = OH_NativeWindow_CreateNativeWindow(&tSurface);
2355
2356 SetNativeWindowConfig(nativeWindow1);
2357 SetNativeWindowConfig(nativeWindow2);
2358 SetNativeWindowConfig(nativeWindow3);
2359
2360 int fenceFd = -1;
2361 struct Region *region = new Region();
2362 struct Region::Rect *rect = new Region::Rect();
2363 rect->x = 0x100;
2364 rect->y = 0x100;
2365 rect->w = 0x100;
2366 rect->h = 0x100;
2367 region->rects = rect;
2368
2369 OHNativeWindowBuffer* nativeWindowBuffer1 = nullptr;
2370 OHNativeWindowBuffer* nativeWindowBuffer2 = nullptr;
2371
2372 // 不同的surface(指不同消费端)创建不同的nativewindow
2373 pSurface1->ConnectStrictly();
2374 tSurface->DisconnectStrictly();
2375 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2376 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2377 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2378 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2379 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow3, &nativeWindowBuffer2, &fenceFd);
2380 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2381 tSurface->ConnectStrictly();
2382 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow3, &nativeWindowBuffer2, &fenceFd);
2383 tSurface->DisconnectStrictly();
2384 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow3, nativeWindowBuffer2, fenceFd, *region);
2385 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2386
2387 pSurface1->DisconnectStrictly();
2388 tSurface->ConnectStrictly();
2389 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2390 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2391 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2392 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2393 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow3, &nativeWindowBuffer2, &fenceFd);
2394 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2395 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow3, nativeWindowBuffer2, fenceFd, *region);
2396 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2397
2398 // 同一个surface(指相同消费端)调用不同nativewindow
2399 pSurface1->ConnectStrictly();
2400 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2401 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2402 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2403 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2404 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow2, &nativeWindowBuffer1, &fenceFd);
2405 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2406 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow2, nativeWindowBuffer1, fenceFd, *region);
2407 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2408
2409
2410 pSurface2->DisconnectStrictly();
2411 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2412 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2413 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2414 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2415 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow2, &nativeWindowBuffer1, &fenceFd);
2416 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2417 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow2, nativeWindowBuffer1, fenceFd, *region);
2418 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2419
2420 // 同一个surface调用相同nativewindow
2421 pSurface1->ConnectStrictly();
2422 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2423 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2424 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2425 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2426 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2427 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2428 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2429 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2430
2431 pSurface1->DisconnectStrictly();
2432 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2433 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2434 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2435 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2436 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2437 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2438 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2439 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2440
2441 // 调用1000次ConnectStrictly和DisconnectStrictly
2442 uint32_t testCount = 1000;
2443 for (int i = 0; i < testCount; i++) {
2444 pSurface1->ConnectStrictly();
2445 }
2446 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2447 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2448 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2449 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2450 for (int i = 0; i < testCount; i++) {
2451 pSurface1->DisconnectStrictly();
2452 }
2453 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2454 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2455 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2456 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2457
2458 // 调用ConnectStrictly->DisconnectStrictly,再调用不同的nativewindow
2459 pSurface1->ConnectStrictly();
2460 pSurface1->DisconnectStrictly();
2461 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2462 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2463 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2464 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2465 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow2, &nativeWindowBuffer1, &fenceFd);
2466 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2467 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow2, nativeWindowBuffer1, fenceFd, *region);
2468 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2469
2470 // 调用DisconnectStrictly->ConnectStrictly,再调用不同的nativewindow
2471 pSurface1->DisconnectStrictly();
2472 pSurface1->ConnectStrictly();
2473 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2474 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2475 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow1, nativeWindowBuffer1, fenceFd, *region);
2476 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2477 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow2, &nativeWindowBuffer1, &fenceFd);
2478 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2479 sRet = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow2, nativeWindowBuffer1, fenceFd, *region);
2480 EXPECT_EQ(sRet, OHOS::GSERROR_OK);
2481
2482 // 验证OH_NativeWindow_CleanCache在消费端断连后的错误码
2483 pSurface1->Connect();
2484 sRet = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow1, &nativeWindowBuffer1, &fenceFd);
2485 pSurface1->Disconnect();
2486 sRet = OH_NativeWindow_CleanCache(nativeWindow1);
2487 EXPECT_EQ(sRet, OHOS::GSERROR_CONSUMER_DISCONNECTED);
2488 rect = nullptr;
2489 region = nullptr;
2490 delete rect;
2491 delete region;
2492 }
2493
2494 /*
2495 * Function: NativeWindowLockBuffer
2496 * Type: Function
2497 * Rank: Important(2)
2498 * EnvConditions: N/A
2499 * CaseDescription: 1. preSet: call NativeWindowLockBuffer with null surface or null window
2500 * 2. operation: request native buffer with lock
2501 * 3. result: request native buffer with lock buffer fail
2502 */
2503 HWTEST_F(NativeWindowTest, NativeWindowLockBuffer001, TestSize.Level0)
2504 {
2505 OHNativeWindow* window = new OHNativeWindow();
2506 ASSERT_NE(window, nullptr);
2507
2508 OHNativeWindowBuffer* buffer = nullptr;
2509 Region::Rect rect = {0};
2510 rect.x = 0x100;
2511 rect.y = 0x100;
2512 rect.w = 0x100;
2513 rect.h = 0x100;
2514 Region region = {.rects = &rect, .rectNumber = 1};
2515 int32_t ret = NativeWindowLockBuffer(nullptr, region, &buffer);
2516 ASSERT_EQ(ret, SURFACE_ERROR_INVALID_PARAM);
2517 ret = NativeWindowLockBuffer(window, region, nullptr);
2518 ASSERT_EQ(ret, SURFACE_ERROR_INVALID_PARAM);
2519 ret = NativeWindowLockBuffer(window, region, &buffer);
2520 ASSERT_EQ(ret, SURFACE_ERROR_ERROR);
2521 delete window;
2522 }
2523
2524 /*
2525 * Function: NativeWindowLockBuffer
2526 * Type: Function
2527 * Rank: Important(2)
2528 * EnvConditions: N/A
2529 * CaseDescription: 1. preSet: native window is unlocked, call NativeWindowLockBuffer with null surface or null window
2530 * 2. operation: request native buffer with lock
2531 * 3. result: request native buffer with lock buffer fail
2532 */
2533 HWTEST_F(NativeWindowTest, NativeWindowLockBuffer002, TestSize.Level0)
2534 {
2535 sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
2536 sptr<IBufferConsumerListener> listenerTmp = new BufferConsumerListener();
2537 cSurfaceTmp->RegisterConsumerListener(listenerTmp);
2538 sptr<OHOS::IBufferProducer> producerTmp = cSurface->GetProducer();
2539 sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
2540
2541 OHNativeWindow* window = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
2542 ASSERT_NE(window, nullptr);
2543
2544 OHNativeWindowBuffer* buffer = nullptr;
2545 Region::Rect rect = {0};
2546 rect.x = 0x100;
2547 rect.y = 0x100;
2548 rect.w = 0x100;
2549 rect.h = 0x100;
2550 Region region = {.rects = &rect, .rectNumber = 1};
2551 int32_t ret = NativeWindowLockBuffer(window, region, &buffer);
2552 ASSERT_EQ(ret, GSERROR_OK);
2553 ASSERT_NE(buffer, nullptr);
2554
2555 ret = NativeWindowLockBuffer(window, region, &buffer);
2556 ASSERT_EQ(ret, GSERROR_INVALID_OPERATING);
2557 ASSERT_EQ(buffer, nullptr);
2558
2559 ret = NativeWindowUnlockAndFlushBuffer(window);
2560 ASSERT_EQ(ret, GSERROR_OK);
2561 ASSERT_EQ(buffer, nullptr);
2562 OH_NativeWindow_DestroyNativeWindow(window);
2563 }
2564
2565 /*
2566 * Function: NativeWindowUnlockAndFlushBuffer
2567 * Type: Function
2568 * Rank: Important(2)
2569 * EnvConditions: N/A
2570 * CaseDescription: 1. preSet: call NativeWindowUnlockAndFlushBuffer with null surface or null window
2571 * 2. operation: unlock native buffer
2572 * 3. result: unlock native buffer fail
2573 */
2574 HWTEST_F(NativeWindowTest, NativeWindowUnlockAndFlushBuffer001, TestSize.Level0)
2575 {
2576 OHNativeWindow* window = new OHNativeWindow();
2577 ASSERT_NE(window, nullptr);
2578
2579 int32_t ret = NativeWindowUnlockAndFlushBuffer(nullptr);
2580 ASSERT_EQ(ret, SURFACE_ERROR_INVALID_PARAM);
2581
2582 ret = NativeWindowUnlockAndFlushBuffer(window);
2583 ASSERT_EQ(ret, SURFACE_ERROR_ERROR);
2584 delete window;
2585 }
2586
2587 /*
2588 * Function: NativeWindowUnlockAndFlushBuffer
2589 * Type: Function
2590 * Rank: Important(2)
2591 * EnvConditions: N/A
2592 * CaseDescription: 1. preSet: call NativeWindowUnlockAndFlushBuffer with valid window.
2593 * 2. operation: unlock native buffer
2594 * 3. result: unlock native buffer success
2595 */
2596 HWTEST_F(NativeWindowTest, NativeWindowUnlockAndFlushBuffer002, TestSize.Level0)
2597 {
2598 sptr<OHOS::IConsumerSurface> cSurfaceTmp = IConsumerSurface::Create();
2599 sptr<IBufferConsumerListener> listenerTmp = new BufferConsumerListener();
2600 cSurfaceTmp->RegisterConsumerListener(listenerTmp);
2601 sptr<OHOS::IBufferProducer> producerTmp = cSurface->GetProducer();
2602 sptr<OHOS::Surface> pSurfaceTmp = Surface::CreateSurfaceAsProducer(producerTmp);
2603
2604 OHNativeWindow* window = OH_NativeWindow_CreateNativeWindow(&pSurfaceTmp);
2605 ASSERT_NE(window, nullptr);
2606
2607 OHNativeWindowBuffer* buffer = nullptr;
2608 Region::Rect rect = {0};
2609 rect.x = 0x100;
2610 rect.y = 0x100;
2611 rect.w = 0x100;
2612 rect.h = 0x100;
2613 Region region = {.rects = &rect, .rectNumber = 1};
2614 int32_t ret = NativeWindowLockBuffer(window, region, &buffer);
2615 ASSERT_EQ(ret, GSERROR_OK);
2616 ASSERT_NE(buffer, nullptr);
2617
2618 ret = NativeWindowUnlockAndFlushBuffer(window);
2619 ASSERT_EQ(ret, GSERROR_OK);
2620
2621 ret = NativeWindowUnlockAndFlushBuffer(window);
2622 ASSERT_EQ(ret, GSERROR_INVALID_OPERATING);
2623 OH_NativeWindow_DestroyNativeWindow(window);
2624 }
2625 }
2626