• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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