1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 //
17 // Created on 2024/8/6.
18 //
19 // Node APIs are not fully supported. To solve the compilation error of the interface cannot be found,
20 // please include "napi/native_api.h".
21 #include "napi/native_api.h"
22 #include <IPCKit/ipc_cparcel.h>
23 #include <bits/alltypes.h>
24 #include <GLES2/gl2.h>
25 #include <multimedia/player_framework/native_avcodec_base.h>
26 #include <native_image/native_image.h>
27 #include <native_window/external_window.h>
28 #include <native_buffer/native_buffer.h>
29
30
31 #define SUCCESS 0
32 #define FAIL (-1)
33
34 #define CONSTANT_0 0
35 #define CONSTANT_1 1
36 #define CONSTANT_2 2
37 #define CONSTANT_3 3
38 #define CONSTANT_4 4
39 #define CONSTANT_5 5
40 #define CONSTANT_6 6
41 #define CONSTANT_7 7
42 #define CONSTANT_8 8
43
44 #define CONSTANT_500 500
45 #define CONSTANT_1000 1000
46 #define CONSTANT_10000 10000
47
48 #define CONSTANT_40001000 40001000
49 #define CONSTANT_41207000 41207000
50 #define CONSTANT_41208000 41208000
51 #define CONSTANT_41210000 41210000
52
53 #define CONSTANT_50002000 50002000
54 #define CONSTANT_50102000 50102000
55
56 #define CONSTANT_999999999 999999999
57 #define CONSTANT_9999999999999999999 9999999999999999999
58
59 struct result {
60 OH_NativeImage *image;
61 OHNativeWindow *nativeWindow;
62 int32_t width_;
63 int32_t height_;
64 };
65
InitNativeWindow()66 static result InitNativeWindow()
67 {
68 struct result result1;
69 GLuint textureId;
70 glGenTextures(1, &textureId);
71 auto _image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
72 result1.image = _image;
73 OHNativeWindow *_nativeWindow = OH_NativeImage_AcquireNativeWindow(_image);
74 result1.nativeWindow = _nativeWindow;
75 int code = SET_BUFFER_GEOMETRY;
76 result1.width_ = 0x100;
77 result1.height_ = 0x100;
78 int32_t ret = OH_NativeWindow_NativeWindowHandleOpt(_nativeWindow, code, result1.width_, result1.height_);
79 code = SET_USAGE;
80 int32_t usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA;
81 ret = OH_NativeWindow_NativeWindowHandleOpt(_nativeWindow, code, usage);
82 return result1;
83 }
84
DestroyNativeWindowImage(OH_NativeImage *image, OHNativeWindow *window)85 static void DestroyNativeWindowImage(OH_NativeImage *image, OHNativeWindow *window)
86 {
87 OH_NativeImage_Destroy(&image);
88 OH_NativeWindow_DestroyNativeWindow(window);
89 }
90
testNativeWindowCreateNativeWindowNullptr(napi_env env, napi_callback_info info)91 napi_value testNativeWindowCreateNativeWindowNullptr(napi_env env, napi_callback_info info)
92 {
93 napi_value result = nullptr;
94 auto p = OH_NativeWindow_CreateNativeWindow(nullptr);
95 if (p == nullptr) {
96 napi_create_int32(env, SUCCESS, &result);
97 } else {
98 napi_create_int32(env, FAIL, &result);
99 }
100 return result;
101 }
102
testNativeWindowDestroyNativeWindowNullptr(napi_env env, napi_callback_info info)103 napi_value testNativeWindowDestroyNativeWindowNullptr(napi_env env, napi_callback_info info)
104 {
105 napi_value result = nullptr;
106 OH_NativeWindow_DestroyNativeWindow(nullptr);
107 napi_create_int32(env, SUCCESS, &result);
108 return result;
109 }
110
testNativeWindowGetSurfaceIdNullptr(napi_env env, napi_callback_info info)111 napi_value testNativeWindowGetSurfaceIdNullptr(napi_env env, napi_callback_info info)
112 {
113 napi_value result = nullptr;
114 auto r = OH_NativeWindow_GetSurfaceId(nullptr, 0);
115 if (CONSTANT_40001000 == r) {
116 napi_create_int32(env, SUCCESS, &result);
117 } else {
118 napi_create_int32(env, FAIL, &result);
119 }
120 return result;
121 }
122
123
testNativeWindowCreateNativeWindowFromSurfaceIdNullptr(napi_env env, napi_callback_info info)124 napi_value testNativeWindowCreateNativeWindowFromSurfaceIdNullptr(napi_env env, napi_callback_info info)
125 {
126 napi_value result = nullptr;
127
128 // 设置OH_NativeWindow_CreateNativeWindowFromSurfaceId()的surfaceId=nullptr,其他参数正常调用该接口
129 OHNativeWindow *nativeWindow = nullptr;
130 auto flag = OH_NativeWindow_CreateNativeWindowFromSurfaceId(0, &nativeWindow);
131 if (flag != CONSTANT_40001000) {
132 napi_create_int32(env, 1, &result);
133 return result;
134 }
135
136 GLuint textureId;
137 glGenTextures(1, &textureId);
138 auto _image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
139 auto _nativeWindow = OH_NativeImage_AcquireNativeWindow(_image);
140 uint64_t surfaceId;
141 OH_NativeWindow_GetSurfaceId(_nativeWindow, &surfaceId);
142 // 设置OH_NativeWindow_CreateNativeWindowFromSurfaceId()的window=nullptr,,其他参数正常调用该接口
143 flag = OH_NativeWindow_CreateNativeWindowFromSurfaceId(surfaceId, nullptr);
144 if (flag != CONSTANT_40001000) {
145 napi_create_int32(env, CONSTANT_2, &result);
146 return result;
147 }
148 OH_NativeImage_Destroy(&_image);
149 OH_NativeWindow_DestroyNativeWindow(_nativeWindow);
150 napi_create_int32(env, SUCCESS, &result);
151 return result;
152 }
153
154
testNativeWindowCreateNativeWindowFromSurfaceIdNormal(napi_env env, napi_callback_info info)155 napi_value testNativeWindowCreateNativeWindowFromSurfaceIdNormal(napi_env env, napi_callback_info info)
156 {
157 napi_value result = nullptr;
158
159 // 创建surface实例 获取id
160 GLuint textureId;
161 glGenTextures(1, &textureId);
162 auto _image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
163 auto _nativeWindow = OH_NativeImage_AcquireNativeWindow(_image);
164 uint64_t surfaceId;
165 OH_NativeWindow_GetSurfaceId(_nativeWindow, &surfaceId);
166
167 // 声明nativeWindow空指针为window
168 OHNativeWindow *nativeWindow = nullptr;
169 auto flag = OH_NativeWindow_CreateNativeWindowFromSurfaceId(surfaceId, &nativeWindow);
170 // 接口执行成功,返回错误码0 | 声明的window指针指向NativeWindow实例
171 if (flag != 0 || nativeWindow == nullptr) {
172 napi_create_int32(env, 1, &result);
173 return result;
174 }
175
176 // 声明一个surfaceId2
177 uint64_t surfaceId2;
178 flag = OH_NativeWindow_GetSurfaceId(nativeWindow, &surfaceId2);
179 // 接口调用成功,返回错误码0 | get获取surfaceId2与surfaceId一致
180 if (flag != 0 || surfaceId2 != surfaceId) {
181 napi_create_int32(env, CONSTANT_2, &result);
182 return result;
183 }
184
185 OH_NativeImage_Destroy(&_image);
186 OH_NativeWindow_DestroyNativeWindow(nativeWindow);
187
188 napi_create_int32(env, SUCCESS, &result);
189 return result;
190 }
191
192
testNativeWindowCreateNativeWindowFromSurfaceIdSurfaceId(napi_env env, napi_callback_info info)193 napi_value testNativeWindowCreateNativeWindowFromSurfaceIdSurfaceId(napi_env env, napi_callback_info info)
194 {
195 napi_value result = nullptr;
196
197 // 创建surface实例 获取一个正常的id
198 GLuint textureId;
199 glGenTextures(1, &textureId);
200 auto _image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
201 auto _nativeWindow = OH_NativeImage_AcquireNativeWindow(_image);
202 uint64_t surfaceId;
203 OH_NativeWindow_GetSurfaceId(_nativeWindow, &surfaceId);
204
205 // 调用该接口,查看执行结果
206 uint64_t ids[] = {0, 1, surfaceId, 0xFFFFFFFF};
207 for (int i = 0; i < sizeof(ids) / sizeof(uint64_t); i += 1) {
208 uint64_t tmpId = ids[i];
209 OHNativeWindow *nativeWindow = nullptr;
210 auto flag = OH_NativeWindow_CreateNativeWindowFromSurfaceId(tmpId, &nativeWindow);
211 // 只有样例3成功
212 if (i == CONSTANT_2) {
213 if (flag != SUCCESS) {
214 napi_create_int32(env, i + 1, &result);
215 return result;
216 }
217 } else {
218 OH_NativeWindow_DestroyNativeWindow(nativeWindow);
219 if (flag == SUCCESS) {
220 napi_create_int32(env, 1 + 1, &result);
221 return result;
222 }
223 }
224 }
225 OH_NativeImage_Destroy(&_image);
226 OH_NativeWindow_DestroyNativeWindow(_nativeWindow);
227 napi_create_int32(env, SUCCESS, &result);
228 return result;
229 }
230
231
testNativeWindowCreateNativeWindowBufferFromNativeBufferNullptr(napi_env env, napi_callback_info info)232 napi_value testNativeWindowCreateNativeWindowBufferFromNativeBufferNullptr(napi_env env, napi_callback_info info)
233 {
234 napi_value result = nullptr;
235 auto buffer = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(nullptr);
236 if (buffer == nullptr) {
237 napi_create_int32(env, SUCCESS, &result);
238 } else {
239 napi_create_int32(env, FAIL, &result);
240 }
241 return result;
242 }
243
244
testNativeWindowCreateNativeWindowBufferFromSurfaceBufferNullptr(napi_env env, napi_callback_info info)245 napi_value testNativeWindowCreateNativeWindowBufferFromSurfaceBufferNullptr(napi_env env, napi_callback_info info)
246 {
247 napi_value result = nullptr;
248 auto buffer = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(nullptr);
249 if (buffer == nullptr) {
250 napi_create_int32(env, SUCCESS, &result);
251 } else {
252 napi_create_int32(env, FAIL, &result);
253 }
254 return result;
255 }
256
257
testNativeWindowDestroyNativeWindowBufferNullptr(napi_env env, napi_callback_info info)258 napi_value testNativeWindowDestroyNativeWindowBufferNullptr(napi_env env, napi_callback_info info)
259 {
260 napi_value result = nullptr;
261 OH_NativeWindow_DestroyNativeWindowBuffer(nullptr);
262 napi_create_int32(env, SUCCESS, &result);
263 return result;
264 }
265
testNativeWindowGetBufferHandleFromNativeNullptr(napi_env env, napi_callback_info info)266 napi_value testNativeWindowGetBufferHandleFromNativeNullptr(napi_env env, napi_callback_info info)
267 {
268 napi_value result = nullptr;
269 auto ptr = OH_NativeWindow_GetBufferHandleFromNative(nullptr);
270 if (ptr == nullptr) {
271 napi_create_int32(env, SUCCESS, &result);
272 } else {
273 napi_create_int32(env, FAIL, &result);
274 }
275 napi_create_int32(env, SUCCESS, &result);
276 return result;
277 }
278
279
testNativeWindowCreateNativeWindowBufferFromNativeBufferNormal(napi_env env, napi_callback_info info)280 napi_value testNativeWindowCreateNativeWindowBufferFromNativeBufferNormal(napi_env env, napi_callback_info info)
281 {
282 napi_value result = nullptr;
283
284 // 0. 创建 native buffer 实例
285 OH_NativeBuffer_Config config{
286 .width = 0x100,
287 .height = 0x100,
288 .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
289 .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
290 };
291 OH_NativeBuffer *buffer = OH_NativeBuffer_Alloc(&config);
292 if (buffer == nullptr) {
293 napi_create_int32(env, -1, &result);
294 return result;
295 }
296
297 // 1.
298 auto nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(buffer);
299 // 接口执行成功,返回非空指针
300 if (nativeWindowBuffer == nullptr) {
301 napi_create_int32(env, CONSTANT_1, &result);
302 return result;
303 }
304
305 // 2.
306 auto bufferHandle = OH_NativeWindow_GetBufferHandleFromNative(nativeWindowBuffer);
307 if (bufferHandle == nullptr) {
308 napi_create_int32(env, CONSTANT_2, &result);
309 return result;
310 }
311
312 // 3.
313 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
314
315 // 4.
316 bufferHandle = OH_NativeWindow_GetBufferHandleFromNative(nativeWindowBuffer);
317 if (bufferHandle != nullptr) {
318 napi_create_int32(env, CONSTANT_4, &result);
319 return result;
320 }
321
322 napi_create_int32(env, SUCCESS, &result);
323 return result;
324 }
325
326
testNativeWindowCreateNativeWindowBufferFromNativeBufferMuch(napi_env env, napi_callback_info info)327 napi_value testNativeWindowCreateNativeWindowBufferFromNativeBufferMuch(napi_env env, napi_callback_info info)
328 {
329 napi_value result = nullptr;
330
331 // 0. 创建 native buffer 实例
332 OH_NativeBuffer_Config config{
333 .width = 0x100,
334 .height = 0x100,
335 .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
336 .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
337 };
338 OH_NativeBuffer *buffer = OH_NativeBuffer_Alloc(&config);
339 if (buffer == nullptr) {
340 napi_create_int32(env, -1, &result);
341 return result;
342 }
343
344 for (int i = 0; i < CONSTANT_500; i += 1) {
345 auto ptr = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(buffer);
346 if (ptr == nullptr) {
347 napi_create_int32(env, i + 1, &result);
348 return result;
349 }
350 }
351
352 napi_create_int32(env, SUCCESS, &result);
353 return result;
354 }
355
356
testNativeWindowNativeWindowRequestBufferNullptr(napi_env env, napi_callback_info info)357 napi_value testNativeWindowNativeWindowRequestBufferNullptr(napi_env env, napi_callback_info info)
358 {
359 napi_value result = nullptr;
360
361 OHNativeWindowBuffer *oHNativeWindowBuffer;
362 int fenceFd;
363
364 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nullptr, &oHNativeWindowBuffer, &fenceFd);
365 if (flag != CONSTANT_40001000) {
366 napi_create_int32(env, FAIL, &result);
367 return result;
368 }
369
370 napi_create_int32(env, SUCCESS, &result);
371 return result;
372 }
373
374
testNativeWindowNativeWindowAbortBufferNullptr(napi_env env, napi_callback_info info)375 napi_value testNativeWindowNativeWindowAbortBufferNullptr(napi_env env, napi_callback_info info)
376 {
377 napi_value result = nullptr;
378
379 // 0. 创建 native window 实例
380 struct result result1 = InitNativeWindow();
381 OH_NativeImage *image = result1.image;
382 OHNativeWindow *nativeWindow = result1.nativeWindow;
383 OHNativeWindowBuffer *oHNativeWindowBuffer;
384
385 // 1. window 为空指针
386 auto flag = OH_NativeWindow_NativeWindowAbortBuffer(nullptr, oHNativeWindowBuffer);
387 if (flag != CONSTANT_40001000) {
388 napi_create_int32(env, 1, &result);
389 return result;
390 }
391
392 // 2. buffer 为空指针
393 flag = OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nullptr);
394 if (flag != CONSTANT_40001000) {
395 napi_create_int32(env, CONSTANT_2, &result);
396 return result;
397 }
398 DestroyNativeWindowImage(image, nativeWindow);
399 napi_create_int32(env, SUCCESS, &result);
400 return result;
401 }
402
testNativeWindowNativeWindowRequestAbortBufferNormal(napi_env env, napi_callback_info info)403 napi_value testNativeWindowNativeWindowRequestAbortBufferNormal(napi_env env, napi_callback_info info)
404 {
405 napi_value result = nullptr;
406
407 // 0. 创建 native window 实例
408 struct result result1 = InitNativeWindow();
409 OH_NativeImage *image = result1.image;
410 OHNativeWindow *nativeWindow = result1.nativeWindow;
411
412 // 0. 新建 native window buffer 指针
413 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
414
415 // 1.
416 int fenceFd = -1;
417 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
418 if (flag != 0 || nativeWindowBuffer == nullptr) {
419 napi_create_int32(env, 1, &result);
420 return result;
421 }
422
423 // 2.
424 flag = OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nativeWindowBuffer);
425 if (flag != 0) {
426 napi_create_int32(env, CONSTANT_2, &result);
427 return result;
428 }
429 DestroyNativeWindowImage(image, nativeWindow);
430 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
431 napi_create_int32(env, SUCCESS, &result);
432 return result;
433 }
434
testNativeWindowNativeWindowRequestAbortBufferAbnormal(napi_env env, napi_callback_info info)435 napi_value testNativeWindowNativeWindowRequestAbortBufferAbnormal(napi_env env, napi_callback_info info)
436 {
437 napi_value result = nullptr;
438
439 // 0. 创建 native window 实例
440 struct result result1 = InitNativeWindow();
441 OH_NativeImage *image = result1.image;
442 OHNativeWindow *nativeWindow = result1.nativeWindow;
443 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
444
445 // 1.
446 int fenceFd = 0;
447 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
448 if (flag != 0 || nativeWindowBuffer == nullptr) {
449 napi_create_int32(env, 1, &result);
450 return result;
451 }
452
453 // 2.
454 flag = OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nativeWindowBuffer);
455 if (flag != 0) {
456 napi_create_int32(env, CONSTANT_2, &result);
457 return result;
458 }
459
460 // 3.
461 flag = OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nativeWindowBuffer);
462 if (flag == 0) {
463 napi_create_int32(env, CONSTANT_3, &result);
464 }
465 DestroyNativeWindowImage(image, nativeWindow);
466 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
467 napi_create_int32(env, SUCCESS, &result);
468 return result;
469 }
470
471
testNativeWindowNativeWindowRequestBufferFenceFdNormal(napi_env env, napi_callback_info info)472 napi_value testNativeWindowNativeWindowRequestBufferFenceFdNormal(napi_env env, napi_callback_info info)
473 {
474 napi_value result = nullptr;
475
476 // 0. 创建 native window 实例
477 struct result result1 = InitNativeWindow();
478 OH_NativeImage *image = result1.image;
479 OHNativeWindow *nativeWindow = result1.nativeWindow;
480 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
481
482 int32_t ls[] = {-CONSTANT_5, -CONSTANT_1, CONSTANT_0, CONSTANT_1, CONSTANT_10000, CONSTANT_999999999};
483 for (int i = 0; i < sizeof(ls) / sizeof(int); i += 1) {
484 int fenceFd = ls[i];
485 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
486 if (flag != 0) {
487 napi_create_int32(env, 1, &result);
488 return result;
489 }
490 flag = OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nativeWindowBuffer);
491 if (flag != 0) {
492 napi_create_int32(env, CONSTANT_2, &result);
493 return result;
494 }
495 }
496 DestroyNativeWindowImage(image, nativeWindow);
497 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
498 napi_create_int32(env, SUCCESS, &result);
499 return result;
500 }
501
502
testNativeWindowNativeWindowRequestBufferFenceFdAbnormal(napi_env env, napi_callback_info info)503 napi_value testNativeWindowNativeWindowRequestBufferFenceFdAbnormal(napi_env env, napi_callback_info info)
504 {
505 napi_value result = nullptr;
506
507 // 0. 创建 native window 实例
508 struct result result1 = InitNativeWindow();
509 OH_NativeImage *image = result1.image;
510 OHNativeWindow *nativeWindow = result1.nativeWindow;
511 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
512
513 int32_t *fenceFd1 = NULL;
514 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, fenceFd1);
515 if (flag == 0) {
516 napi_create_int32(env, 1, &result);
517 return result;
518 }
519
520 int32_t *fenceFd2 = nullptr;
521 flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, fenceFd2);
522 if (flag == 0) {
523 napi_create_int32(env, 1, &result);
524 return result;
525 }
526 DestroyNativeWindowImage(image, nativeWindow);
527 napi_create_int32(env, SUCCESS, &result);
528 return result;
529 }
530
531
testNativeWindowNativeWindowRequestAbortBufferMax(napi_env env, napi_callback_info info)532 napi_value testNativeWindowNativeWindowRequestAbortBufferMax(napi_env env, napi_callback_info info)
533 {
534 napi_value result = nullptr;
535
536 // 0. 创建 native window 实例
537 struct result result1 = InitNativeWindow();
538 OH_NativeImage *image = result1.image;
539 OHNativeWindow *nativeWindow = result1.nativeWindow;
540 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
541
542 for (int i = 0; i < CONSTANT_4; ++i) {
543 int fenceFd = -1;
544 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
545 if (i >= CONSTANT_3) {
546 if (flag == 0) {
547 napi_create_int32(env, FAIL, &result);
548 return result;
549 }
550 } else {
551 if (flag != 0) {
552 napi_create_int32(env, i + 1, &result);
553 return result;
554 }
555 }
556 }
557 DestroyNativeWindowImage(image, nativeWindow);
558 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
559 napi_create_int32(env, SUCCESS, &result);
560 return result;
561 }
562
563
testNativeWindowNativeWindowRequestAbortBufferErrorCode(napi_env env, napi_callback_info info)564 napi_value testNativeWindowNativeWindowRequestAbortBufferErrorCode(napi_env env, napi_callback_info info)
565 {
566 napi_value result = nullptr;
567 struct result result1 = InitNativeWindow();
568 OH_NativeImage *image = result1.image;
569 OHNativeWindow *nativeWindow = result1.nativeWindow;
570 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
571 int requestFenceFd;
572 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &requestFenceFd);
573 if (flag != 0) {
574 napi_create_int32(env, 1, &result);
575 return result;
576 }
577 if (nativeWindowBuffer == nullptr || requestFenceFd != -1) {
578 napi_create_int32(env, CONSTANT_2, &result);
579 return result;
580 }
581 Region::Rect rect{
582 .x = 0x100,
583 .y = 0x100,
584 .w = 0x100,
585 .h = 0x100,
586 };
587 Region region{.rects = &rect};
588 flag = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, requestFenceFd, region);
589 if (flag != 0) {
590 napi_create_int32(env, CONSTANT_3, &result);
591 return result;
592 }
593 flag = OH_NativeWindow_NativeWindowAbortBuffer(nativeWindow, nativeWindowBuffer);
594 if (flag == 0) {
595 napi_create_int32(env, CONSTANT_4, &result);
596 }
597
598 DestroyNativeWindowImage(image, nativeWindow);
599 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
600 napi_create_int32(env, SUCCESS, &result);
601 return result;
602 }
603
604
testNativeWindowWriteToParcelErrptr(napi_env env, napi_callback_info info)605 napi_value testNativeWindowWriteToParcelErrptr(napi_env env, napi_callback_info info)
606 {
607 napi_value result = nullptr;
608
609 // 0. 创建 native window 实例
610 struct result result1 = InitNativeWindow();
611 OH_NativeImage *image = result1.image;
612 OHNativeWindow *nativeWindow = result1.nativeWindow;
613 // 0. 已存在OHIPCParcel
614 OHIPCParcel *parcel = OH_IPCParcel_Create();
615
616 // 1.
617 auto flag = OH_NativeWindow_WriteToParcel(nullptr, parcel);
618 if (flag != CONSTANT_40001000) {
619 napi_create_int32(env, 1, &result);
620 return result;
621 }
622
623 // 2.
624 flag = OH_NativeWindow_WriteToParcel(nativeWindow, nullptr);
625 if (flag != CONSTANT_40001000) {
626 napi_create_int32(env, CONSTANT_2, &result);
627 return result;
628 }
629 DestroyNativeWindowImage(image, nativeWindow);
630 napi_create_int32(env, SUCCESS, &result);
631 return result;
632 }
633
634
testNativeWindowReadFromParcelErrptr(napi_env env, napi_callback_info info)635 napi_value testNativeWindowReadFromParcelErrptr(napi_env env, napi_callback_info info)
636 {
637 napi_value result = nullptr;
638
639 OHNativeWindow *nativeWindow = nullptr;
640 // 0. 已存在OHIPCParcel
641 OHIPCParcel *parcel = OH_IPCParcel_Create();
642
643 // 1.
644 auto flag = OH_NativeWindow_ReadFromParcel(parcel, nullptr);
645 if (flag != CONSTANT_40001000) {
646 napi_create_int32(env, 1, &result);
647 return result;
648 }
649
650 // 2.
651 flag = OH_NativeWindow_ReadFromParcel(nullptr, &nativeWindow);
652 if (flag != CONSTANT_40001000) {
653 napi_create_int32(env, CONSTANT_2, &result);
654 return result;
655 }
656
657 napi_create_int32(env, SUCCESS, &result);
658 return result;
659 }
660
testNativeWindowWRParcelNormal(napi_env env, napi_callback_info info)661 napi_value testNativeWindowWRParcelNormal(napi_env env, napi_callback_info info)
662 {
663 napi_value result = nullptr;
664
665 // 0. 创建 native window 实例
666 GLuint textureId;
667 glGenTextures(1, &textureId);
668 auto _image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
669 auto nativeWindow1 = OH_NativeImage_AcquireNativeWindow(_image);
670 // 0. 已存在OHIPCParcel
671 OHIPCParcel *parcel1 = OH_IPCParcel_Create();
672
673 auto flag = OH_NativeWindow_WriteToParcel(nativeWindow1, parcel1);
674 if (flag != 0) {
675 napi_create_int32(env, CONSTANT_1, &result);
676 return result;
677 }
678 OHNativeWindow *nativeWindow2;
679 flag = OH_NativeWindow_ReadFromParcel(parcel1, &nativeWindow2);
680 if (flag != 0) {
681 napi_create_int32(env, CONSTANT_2, &result);
682 return result;
683 }
684 if (nativeWindow1 != nativeWindow2) {
685 napi_create_int32(env, CONSTANT_3, &result);
686 return result;
687 }
688
689 OH_NativeImage_Destroy(&_image);
690 OH_NativeWindow_DestroyNativeWindow(nativeWindow1);
691 OH_NativeWindow_DestroyNativeWindow(nativeWindow2);
692 napi_create_int32(env, SUCCESS, &result);
693 return result;
694 }
695
696
testNativeWindowWriteToParcelAbNormal(napi_env env, napi_callback_info info)697 napi_value testNativeWindowWriteToParcelAbNormal(napi_env env, napi_callback_info info)
698 {
699 napi_value result = nullptr;
700
701 // 0.
702 GLuint textureId;
703 glGenTextures(1, &textureId);
704 auto _image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
705 OHNativeWindow *window1 = nullptr;
706 OHIPCParcel *parcel1 = OH_IPCParcel_Create();
707
708 // 1.
709 auto flag = OH_NativeWindow_ReadFromParcel(parcel1, &window1);
710 if (window1 != nullptr) {
711 napi_create_int32(env, CONSTANT_1, &result);
712 return result;
713 }
714 OH_NativeImage_Destroy(&_image);
715 OH_NativeWindow_DestroyNativeWindow(window1);
716 napi_create_int32(env, SUCCESS, &result);
717 return result;
718 }
719
testNativeWindowReadFromParcelAbNormal(napi_env env, napi_callback_info info)720 napi_value testNativeWindowReadFromParcelAbNormal(napi_env env, napi_callback_info info)
721 {
722 napi_value result = nullptr;
723
724 // 0.
725 struct result result1 = InitNativeWindow();
726 OH_NativeImage *image = result1.image;
727 OHNativeWindow *window1 = result1.nativeWindow;
728 OHIPCParcel *parcel1 = OH_IPCParcel_Create();
729
730 // 1.
731 auto flag = OH_NativeWindow_WriteToParcel(window1, parcel1);
732 if (flag != 0) {
733 napi_create_int32(env, CONSTANT_1, &result);
734 return result;
735 }
736
737 // 2.
738 flag = OH_NativeWindow_WriteToParcel(window1, parcel1);
739 if (flag != 0) {
740 napi_create_int32(env, CONSTANT_2, &result);
741 return result;
742 }
743 DestroyNativeWindowImage(image, window1);
744 napi_create_int32(env, SUCCESS, &result);
745 return result;
746 }
747
testNativeWindowWRParcelDifferent(napi_env env, napi_callback_info info)748 napi_value testNativeWindowWRParcelDifferent(napi_env env, napi_callback_info info)
749 {
750 napi_value result = nullptr;
751 struct result result1, result2;
752 result1 = InitNativeWindow();
753 result2 = InitNativeWindow();
754 OH_NativeImage *image1 = result1.image;
755 OHNativeWindow *window1 = result1.nativeWindow;
756 OH_NativeImage *image2 = result2.image;
757 OHNativeWindow *window2 = result2.nativeWindow;
758 OHIPCParcel *parcel1 = OH_IPCParcel_Create();
759 OHIPCParcel *parcel2 = OH_IPCParcel_Create();
760
761 // 1.
762 auto flag = OH_NativeWindow_WriteToParcel(window1, parcel1);
763 if (flag != 0) {
764 napi_create_int32(env, CONSTANT_1, &result);
765 return result;
766 }
767 // 2.
768 flag = OH_NativeWindow_WriteToParcel(window1, parcel2);
769 if (flag != 0) {
770 napi_create_int32(env, CONSTANT_2, &result);
771 return result;
772 }
773 // 3.
774 flag = OH_NativeWindow_WriteToParcel(window2, parcel1);
775 if (flag != 0) {
776 napi_create_int32(env, CONSTANT_3, &result);
777 return result;
778 }
779 DestroyNativeWindowImage(image1, window1);
780 DestroyNativeWindowImage(image2, window2);
781 napi_create_int32(env, SUCCESS, &result);
782 return result;
783 }
784
785
testNativeWindowNativeWindowFlushBufferNullptr(napi_env env, napi_callback_info info)786 napi_value testNativeWindowNativeWindowFlushBufferNullptr(napi_env env, napi_callback_info info)
787 {
788 napi_value result = nullptr;
789
790 // 0.
791 struct result result1 = InitNativeWindow();
792 OH_NativeImage *image = result1.image;
793 OHNativeWindow *nativeWindow = result1.nativeWindow;
794 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
795 int fenceFd = -1;
796 Region::Rect rect{
797 .x = 0x100,
798 .y = 0x100,
799 .w = 0x100,
800 .h = 0x100,
801 };
802 Region region{.rects = &rect};
803 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
804
805 // 1.
806 auto flag = OH_NativeWindow_NativeWindowFlushBuffer(nullptr, nativeWindowBuffer, fenceFd, region);
807 if (flag != CONSTANT_40001000) {
808 napi_create_int32(env, 1, &result);
809 return result;
810 }
811 // 2.
812 flag = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nullptr, fenceFd, region);
813 if (flag != CONSTANT_40001000) {
814 napi_create_int32(env, CONSTANT_2, &result);
815 return result;
816 }
817 DestroyNativeWindowImage(image, nativeWindow);
818 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
819 napi_create_int32(env, SUCCESS, &result);
820 return result;
821 }
822
823
testNativeWindowNativeWindowFlushBufferNormal(napi_env env, napi_callback_info info)824 napi_value testNativeWindowNativeWindowFlushBufferNormal(napi_env env, napi_callback_info info)
825 {
826 napi_value result = nullptr;
827
828 // 0.
829 struct result result1 = InitNativeWindow();
830 OH_NativeImage *image = result1.image;
831 OHNativeWindow *nativeWindow = result1.nativeWindow;
832 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
833 int fenceFd = -1;
834 Region::Rect rect{
835 .x = 0x100,
836 .y = 0x100,
837 .w = 0x100,
838 .h = 0x100,
839 };
840 Region region{.rects = &rect};
841 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
842
843 // 1.
844 auto flag = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, region);
845 if (flag != 0) {
846 napi_create_int32(env, CONSTANT_1, &result);
847 return result;
848 }
849
850 // 2.
851 flag = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, region);
852 if (flag != CONSTANT_41207000) {
853 napi_create_int32(env, CONSTANT_2, &result);
854 return result;
855 }
856
857 DestroyNativeWindowImage(image, nativeWindow);
858 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
859 napi_create_int32(env, SUCCESS, &result);
860 return result;
861 }
862
testNativeWindowNativeWindowFlushBufferAbnormal(napi_env env, napi_callback_info info)863 napi_value testNativeWindowNativeWindowFlushBufferAbnormal(napi_env env, napi_callback_info info)
864 {
865 napi_value result = nullptr;
866 // 1.
867 int fenceFdList[] = {-CONSTANT_999999999, -CONSTANT_1000, -CONSTANT_1, CONSTANT_0,
868 CONSTANT_1, CONSTANT_1000, CONSTANT_999999999};
869 for (int i = 0; i < sizeof(fenceFdList) / sizeof(int); ++i) {
870 struct result result1 = InitNativeWindow();
871 OH_NativeImage *image = result1.image;
872 OHNativeWindow *nativeWindow = result1.nativeWindow;
873 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
874 int fenceFd = -1;
875 auto ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
876 Region::Rect rect{
877 .x = 0x100,
878 .y = 0x100,
879 .w = 0x100,
880 .h = 0x100,
881 };
882 Region region{.rects = &rect};
883 auto flag = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFdList[i], region);
884 if (flag != 0) {
885 napi_create_int32(env, i + 1, &result);
886 return result;
887 }
888
889 DestroyNativeWindowImage(image, nativeWindow);
890 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
891 napi_create_int32(env, SUCCESS, &result);
892 }
893 return result;
894 }
895
testNativeWindowNativeWindowFlushBufferErrorCode(napi_env env, napi_callback_info info)896 napi_value testNativeWindowNativeWindowFlushBufferErrorCode(napi_env env, napi_callback_info info)
897 {
898 napi_value result = nullptr;
899 struct result result1 = InitNativeWindow();
900 OH_NativeImage *image = result1.image;
901 OHNativeWindow *nativeWindow = result1.nativeWindow;
902 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
903 int fenceFd = -1;
904 Region::Rect rect{
905 .x = 0x100,
906 .y = 0x100,
907 .w = 0x100,
908 .h = 0x100,
909 };
910 Region region{.rects = &rect};
911 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
912
913 OH_NativeBuffer_Config config{
914 .width = 0x100,
915 .height = 0x100,
916 .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
917 .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
918 };
919 OH_NativeBuffer *newBuffer = OH_NativeBuffer_Alloc(&config);
920 nativeWindowBuffer = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(newBuffer);
921
922 // 1.
923 auto flag = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, -1, region);
924 if (flag != CONSTANT_41210000) {
925 napi_create_int32(env, FAIL, &result);
926 return result;
927 }
928 DestroyNativeWindowImage(image, nativeWindow);
929 OH_NativeBuffer_Unreference(newBuffer);
930 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
931 napi_create_int32(env, SUCCESS, &result);
932 return result;
933 }
934
935
testNativeWindowGetLastFlushedBufferV2Nullptr(napi_env env, napi_callback_info info)936 napi_value testNativeWindowGetLastFlushedBufferV2Nullptr(napi_env env, napi_callback_info info)
937 {
938 napi_value result = nullptr;
939 struct result result1 = InitNativeWindow();
940 OH_NativeImage *image = result1.image;
941 OHNativeWindow *nativeWindow = result1.nativeWindow;
942 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
943 int fenceFd;
944 float matrix[16];
945
946 // 1.
947 auto flag = OH_NativeWindow_GetLastFlushedBufferV2(nullptr, &nativeWindowBuffer, &fenceFd, matrix);
948 if (flag != CONSTANT_40001000) {
949 napi_create_int32(env, CONSTANT_1, &result);
950 return result;
951 }
952 // 2.
953 flag = OH_NativeWindow_GetLastFlushedBufferV2(nativeWindow, nullptr, &fenceFd, matrix);
954 if (flag != CONSTANT_40001000) {
955 napi_create_int32(env, CONSTANT_2, &result);
956 return result;
957 }
958 DestroyNativeWindowImage(image, nativeWindow);
959 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
960 napi_create_int32(env, SUCCESS, &result);
961 return result;
962 }
963
964
testNativeWindowGetLastFlushedBufferNullptr(napi_env env, napi_callback_info info)965 napi_value testNativeWindowGetLastFlushedBufferNullptr(napi_env env, napi_callback_info info)
966 {
967 napi_value result = nullptr;
968 struct result result1 = InitNativeWindow();
969 OH_NativeImage *image = result1.image;
970 OHNativeWindow *nativeWindow = result1.nativeWindow;
971 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
972 int fenceFd;
973 float matrix[16];
974
975 // 1.
976 auto flag = OH_NativeWindow_GetLastFlushedBuffer(nullptr, &nativeWindowBuffer, &fenceFd, matrix);
977 if (flag != CONSTANT_40001000) {
978 napi_create_int32(env, 1, &result);
979 return result;
980 }
981 // 2.
982 flag = OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, nullptr, &fenceFd, matrix);
983 if (flag != CONSTANT_40001000) {
984 napi_create_int32(env, CONSTANT_2, &result);
985 return result;
986 }
987 DestroyNativeWindowImage(image, nativeWindow);
988 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
989 napi_create_int32(env, SUCCESS, &result);
990 return result;
991 }
992
testNativeWindowGetLastFlushedBufferV2Normal(napi_env env, napi_callback_info info)993 napi_value testNativeWindowGetLastFlushedBufferV2Normal(napi_env env, napi_callback_info info)
994 {
995 napi_value result = nullptr;
996 struct result result1 = InitNativeWindow();
997 OH_NativeImage *image = result1.image;
998 OHNativeWindow *nativeWindow = result1.nativeWindow;
999 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1000 int fenceFd;
1001 float matrix[16];
1002 Region::Rect rect{
1003 .x = 0x100,
1004 .y = 0x100,
1005 .w = 0x100,
1006 .h = 0x100,
1007 };
1008 Region region{.rects = &rect};
1009 auto ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1010 ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, region);
1011 auto flag = OH_NativeWindow_GetLastFlushedBufferV2(nativeWindow, &nativeWindowBuffer, &fenceFd, matrix);
1012 if (flag != 0) {
1013 napi_create_int32(env, 1, &result);
1014 return result;
1015 }
1016 DestroyNativeWindowImage(image, nativeWindow);
1017 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1018 napi_create_int32(env, SUCCESS, &result);
1019 return result;
1020 }
1021
testNativeWindowGetLastFlushedBufferNormal(napi_env env, napi_callback_info info)1022 napi_value testNativeWindowGetLastFlushedBufferNormal(napi_env env, napi_callback_info info)
1023 {
1024 napi_value result = nullptr;
1025 struct result result1 = InitNativeWindow();
1026 OH_NativeImage *image = result1.image;
1027 OHNativeWindow *nativeWindow = result1.nativeWindow;
1028 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1029 int fenceFd;
1030 float matrix[16];
1031 Region::Rect rect{
1032 .x = 0x100,
1033 .y = 0x100,
1034 .w = 0x100,
1035 .h = 0x100,
1036 };
1037 Region region{.rects = &rect};
1038 auto ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1039 ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, region);
1040 auto flag = OH_NativeWindow_GetLastFlushedBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd, matrix);
1041 if (flag != 0) {
1042 napi_create_int32(env, 1, &result);
1043 return result;
1044 }
1045 DestroyNativeWindowImage(image, nativeWindow);
1046 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1047 napi_create_int32(env, SUCCESS, &result);
1048 return result;
1049 }
1050
1051
testNativeWindowSetBufferHold(napi_env env, napi_callback_info info)1052 napi_value testNativeWindowSetBufferHold(napi_env env, napi_callback_info info)
1053 {
1054 napi_value result = nullptr;
1055 struct result result1 = InitNativeWindow();
1056 OH_NativeImage *image = result1.image;
1057 OHNativeWindow *nativeWindow = result1.nativeWindow;
1058
1059 OH_NativeWindow_SetBufferHold(nullptr);
1060 OH_NativeWindow_SetBufferHold(nativeWindow);
1061
1062 DestroyNativeWindowImage(image, nativeWindow);
1063 napi_create_int32(env, SUCCESS, &result);
1064 return result;
1065 }
1066
testNativeWindowGetNativeObjectMagicNullptr(napi_env env, napi_callback_info info)1067 napi_value testNativeWindowGetNativeObjectMagicNullptr(napi_env env, napi_callback_info info)
1068 {
1069 napi_value result = nullptr;
1070 auto flag = OH_NativeWindow_GetNativeObjectMagic(nullptr);
1071 if (flag != -1) {
1072 napi_create_int32(env, FAIL, &result);
1073 return result;
1074 }
1075 napi_create_int32(env, SUCCESS, &result);
1076 return result;
1077 }
1078
testNativeWindowGetNativeObjectMagicNormal(napi_env env, napi_callback_info info)1079 napi_value testNativeWindowGetNativeObjectMagicNormal(napi_env env, napi_callback_info info)
1080 {
1081 napi_value result = nullptr;
1082
1083 struct result result1 = InitNativeWindow();
1084 OH_NativeImage *image = result1.image;
1085 OHNativeWindow *nativeWindow = result1.nativeWindow;
1086 OHNativeWindowBuffer *nativeWindowBuffer;
1087 int fenceFd = -1;
1088 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1089
1090 auto magicId = OH_NativeWindow_GetNativeObjectMagic(nativeWindow);
1091 if (magicId == -1) {
1092 napi_create_int32(env, CONSTANT_1, &result);
1093 return result;
1094 }
1095 auto magicId2 = OH_NativeWindow_GetNativeObjectMagic(nativeWindow);
1096 if (magicId2 == -1) {
1097 napi_create_int32(env, CONSTANT_1, &result);
1098 return result;
1099 }
1100 if (magicId != magicId2) {
1101 napi_create_int32(env, CONSTANT_3, &result);
1102 return result;
1103 }
1104 auto magicId3 = OH_NativeWindow_GetNativeObjectMagic(nativeWindowBuffer);
1105 if (magicId3 == -1) {
1106 napi_create_int32(env, CONSTANT_2, &result);
1107 return result;
1108 }
1109 auto magicId4 = OH_NativeWindow_GetNativeObjectMagic(nativeWindowBuffer);
1110 if (magicId4 == -1) {
1111 napi_create_int32(env, CONSTANT_2, &result);
1112 return result;
1113 }
1114
1115 if (magicId3 != magicId4) {
1116 napi_create_int32(env, CONSTANT_3, &result);
1117 return result;
1118 }
1119 DestroyNativeWindowImage(image, nativeWindow);
1120 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1121 napi_create_int32(env, SUCCESS, &result);
1122 return result;
1123 }
1124
testNativeWindowNativeObjectReferenceNullptr(napi_env env, napi_callback_info info)1125 napi_value testNativeWindowNativeObjectReferenceNullptr(napi_env env, napi_callback_info info)
1126 {
1127 napi_value result = nullptr;
1128
1129 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1130
1131 auto magicId = OH_NativeWindow_NativeObjectReference(nullptr);
1132 if (magicId != CONSTANT_40001000) {
1133 napi_create_int32(env, CONSTANT_1, &result);
1134 return result;
1135 }
1136
1137 magicId = OH_NativeWindow_NativeObjectReference(nativeWindowBuffer);
1138 if (magicId != CONSTANT_40001000) {
1139 napi_create_int32(env, CONSTANT_2, &result);
1140 return result;
1141 }
1142
1143 napi_create_int32(env, SUCCESS, &result);
1144 return result;
1145 }
1146
1147
testNativeWindowNativeObjectReferenceNormal(napi_env env, napi_callback_info info)1148 napi_value testNativeWindowNativeObjectReferenceNormal(napi_env env, napi_callback_info info)
1149 {
1150 napi_value result = nullptr;
1151
1152 struct result result1 = InitNativeWindow();
1153 OH_NativeImage *image = result1.image;
1154 OHNativeWindow *nativeWindow = result1.nativeWindow;
1155 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1156 int fenceFd = -1;
1157 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1158
1159 auto magicId = OH_NativeWindow_NativeObjectReference(nativeWindow);
1160 if (magicId != 0) {
1161 napi_create_int32(env, CONSTANT_1, &result);
1162 return result;
1163 }
1164
1165 magicId = OH_NativeWindow_NativeObjectReference(nativeWindowBuffer);
1166 if (magicId != 0) {
1167 napi_create_int32(env, CONSTANT_2, &result);
1168 return result;
1169 }
1170 DestroyNativeWindowImage(image, nativeWindow);
1171 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1172 napi_create_int32(env, SUCCESS, &result);
1173 return result;
1174 }
1175
testNativeWindowNativeObjectUnreferenceNullptr(napi_env env, napi_callback_info info)1176 napi_value testNativeWindowNativeObjectUnreferenceNullptr(napi_env env, napi_callback_info info)
1177 {
1178 napi_value result = nullptr;
1179
1180 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1181
1182 auto magicId = OH_NativeWindow_NativeObjectUnreference(nullptr);
1183 if (magicId != CONSTANT_40001000) {
1184 napi_create_int32(env, CONSTANT_1, &result);
1185 return result;
1186 }
1187
1188 magicId = OH_NativeWindow_NativeObjectUnreference(nativeWindowBuffer);
1189 if (magicId != CONSTANT_40001000) {
1190 napi_create_int32(env, CONSTANT_2, &result);
1191 return result;
1192 }
1193
1194 napi_create_int32(env, SUCCESS, &result);
1195 return result;
1196 }
1197
testNativeWindowNativeObjectUnreferenceNormal(napi_env env, napi_callback_info info)1198 napi_value testNativeWindowNativeObjectUnreferenceNormal(napi_env env, napi_callback_info info)
1199 {
1200 napi_value result = nullptr;
1201
1202 struct result result1 = InitNativeWindow();
1203 OH_NativeImage *image = result1.image;
1204 OHNativeWindow *nativeWindow = result1.nativeWindow;
1205 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1206 int fenceFd = -1;
1207 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1208
1209 auto magicId = OH_NativeWindow_NativeObjectUnreference(nativeWindow);
1210 if (magicId != 0) {
1211 napi_create_int32(env, CONSTANT_1, &result);
1212 return result;
1213 }
1214
1215 magicId = OH_NativeWindow_NativeObjectUnreference(nativeWindowBuffer);
1216 if (magicId != 0) {
1217 napi_create_int32(env, CONSTANT_2, &result);
1218 return result;
1219 }
1220 DestroyNativeWindowImage(image, nativeWindow);
1221 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1222 napi_create_int32(env, SUCCESS, &result);
1223 return result;
1224 }
1225
1226
testNativeWindowNativeWindowAttachBufferNullptr(napi_env env, napi_callback_info info)1227 napi_value testNativeWindowNativeWindowAttachBufferNullptr(napi_env env, napi_callback_info info)
1228 {
1229 napi_value result = nullptr;
1230
1231 struct result result1 = InitNativeWindow();
1232 OH_NativeImage *image = result1.image;
1233 OHNativeWindow *nativeWindow = result1.nativeWindow;
1234 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1235 int fenceFd = -1;
1236 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1237
1238 auto flag = OH_NativeWindow_NativeWindowAttachBuffer(nullptr, nativeWindowBuffer);
1239 if (flag != CONSTANT_40001000) {
1240 napi_create_int32(env, CONSTANT_1, &result);
1241 return result;
1242 }
1243
1244 flag = OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nullptr);
1245 if (flag != CONSTANT_40001000) {
1246 napi_create_int32(env, CONSTANT_1, &result);
1247 return result;
1248 }
1249 DestroyNativeWindowImage(image, nativeWindow);
1250 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1251 napi_create_int32(env, SUCCESS, &result);
1252 return result;
1253 }
1254
testNativeWindowNativeWindowDetachBufferNullptr(napi_env env, napi_callback_info info)1255 napi_value testNativeWindowNativeWindowDetachBufferNullptr(napi_env env, napi_callback_info info)
1256 {
1257 napi_value result = nullptr;
1258
1259 struct result result1 = InitNativeWindow();
1260 OH_NativeImage *image = result1.image;
1261 OHNativeWindow *nativeWindow = result1.nativeWindow;
1262 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1263 int fenceFd = -1;
1264 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1265
1266 auto flag = OH_NativeWindow_NativeWindowDetachBuffer(nullptr, nativeWindowBuffer);
1267 if (flag != CONSTANT_40001000) {
1268 napi_create_int32(env, CONSTANT_1, &result);
1269 return result;
1270 }
1271
1272 flag = OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nullptr);
1273 if (flag != CONSTANT_40001000) {
1274 napi_create_int32(env, CONSTANT_2, &result);
1275 return result;
1276 }
1277 DestroyNativeWindowImage(image, nativeWindow);
1278 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1279 napi_create_int32(env, SUCCESS, &result);
1280 return result;
1281 }
1282
1283
testNativeWindowNativeWindowDetachBufferNormal(napi_env env, napi_callback_info info)1284 napi_value testNativeWindowNativeWindowDetachBufferNormal(napi_env env, napi_callback_info info)
1285 {
1286 napi_value result = nullptr;
1287
1288 struct result result1 = InitNativeWindow();
1289 OH_NativeImage *image = result1.image;
1290 OHNativeWindow *nativeWindow = result1.nativeWindow;
1291 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1292 int fenceFd = -1;
1293 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1294 if (flag != 0) {
1295 napi_create_int32(env, FAIL, &result);
1296 return result;
1297 }
1298
1299 flag = OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nativeWindowBuffer);
1300 if (flag != 0) {
1301 napi_create_int32(env, 1, &result);
1302 return result;
1303 }
1304
1305 flag = OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nativeWindowBuffer);
1306 if (flag != CONSTANT_41210000) {
1307 napi_create_int32(env, CONSTANT_2, &result);
1308 return result;
1309 }
1310
1311 DestroyNativeWindowImage(image, nativeWindow);
1312 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1313
1314 napi_create_int32(env, SUCCESS, &result);
1315 return result;
1316 }
1317
1318
testNativeWindowNativeWindowAttachBufferErrorCode(napi_env env, napi_callback_info info)1319 napi_value testNativeWindowNativeWindowAttachBufferErrorCode(napi_env env, napi_callback_info info)
1320 {
1321 napi_value result = nullptr;
1322
1323 struct result result1 = InitNativeWindow();
1324 OH_NativeImage *image = result1.image;
1325 OHNativeWindow *nativeWindow = result1.nativeWindow;
1326 OHNativeWindowBuffer *nwb1, *nwb2, *nwb3, *nwb4;
1327 int fenceFd = -1;
1328 OH_NativeBuffer_Config config{
1329 .width = 0x100,
1330 .height = 0x100,
1331 .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1332 .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1333 };
1334 OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&config);
1335 OHNativeWindowBuffer **arr[] = {&nwb1, &nwb2, &nwb3, &nwb4};
1336 nwb1 = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(nativeBuffer);
1337 nwb2 = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(nativeBuffer);
1338 nwb3 = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(nativeBuffer);
1339 nwb4 = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(nativeBuffer);
1340
1341 auto flag = OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nwb1);
1342 flag = OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nwb2);
1343 flag = OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nwb3);
1344 flag = OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nwb4);
1345 DestroyNativeWindowImage(image, nativeWindow);
1346 OH_NativeBuffer_Unreference(nativeBuffer);
1347 napi_create_int32(env, SUCCESS, &result);
1348 return result;
1349 }
1350
1351
testNativeWindowNativeWindowAttachBufferNormal(napi_env env, napi_callback_info info)1352 napi_value testNativeWindowNativeWindowAttachBufferNormal(napi_env env, napi_callback_info info)
1353 {
1354 napi_value result = nullptr;
1355
1356 struct result result1 = InitNativeWindow();
1357 OH_NativeImage *image = result1.image;
1358 OHNativeWindow *nativeWindow = result1.nativeWindow;
1359 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1360 int fenceFd = -1;
1361 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1362 if (flag != 0) {
1363 napi_create_int32(env, FAIL, &result);
1364 return result;
1365 }
1366
1367 flag = OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nativeWindowBuffer);
1368 if (flag != CONSTANT_41208000) {
1369 napi_create_int32(env, CONSTANT_1, &result);
1370 return result;
1371 }
1372
1373 flag = OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nativeWindowBuffer);
1374 if (flag != 0) {
1375 napi_create_int32(env, CONSTANT_2, &result);
1376 return result;
1377 }
1378
1379 flag = OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, nativeWindowBuffer);
1380 if (flag != 0) {
1381 napi_create_int32(env, CONSTANT_3, &result);
1382 return result;
1383 }
1384
1385 DestroyNativeWindowImage(image, nativeWindow);
1386 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1387
1388 napi_create_int32(env, SUCCESS, &result);
1389 return result;
1390 }
1391
1392
testNativeWindowNativeWindowDetachBufferErrorCode(napi_env env, napi_callback_info info)1393 napi_value testNativeWindowNativeWindowDetachBufferErrorCode(napi_env env, napi_callback_info info)
1394 {
1395 napi_value result = nullptr;
1396
1397 struct result result1 = InitNativeWindow();
1398 OH_NativeImage *image = result1.image;
1399 OHNativeWindow *nativeWindow = result1.nativeWindow;
1400 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1401 int fenceFd;
1402 Region::Rect rect{
1403 .x = 0x100,
1404 .y = 0x100,
1405 .w = 0x100,
1406 .h = 0x100,
1407 };
1408 Region region{.rects = &rect};
1409 auto ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
1410 ret = OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, nativeWindowBuffer, fenceFd, region);
1411 if (ret != 0) {
1412 napi_create_int32(env, FAIL, &result);
1413 return result;
1414 }
1415 // 3.
1416 auto flag = OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, nativeWindowBuffer);
1417 if (flag != CONSTANT_41207000) {
1418 napi_create_int32(env, FAIL, &result);
1419 return result;
1420 }
1421
1422 DestroyNativeWindowImage(image, nativeWindow);
1423 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer);
1424
1425 napi_create_int32(env, SUCCESS, &result);
1426 return result;
1427 }
1428
1429
testNativeWindowNativeWindowAtDetachDifferentBufferNormal(napi_env env, napi_callback_info info)1430 napi_value testNativeWindowNativeWindowAtDetachDifferentBufferNormal(napi_env env, napi_callback_info info)
1431 {
1432 napi_value result = nullptr;
1433
1434 struct result result1 = InitNativeWindow();
1435 OH_NativeImage *image = result1.image;
1436 OHNativeWindow *nativeWindow = result1.nativeWindow;
1437 OHNativeWindowBuffer *nativeWindowBuffer1, *nativeWindowBuffer2, *nativeWindowBuffer3;
1438 int fenceFd = -1;
1439 OHNativeWindowBuffer **nativeWindowBuffers[] = {&nativeWindowBuffer1, &nativeWindowBuffer2, &nativeWindowBuffer3};
1440 for (int i = 0; i < CONSTANT_3; ++i) {
1441 auto flag = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, nativeWindowBuffers[i], &fenceFd);
1442 if (flag != 0) {
1443 napi_create_int32(env, CONSTANT_1000 + i + 1, &result);
1444 return result;
1445 }
1446 }
1447
1448 for (int i = 0; i < CONSTANT_3; ++i) {
1449 auto flag = OH_NativeWindow_NativeWindowDetachBuffer(nativeWindow, *nativeWindowBuffers[i]);
1450 if (flag != 0) {
1451 napi_create_int32(env, CONSTANT_2 * CONSTANT_1000 + i + 1, &result);
1452 return result;
1453 }
1454 }
1455
1456 for (int i = 0; i < CONSTANT_3; ++i) {
1457 auto flag = OH_NativeWindow_NativeWindowAttachBuffer(nativeWindow, *nativeWindowBuffers[i]);
1458 if (flag != 0) {
1459 napi_create_int32(env, CONSTANT_3 * CONSTANT_1000 + i + 1, &result);
1460 return result;
1461 }
1462 }
1463
1464 DestroyNativeWindowImage(image, nativeWindow);
1465 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer1);
1466 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer2);
1467 OH_NativeWindow_DestroyNativeWindowBuffer(nativeWindowBuffer3);
1468
1469 napi_create_int32(env, SUCCESS, &result);
1470 return result;
1471 }
1472
1473 struct Paramater {
1474 OHNativeWindow *nativeWindow1 = nullptr;
1475 OHNativeWindow *nativeWindow2 = nullptr;
1476 OHNativeWindowBuffer *nativeWindowBuffer1 = nullptr;
1477 OHNativeWindowBuffer *nativeWindowBuffer2 = nullptr;
1478 OH_NativeBuffer *nativeBuffer1 = nullptr;
1479 OH_NativeBuffer *nativeBuffer2 = nullptr;
1480 };
1481
testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal1( napi_env env, napi_callback_info info, Paramater paramater)1482 napi_value testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal1(
1483 napi_env env, napi_callback_info info, Paramater paramater)
1484 {
1485 napi_value result = nullptr;
1486 int32_t flag = OH_NativeWindow_NativeWindowAttachBuffer(paramater.nativeWindow1, paramater.nativeWindowBuffer1);
1487 if (flag != 0) {
1488 napi_create_int32(env, CONSTANT_2 * CONSTANT_1000 + CONSTANT_1, &result);
1489 return result;
1490 }
1491 flag = OH_NativeWindow_NativeWindowAttachBuffer(paramater.nativeWindow2, paramater.nativeWindowBuffer2);
1492 if (flag != 0) {
1493 napi_create_int32(env, CONSTANT_2 * CONSTANT_1000 + CONSTANT_2, &result);
1494 return result;
1495 }
1496 return result;
1497 }
1498
1499
testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal2(napi_env env, napi_callback_info info, Paramater paramater)1500 napi_value testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal2(napi_env env, napi_callback_info info,
1501 Paramater paramater)
1502 {
1503 napi_value result = nullptr;
1504 auto flag = OH_NativeWindow_NativeWindowAttachBuffer(paramater.nativeWindow2, paramater.nativeWindowBuffer1);
1505 if (flag != 0) {
1506 napi_create_int32(env, CONSTANT_3 * CONSTANT_1000 + CONSTANT_1, &result);
1507 return result;
1508 }
1509 flag = OH_NativeWindow_NativeWindowAttachBuffer(paramater.nativeWindow1, paramater.nativeWindowBuffer2);
1510 if (flag != 0) {
1511 napi_create_int32(env, CONSTANT_3 * CONSTANT_1000 + CONSTANT_2, &result);
1512 return result;
1513 }
1514 // 4.
1515 flag = OH_NativeWindow_NativeWindowDetachBuffer(paramater.nativeWindow1, paramater.nativeWindowBuffer1);
1516 if (flag != 0) {
1517 napi_create_int32(env, CONSTANT_4 * CONSTANT_1000 + CONSTANT_1, &result);
1518 return result;
1519 }
1520 flag = OH_NativeWindow_NativeWindowDetachBuffer(paramater.nativeWindow2, paramater.nativeWindowBuffer2);
1521 if (flag != 0) {
1522 napi_create_int32(env, CONSTANT_4 * CONSTANT_1000 + CONSTANT_2, &result);
1523 return result;
1524 }
1525 // 5.
1526 flag = OH_NativeWindow_NativeWindowAttachBuffer(paramater.nativeWindow2, paramater.nativeWindowBuffer1);
1527 if (flag == 0) {
1528 napi_create_int32(env, CONSTANT_5 * CONSTANT_1000 + CONSTANT_1, &result);
1529 return result;
1530 }
1531 flag = OH_NativeWindow_NativeWindowAttachBuffer(paramater.nativeWindow1, paramater.nativeWindowBuffer2);
1532 if (flag == 0) {
1533 napi_create_int32(env, CONSTANT_5 * CONSTANT_1000 + CONSTANT_2, &result);
1534 return result;
1535 }
1536 return result;
1537 }
1538
testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal(napi_env env, napi_callback_info info)1539 napi_value testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal(napi_env env, napi_callback_info info)
1540 {
1541 napi_value result = nullptr;
1542 struct Paramater paramater;
1543 struct result result1 = InitNativeWindow();
1544 struct result result2 = InitNativeWindow();
1545 OH_NativeImage *image1 = result1.image;
1546 paramater.nativeWindow1 = result1.nativeWindow;
1547 OH_NativeImage *image2 = result2.image;
1548 paramater.nativeWindow2 = result2.nativeWindow;
1549 OH_NativeBuffer_Config config{
1550 .width = 0x100,
1551 .height = 0x100,
1552 .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1553 .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1554 };
1555 paramater.nativeBuffer1 = OH_NativeBuffer_Alloc(&config);
1556 paramater.nativeBuffer2 = OH_NativeBuffer_Alloc(&config);
1557 paramater.nativeWindowBuffer1 = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(paramater.nativeBuffer1);
1558 if (paramater.nativeWindowBuffer1 == nullptr) {
1559 napi_create_int32(env, CONSTANT_1000 + CONSTANT_1, &result);
1560 return result;
1561 }
1562 paramater.nativeWindowBuffer2 = OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer(paramater.nativeBuffer2);
1563 if (paramater.nativeWindowBuffer2 == nullptr) {
1564 napi_create_int32(env, CONSTANT_1000 + CONSTANT_2, &result);
1565 return result;
1566 }
1567 result = testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal1(env, info, paramater);
1568 if (result != nullptr) {
1569 return result;
1570 }
1571 result = testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal2(env, info, paramater);
1572 if (result != nullptr) {
1573 return result;
1574 }
1575 DestroyNativeWindowImage(image1, paramater.nativeWindow1);
1576 DestroyNativeWindowImage(image2, paramater.nativeWindow2);
1577 OH_NativeWindow_DestroyNativeWindowBuffer(paramater.nativeWindowBuffer1);
1578 OH_NativeWindow_DestroyNativeWindowBuffer(paramater.nativeWindowBuffer2);
1579 OH_NativeBuffer_Unreference(paramater.nativeBuffer1);
1580 OH_NativeBuffer_Unreference(paramater.nativeBuffer2);
1581 napi_create_int32(env, SUCCESS, &result);
1582 return result;
1583 }
1584
testNativeWindowNativeWindowHandleOptNullptr(napi_env env, napi_callback_info info)1585 napi_value testNativeWindowNativeWindowHandleOptNullptr(napi_env env, napi_callback_info info)
1586 {
1587 napi_value result = nullptr;
1588
1589 int code = SET_BUFFER_GEOMETRY;
1590 auto flag = OH_NativeWindow_NativeWindowHandleOpt(nullptr, code, 100, 100);
1591 if (flag != CONSTANT_40001000) {
1592 napi_create_int32(env, FAIL, &result);
1593 return result;
1594 }
1595
1596 napi_create_int32(env, SUCCESS, &result);
1597 return result;
1598 }
1599
1600
testNativeWindowNativeWindowHandleOptSetGetBufferGeometryNormal(napi_env env, napi_callback_info info)1601 napi_value testNativeWindowNativeWindowHandleOptSetGetBufferGeometryNormal(napi_env env, napi_callback_info info)
1602 {
1603 napi_value result = nullptr;
1604
1605 struct result result1 = InitNativeWindow();
1606 OH_NativeImage *image = result1.image;
1607 OHNativeWindow *nativeWindow = result1.nativeWindow;
1608
1609 int arr[][2] = {{0, 0}, {2147483647, 2147483647}, {100, 100}, {-1000, -1000}, {-1000, 1000},
1610 {1000, -1000}, {-2147483647, -2147483647}, {-1, -1}};
1611 int width1, height1;
1612 auto ret = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, GET_BUFFER_GEOMETRY, &width1, &height1);
1613 if (ret != 0) {
1614 napi_create_int32(env, CONSTANT_1, &result);
1615 return result;
1616 }
1617
1618 for (int i = 0; i < sizeof(arr) / sizeof(int[2]); ++i) {
1619 int width = arr[i][0];
1620 int height = arr[i][1];
1621 auto flag = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, SET_BUFFER_GEOMETRY, width, height);
1622 if (flag != 0) {
1623 napi_create_int32(env, (i + 1) * CONSTANT_1000 + CONSTANT_1, &result);
1624 return result;
1625 }
1626 int width2, height2;
1627 flag = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, GET_BUFFER_GEOMETRY, &height2, &width2);
1628 if (flag != 0) {
1629 napi_create_int32(env, (i + 1) * CONSTANT_1000 + CONSTANT_2, &result);
1630 return result;
1631 }
1632 if (width != width2 || height != height2) {
1633 napi_create_int32(env, (i + 1) * CONSTANT_1000 + CONSTANT_3, &result);
1634 return result;
1635 }
1636 }
1637
1638 DestroyNativeWindowImage(image, nativeWindow);
1639 napi_create_int32(env, SUCCESS, &result);
1640 return result;
1641 }
1642
testNativeWindowNativeWindowHandleOptSetGetBufferGeometryAbnormal(napi_env env, napi_callback_info info)1643 napi_value testNativeWindowNativeWindowHandleOptSetGetBufferGeometryAbnormal(napi_env env, napi_callback_info info)
1644 {
1645 napi_value result = nullptr;
1646 OH_NativeImage *image1 = InitNativeWindow().image;
1647 OHNativeWindow *nativeWindow = InitNativeWindow().nativeWindow;
1648
1649 int32_t width, height;
1650
1651 // 1.
1652 auto flag = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, SET_BUFFER_GEOMETRY, NULL, NULL);
1653 if (flag != 0) { // 应为 非0
1654 napi_create_int32(env, CONSTANT_1000 + CONSTANT_1, &result);
1655 return result;
1656 }
1657 flag = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, GET_BUFFER_GEOMETRY, &height, &width);
1658 if (flag != 0) { // 应为 成功
1659 napi_create_int32(env, CONSTANT_1000 + CONSTANT_2, &result);
1660 return result;
1661 }
1662 if (width != 0 || height != 0) {
1663 napi_create_int32(env, CONSTANT_1000 + CONSTANT_3, &result);
1664 return result;
1665 }
1666 // 2.2147483648
1667 flag = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, SET_BUFFER_GEOMETRY, CONSTANT_9999999999999999999,
1668 CONSTANT_9999999999999999999);
1669 if (flag != 0) { // 应为 非0
1670 napi_create_int32(env, CONSTANT_2 * CONSTANT_1000 + CONSTANT_1, &result);
1671 return result;
1672 }
1673 flag = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, GET_BUFFER_GEOMETRY, &height, &width);
1674 if (flag != 0) { // 应为 成功
1675 napi_create_int32(env, CONSTANT_2 * CONSTANT_1000 + CONSTANT_2, &result);
1676 return result;
1677 }
1678 // 3.
1679 flag = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, SET_BUFFER_GEOMETRY, "abc", "abc");
1680 if (flag != 0) { // 应为 失败
1681 napi_create_int32(env, CONSTANT_2 * CONSTANT_1000 + CONSTANT_3, &result);
1682 return result;
1683 }
1684
1685 DestroyNativeWindowImage(image1, nativeWindow);
1686 napi_create_int32(env, SUCCESS, &result);
1687 return result;
1688 }
1689