• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2024 SwanLink (Jiangsu) Technology Development 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 */
15import { MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
16import napitest from 'libnapitest.so';
17// import napitest from 'libentry.so';
18
19const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
20
21/**
22 * Defines the event handler to be called when the worker thread receives a message sent by the host thread.
23 * The event handler is executed in the worker thread.
24 *
25 * @param e message data
26 */
27workerPort.onmessage = (e: MessageEvents) => {
28  console.info('Worker received message:', e.data);
29  switch (e.data) {
30    case 'getLastError': {
31      let getLastErrorValue = napitest.napiSerialize();
32      console.info('Worker: napiSerialize value is ' + getLastErrorValue);
33      workerPort.postMessage(getLastErrorValue);
34      break;
35    }
36    case 'isError': {
37      let isErrorValue = napitest.isError(true);
38      console.info('Worker: isError ret is ' + isErrorValue);
39      workerPort.postMessage(isErrorValue);
40      break;
41    }
42    case 'createError': {
43      let createErrorValue = napitest.createError();
44      console.info('Worker: createError value is ' + createErrorValue);
45      workerPort.postMessage(createErrorValue);
46      break;
47    }
48    case 'createRangeError': {
49      let createRangeErrorValue = napitest.createRangeError();
50      console.info('Worker: createRangeError value is ' + createRangeErrorValue);
51      workerPort.postMessage(createRangeErrorValue);
52      break;
53    }
54    case 'isExceptionPending': {
55      let isExceptionPendingValue = napitest.isExceptionPending();
56      console.info('Worker: isExceptionPending value is ' + isExceptionPendingValue);
57      workerPort.postMessage(isExceptionPendingValue);
58      break;
59    }
60    case 'createReference': {
61      let createReferenceValue = napitest.createReference();
62      console.info('Worker: createReference value is ' + createReferenceValue);
63      workerPort.postMessage(createReferenceValue);
64      break;
65    }
66    case 'referenceRefAndUnref': {
67      let referenceRefAndUnrefValue = napitest.referenceRefAndUnref();
68      console.info('Worker: referenceRefAndUnref value is ' + referenceRefAndUnrefValue);
69      workerPort.postMessage(referenceRefAndUnrefValue);
70      break;
71    }
72    case 'createArrayAndGetLength': {
73      let array = [1, 2];
74      let createArrayAndGetLengthValue = napitest.createArrayAndGetLength(array);
75      let createArrayAndGetLengthObj = JSON.stringify(createArrayAndGetLengthValue);
76      console.info('Worker: createArrayAndGetLength value is ' + createArrayAndGetLengthObj);
77      workerPort.postMessage(createArrayAndGetLengthObj);
78      break;
79    }
80    case 'createExternal': {
81      let createExternalValue = napitest.createExternal();
82      console.info('Worker: createExternal value is ' + createExternalValue);
83      workerPort.postMessage(createExternalValue);
84      break;
85    }
86    case 'createExternalArraybuffer': {
87      let createExternalArraybufferValue = napitest.createExternalArraybuffer();
88      console.info('Worker: createExternalArraybuffer value is ', createExternalArraybufferValue);
89      let createExternalArraybufferRes = createExternalArraybufferValue instanceof ArrayBuffer;
90      workerPort.postMessage(createExternalArraybufferRes);
91      break;
92    }
93    case 'createObject': {
94      let createObjectValue = napitest.createObject();
95      console.info('Worker: createObject value is ', createObjectValue);
96      let createObjectRes = createObjectValue instanceof Object;
97      workerPort.postMessage(createObjectRes);
98      break;
99    }
100    case 'createSymbol': {
101      let symbolValue = napitest.createSymbol('symbol');
102      console.info('Worker: createSymbol value is ' + symbolValue);
103      workerPort.postMessage(symbolValue);
104      break;
105    }
106    case 'createTypeArray': {
107      let typeArrayValue = napitest.createTypeArray();
108      console.info('Worker: createTypeArray value is ', typeArrayValue);
109      workerPort.postMessage(typeArrayValue instanceof Int32Array);
110      break;
111    }
112    case 'getValueBool': {
113      let boolValue = napitest.getValueBool(false);
114      console.info('Worker: getValueBool value is ', boolValue);
115      workerPort.postMessage(boolValue);
116      break;
117    }
118    case 'createAndGetInt32': {
119      let int32Value = napitest.createAndGetInt32(32);
120      console.info('Worker: createAndGetInt32 value is ', int32Value);
121      workerPort.postMessage(int32Value);
122      break;
123    }
124    case 'createAndGetUInt32': {
125      let uInt32Value = napitest.createAndGetUInt32(32);
126      console.info('Worker: createAndGetUInt32 value is ', uInt32Value);
127      workerPort.postMessage(uInt32Value);
128      break;
129    }
130    case 'createAndGetInt64': {
131      let int64Value = napitest.createAndGetInt64(23);
132      console.info('Worker: createAndGetInt64 value is ', int64Value);
133      workerPort.postMessage(int64Value);
134      break;
135    }
136    case 'createDouble': {
137      let doubleValue = napitest.createDouble(24.67);
138      console.info('Worker: createDouble value is ', doubleValue);
139      workerPort.postMessage(doubleValue);
140      break;
141    }
142    case 'createAndGetStringUtf16': {
143      let utf16Value = napitest.createAndGetStringUtf16('he');
144      console.info('Worker: createAndGetStringUtf16 value is ', utf16Value);
145      workerPort.postMessage(utf16Value);
146      break;
147    }
148    case 'stringUtf16OfCase': {
149      let utf16CaseValue = napitest.stringUtf16OfCase('abc2r42');
150      console.info('Worker: stringUtf16OfCase value is ', utf16CaseValue);
151      workerPort.postMessage(utf16CaseValue);
152      break;
153    }
154    case 'getValueDouble': {
155      let valueDouble = napitest.getValueDouble(24.5);
156      console.info('Worker: getValueDouble value is ', valueDouble);
157      workerPort.postMessage(valueDouble);
158      break;
159    }
160    case 'getValueExternal': {
161      let externalValue = napitest.getValueExternal();
162      console.info('Worker: getValueExternal value is ', externalValue);
163      workerPort.postMessage(externalValue);
164      break;
165    }
166    case 'getNull': {
167      let nullValue = napitest.getNull();
168      console.info('Worker: getNull value is ', nullValue);
169      workerPort.postMessage(nullValue);
170      break;
171    }
172    case 'getUndefined': {
173      let undefinedValue = napitest.getUndefined();
174      console.info('Worker: getUndefined value is ', undefinedValue);
175      workerPort.postMessage(undefinedValue);
176      break;
177    }
178    case 'coerceToBool': {
179      let coerceBoolValue = napitest.coerceToBool(0);
180      console.info('Worker: coerceToBool value is ', coerceBoolValue);
181      workerPort.postMessage(coerceBoolValue);
182      break;
183    }
184    case 'coerceToNumber': {
185      let coerceNumberValue = napitest.coerceToNumber('12');
186      console.info('Worker: coerceToNumber value is ', coerceNumberValue);
187      workerPort.postMessage(coerceNumberValue);
188      break;
189    }
190    case 'coerceToObject': {
191      let obj = napitest.coerceToObject([2, 3]);
192      console.info('Worker: coerceToObject value is: ', obj);
193      workerPort.postMessage(JSON.stringify(obj));
194      break;
195    }
196    case 'coerceToString': {
197      let value = napitest.coerceToString(123);
198      console.info('Worker: coerceToString value is: ', value);
199      workerPort.postMessage(value);
200      break;
201    }
202    case 'typeOf': {
203      let value = napitest.typeOf('test');
204      console.info('Worker: typeOf value is: ', value);
205      workerPort.postMessage(value);
206      break;
207    }
208    case 'isArray': {
209      let value = napitest.isArray();
210      console.info('Worker: isArray value is: ', value);
211      workerPort.postMessage(value);
212      break;
213    }
214    case 'strictEquals': {
215      let value = napitest.strictEquals();
216      console.info('Worker: strictEquals value is: ', value);
217      workerPort.postMessage(value);
218      break;
219    }
220    case 'getPropertyNames': {
221      let value = napitest.getPropertyNames();
222      console.info('Worker: getPropertyNames value is: ', value);
223      workerPort.postMessage(value);
224      break;
225    }
226    case 'setProperty': {
227      let value = napitest.setProperty();
228      console.info('Worker: setProperty value is: ', value);
229      workerPort.postMessage(value instanceof Object);
230      break;
231    }
232    case 'getProperty': {
233      let value = napitest.getProperty();
234      console.info('Worker: getProperty value is: ', value);
235      workerPort.postMessage(value instanceof Object);
236      break;
237    }
238    case 'hasProperty': {
239      let value = napitest.hasProperty();
240      console.info('Worker: hasProperty value is: ', value);
241      workerPort.postMessage(value);
242      break;
243    }
244    case 'setAndDeleteProperty': {
245      interface Person {
246        name: string,
247        age: number
248      }
249
250      let peop: Person = { name: 'John', age: 30 };
251      let value = napitest.setAndDeleteProperty(peop, 'a');
252      console.info('Worker: setAndDeleteProperty value is: ', value);
253      workerPort.postMessage(value);
254      break;
255    }
256    case 'hasOwnProperty': {
257      interface Person {
258        name: string,
259        age: number
260      }
261
262      let peop: Person = {
263        name: 'zhangsan',
264        age: 18
265      };
266      let value = napitest.hasOwnProperty(peop, 'name');
267      console.info('Worker: hasOwnProperty value is: ', value);
268      workerPort.postMessage(value);
269      break;
270    }
271    case 'setNamedProperty': {
272      let value = napitest.setNamedProperty([1, 2], 'e', false);
273      console.info('Worker: setNamedProperty value is: ', value);
274      workerPort.postMessage(value);
275      break;
276    }
277    case 'getNamedProperty': {
278      interface Person {
279        name: string,
280        age: number
281      }
282
283      let peop: Person = {
284        name: 'zhangsan',
285        age: 18
286      };
287      let value = napitest.getNamedProperty(peop, 'name');
288      console.info('Worker: getNamedProperty value is: ', value);
289      workerPort.postMessage(value);
290      break;
291    }
292    case 'hasNamedProperty': {
293      interface Person {
294        name: string,
295        age: number
296      }
297
298      let peop: Person = {
299        name: 'zhangsan',
300        age: 18
301      };
302      let value = napitest.hasNamedProperty(peop, 'name');
303      console.info('Worker: hasNamedProperty value is: ', value);
304      workerPort.postMessage(value);
305      break;
306    }
307    case 'setElement': {
308      let value = napitest.setElement();
309      console.info('Worker: setElement value is: ', value);
310      workerPort.postMessage(value instanceof Object);
311      break;
312    }
313    case 'getElement': {
314      let value = napitest.getElement();
315      console.info('Worker: getElement value is: ', value);
316      workerPort.postMessage(value instanceof Object);
317      break;
318    }
319    case 'hasElement': {
320      let value = napitest.hasElement();
321      console.info('Worker: hasElement value is: ', value);
322      workerPort.postMessage(value instanceof Object);
323      break;
324    }
325    case 'deleteElement': {
326      let value = napitest.deleteElement();
327      console.info('Worker: deleteElement value is: ', value);
328      workerPort.postMessage(value instanceof Object);
329      break;
330    }
331    case 'defineProperties': {
332      let value = napitest.defineProperties();
333      console.info('Worker: defineProperties value is: ', value);
334      workerPort.postMessage(value instanceof Object);
335      break;
336    }
337    case 'callFunctionNull': {
338      let value = napitest.callFunctionNull(null);
339      console.info('Worker: callFunctionNull value is: ', value);
340      workerPort.postMessage(value);
341      break;
342    }
343    case 'napiCreateFunctionFuncNull': {
344      let value = napitest.napiCreateFunctionFuncNull();
345      console.info('Worker: napiCreateFunctionFuncNull value is: ', value);
346      workerPort.postMessage(value);
347      break;
348    }
349    case 'napiGetCbInfo': {
350      let value = napitest.napiGetCbInfo(12.06);
351      console.info('Worker: napiGetCbInfo value is: ', value);
352      workerPort.postMessage(value);
353      break;
354    }
355    case 'unwrap': {
356      let value = napitest.unwrap();
357      console.info('Worker: unwrap value is: ', value);
358      workerPort.postMessage(value);
359      break;
360    }
361    case 'removeWrap': {
362      let value = napitest.removeWrap();
363      console.info('Worker: removeWrap value is: ', value);
364      workerPort.postMessage(value);
365      break;
366    }
367    case 'getVersion': {
368      let value = napitest.getVersion();
369      console.info('Worker: getVersion value is: ', value);
370      workerPort.postMessage(value);
371      break;
372    }
373    case 'createPromise': {
374      let value = napitest.createPromise();
375      console.info('Worker: createPromise value is: ', value);
376      workerPort.postMessage(value);
377      break;
378    }
379    case 'resolveAndRejectDeferred': {
380      let value = napitest.resolveAndRejectDeferred();
381      console.info('Worker: resolveAndRejectDeferred value is: ', value);
382      workerPort.postMessage(value);
383      break;
384    }
385    case 'isPromise': {
386      let value = napitest.isPromise();
387      console.info('Worker: isPromise value is: ', value);
388      workerPort.postMessage(value);
389      break;
390    }
391    case 'napiCreateThreadsafeFunction': {
392      let value = napitest.napiCreateThreadsafeFunction();
393      console.info('Worker: napiCreateThreadsafeFunction value is: ', value);
394      workerPort.postMessage(value);
395      break;
396    }
397    case 'napiDeleteSerializationDataTest': {
398      let value = napitest.napiDeleteSerializationData();
399      console.info('Worker: napiDeleteSerializationDataTest value is: ', value);
400      workerPort.postMessage(value);
401      break;
402    }
403    case 'napiCallThreadsafeFunction': {
404      let value = napitest.napiCallThreadsafeFunction();
405      console.info('Worker: napiCallThreadsafeFunction value is: ', value);
406      workerPort.postMessage(value);
407      break;
408    }
409    case 'napiAnotherThreadSafeTest': {
410      let value = napitest.ThreadSafeTestNull(() => 666);
411      console.info('Worker: napiAnotherThreadSafeTest value is: ', value);
412      workerPort.postMessage(value);
413      break;
414    }
415    case 'napiRefThreadsafeFunction': {
416      let value = napitest.napiRefthreadSafeFunction();
417      console.info('Worker: napiRefThreadsafeFunction value is: ', value);
418      workerPort.postMessage(value);
419      break;
420    }
421    case 'napiCreateDate': {
422      let value = napitest.napiCreateDate();
423      console.info('Worker: napiCreateDate value is: ', value);
424      workerPort.postMessage(value);
425      break;
426    }
427    case 'napiCreateBigintInt64': {
428      let value = napitest.napiCreateBigintInt64();
429      console.info('Worker: napiCreateBigintInt64 value is: ', value);
430      workerPort.postMessage(value);
431      break;
432    }
433    case 'napiCreateBigintUint64': {
434      let value = napitest.napiCreateBigintUint64();
435      console.info('Worker: napiCreateBigintUint64 value is: ', value);
436      workerPort.postMessage(value);
437      break;
438    }
439    case 'napiCreateBigintWords': {
440      let value = napitest.napiCreateBigintWords();
441      console.info('Worker: napiCreateBigintWords value is: ', value);
442      workerPort.postMessage(value);
443      break;
444    }
445    case 'GetAllPropertyNamesEnvNull': {
446      let value = napitest.GetAllPropertyNamesEnvNull();
447      console.info('Worker: GetAllPropertyNamesEnvNull value is: ', value);
448      workerPort.postMessage(value);
449      break;
450    }
451    case 'napiSetInstanceData': {
452      let value = napitest.napiSetInstanceData();
453      console.info('Worker: napiSetInstanceData value is: ', value);
454      workerPort.postMessage(value);
455      break;
456    }
457    case 'getModuleFileName': {
458      let value = napitest.getModuleFileName().indexOf('.so');
459      console.info('Worker: getModuleFileName value is: ', value);
460      workerPort.postMessage(value);
461      break;
462    }
463    case 'createAsyncResource': {
464      let value = napitest.createAsyncResource({
465        foo: 'bar'
466      }, false);
467      console.info('Worker: createAsyncResource value is: ', value);
468      workerPort.postMessage(value);
469      break;
470    }
471    case 'asyncWorkWithQos': {
472      let value = napitest.asyncWorkWithQos(1000, (input) => {
473        console.info('Worker: asyncWorkWithQos ' + (input * 2));
474        return input * 2;
475      });
476      console.info('Worker: asyncWorkWithQos value is: ', value);
477      workerPort.postMessage(value);
478      break;
479    }
480    case 'napiRunScriptPathEnvNull': {
481      let value = napitest.napiRunScriptPathEnvNull();
482      console.info('Worker: napiRunScriptPathEnvNull value is: ', value);
483      workerPort.postMessage(value);
484      break;
485    }
486    case 'napiLoadModuleTest': {
487      let value = napitest.napiLoadModule();
488      console.info('Worker: napiLoadModuleTest value is: ', value);
489      workerPort.postMessage(value);
490      break;
491    }
492    case 'createObjectWithProperties': {
493      let value = napitest.createObjectWithProperties();
494      console.info('Worker: createObjectWithProperties value is: ', value);
495      workerPort.postMessage(value);
496      break;
497    }
498    case 'createObjectWithNamedProperties': {
499      let value = napitest.createObjectWithNamedProperties();
500      console.info('Worker: createObjectWithNamedProperties value is: ', value);
501      workerPort.postMessage(value);
502      break;
503    }
504    case 'coerceToNativeBindingObjectEnvNull': {
505      let value = napitest.coerceToNativeBindingObjectEnvNull(null);
506      console.info('Worker: coerceToNativeBindingObjectEnvNull value is: ', value);
507      workerPort.postMessage(value);
508      break;
509    }
510    case 'napiSerializeTest': {
511      let value = napitest.napiSerialize();
512      console.info('Worker: napiSerializeTest value is: ', value);
513      workerPort.postMessage(value);
514      break;
515    }
516    case 'napiDeSerializeTest': {
517      let value = napitest.napiDeSerialize();
518      console.info('Worker: napiDeSerializeTest value is: ', value);
519      workerPort.postMessage(value);
520      break;
521    }
522    case 'napiIsSendableTest': {
523      let value = napitest.NapiIsSendable([1, 2]);
524      console.info('Worker: napiIsSendableTest value is: ', value);
525      workerPort.postMessage(value);
526      break;
527    }
528    case 'NapiCreateSendableObject': {
529      let value = napitest.NapiCreateSendableObject();
530      console.info('Worker: NapiCreateSendableObject value is: ', value);
531      workerPort.postMessage(napitest.NapiIsSendable(value));
532      break;
533    }
534    case 'NapiCreateSendableArray': {
535      let value = napitest.NapiCreateSendableArray();
536      console.info('Worker: NapiCreateSendableArray value is: ', value);
537      let res = value.length == 0;
538      workerPort.postMessage(res && napitest.NapiIsSendable(value));
539      break;
540    }
541    case 'NapiCreateSendableArrayWithLength': {
542      let value = napitest.NapiCreateSendableArrayWithLength();
543      console.info('Worker: NapiCreateSendableArrayWithLength value is: ', value);
544      let res = value.length == 1;
545      workerPort.postMessage(res && napitest.NapiIsSendable(value));
546      break;
547    }
548    case 'NapiCreateSendableArrayBuffer': {
549      let value = napitest.NapiCreateSendableArrayBuffer();
550      console.info('Worker: NapiCreateSendableArrayBuffer value is: ', value);
551      let res = value.byteLength == 1024;
552      workerPort.postMessage(res && napitest.NapiIsSendable(value));
553      break;
554    }
555    case 'NapiCreateSendableTypedArray': {
556      let value = napitest.NapiCreateSendableTypedArray();
557      console.info('Worker: NapiCreateSendableTypedArray value is: ', value);
558      let res = value.byteLength == 1024;
559      workerPort.postMessage(res && napitest.NapiIsSendable(value));
560      break;
561    }
562    case 'NapiWrapSendable': {
563      let value = napitest.NapiCreateSendableObject();
564      napitest.NapiWrapSendable(value, 'data');
565      console.info('Worker: NapiWrapSendable value is: ', value);
566      let res1 = napitest.NapiUnwrapSendable(value) == 'data';
567      let res2 = napitest.NapiRemoveWrapSendable(value) == 'data';
568      let res3 = napitest.NapiUnwrapSendable(value) == undefined;
569      workerPort.postMessage(res1 && res2 && res3);
570      break;
571    }
572    case 'NapiWrapSendableWithSize': {
573      let value = napitest.NapiCreateSendableObject();
574      napitest.NapiWrapSendableWithSize(value, 'data');
575      console.info('Worker: NapiWrapSendableWithSize value is: ', value);
576      let res1 = napitest.NapiUnwrapSendable(value) == 'data';
577      let res2 = napitest.NapiRemoveWrapSendable(value) == 'data';
578      let res3 = napitest.NapiUnwrapSendable(value) == undefined;
579      workerPort.postMessage(res1 && res2 && res3);
580      break;
581    }
582    default:
583      break;
584  }
585};