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