1 /*
2  * Copyright (c) 2024 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 #include "napi/native_api.h"
17 #include "hilog/log.h"
18 #include <string>
19 #include <unistd.h>
20 #include "database/pasteboard/oh_pasteboard.h"
21 #include "database/pasteboard/oh_pasteboard_err_code.h"
22 #include "database/udmf/udmf.h"
23 #include "database/udmf/udmf_meta.h"
24 #include "database/udmf/uds.h"
25 #include "database/udmf/utd.h"
26 #include <iostream>
27 #include <map>
28 #include <ctime>
29 #include "common.h"
30 #include <cctype>
31 #include <condition_variable>
32 #include <cstdint>
33 #include <fcntl.h>
34 #include <functional>
35 #include <iostream>
36 #include <list>
37 #include <map>
38 #include <memory>
39 #include <mutex>
40 #include <string>
41 #include <sys/mman.h>
42 #include <thread>
43 #include <vector>
44 #include <string>
45 #include <random>
46 #include <chrono>
47 
48 
49 const char *TAG = "testLog";
50 static constexpr char HYPERLINK_URL[] = "file://data/image.png";
51 static constexpr char PLAINTEXT_CONTENT[] = "PLAINTEXT_CONTENT";
52 static void* GetDataCallback(void* context, const char* type);
53 static int g_callbackValue;
54 static constexpr int UPDATE_VALUE = 1;
55 
FinalizeFunc(void* context)56 void FinalizeFunc(void* context) {};
ContextFinalizeFunc(void* context)57 void ContextFinalizeFunc(void* context) {};
CallbackFunc(void* context, Pasteboard_NotifyType type)58 void CallbackFunc(void* context, Pasteboard_NotifyType type)
59 {
60     g_callbackValue = UPDATE_VALUE;
61 }
62 
63 
GetDataCallbackFunc(void* context, const char* type)64 void* GetDataCallbackFunc(void* context, const char* type)
65 {
66     auto plainText = OH_UdsPlainText_Create();
67     OH_UdsPlainText_SetAbstract(plainText, "doing something");
68     OH_UdsPlainText_SetContent(plainText, "doing something");
69     return plainText;
70 }
71 
GetDataCallback(void* context, const char* type)72 void* GetDataCallback(void* context, const char* type)
73 {
74     if (std::string(type) == "general.plain-text") {
75         OH_UdsPlainText* plainText = OH_UdsPlainText_Create();
76         OH_UdsPlainText_SetContent(plainText, PLAINTEXT_CONTENT);
77         return plainText;
78     } else if (std::string(type) == "general.hyperlink") {
79         OH_UdsHyperlink* link = OH_UdsHyperlink_Create();
80         OH_UdsHyperlink_SetUrl(link, HYPERLINK_URL);
81         return link;
82     }
83     return nullptr;
84 }
85 
OH_PasteboardSubscriber_Create0100(napi_env env, napi_callback_info info)86 static napi_value OH_PasteboardSubscriber_Create0100(napi_env env, napi_callback_info info)
87 {
88     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
89     napi_value result = nullptr;
90     napi_create_int32(env, observer != nullptr, &result);
91     OH_PasteboardObserver_Destroy(observer);
92     OH_PasteboardObserver_Destroy(nullptr);
93     return result;
94 }
95 
OH_PasteboardObserver_SetData0100(napi_env env, napi_callback_info info)96 static napi_value OH_PasteboardObserver_SetData0100(napi_env env, napi_callback_info info)
97 {
98     napi_value returncode = nullptr;
99     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
100     void* context = static_cast<void*>(pasteboard);
101     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
102     int setRes1 = OH_PasteboardObserver_SetData(observer, context, CallbackFunc, ContextFinalizeFunc);
103     napi_create_int32(env, setRes1 == ERR_OK, &returncode);
104     OH_PasteboardObserver_Destroy(observer);
105     OH_Pasteboard_Destroy(pasteboard);
106     return returncode;
107 }
108 
OH_PasteboardObserver_SetData0200(napi_env env, napi_callback_info info)109 static napi_value OH_PasteboardObserver_SetData0200(napi_env env, napi_callback_info info)
110 {
111     napi_value result = nullptr;
112     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
113     void* context = static_cast<void*>(pasteboard);
114     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
115 
116     int setRes1 = OH_PasteboardObserver_SetData(nullptr, context, CallbackFunc, ContextFinalizeFunc);
117 
118     napi_create_int32(env, setRes1 == ERR_INVALID_PARAMETER, &result);
119 
120     OH_PasteboardObserver_Destroy(observer);
121     OH_Pasteboard_Destroy(pasteboard);
122     return result;
123 }
124 
OH_PasteboardObserver_SetData0300(napi_env env, napi_callback_info info)125 static napi_value OH_PasteboardObserver_SetData0300(napi_env env, napi_callback_info info)
126 {
127     napi_value result = nullptr;
128     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
129     void* context = static_cast<void*>(pasteboard);
130     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
131     int setRes2 = OH_PasteboardObserver_SetData(observer, context, nullptr, ContextFinalizeFunc);
132     napi_create_int32(env, setRes2 == ERR_INVALID_PARAMETER, &result);
133     OH_PasteboardObserver_Destroy(observer);
134     OH_Pasteboard_Destroy(pasteboard);
135     return result;
136 }
137 
OH_PasteboardObserver_SetData0400(napi_env env, napi_callback_info info)138 static napi_value OH_PasteboardObserver_SetData0400(napi_env env, napi_callback_info info)
139 {
140     napi_value result = nullptr;
141     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
142     void* context = static_cast<void*>(pasteboard);
143     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
144     int setRes3 = OH_PasteboardObserver_SetData(observer, context, CallbackFunc, nullptr);
145     napi_create_int32(env, setRes3 == ERR_INVALID_PARAMETER, &result);
146     OH_PasteboardObserver_Destroy(observer);
147     OH_Pasteboard_Destroy(pasteboard);
148     return result;
149 }
150 
OH_Pasteboard_Create0100(napi_env env, napi_callback_info info)151 static napi_value OH_Pasteboard_Create0100(napi_env env, napi_callback_info info)
152 {
153     napi_value result = nullptr;
154     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
155     napi_create_int32(env, pasteboard != nullptr, &result);
156     OH_Pasteboard_Destroy(pasteboard);
157     return result;
158 }
159 
OH_Pasteboard_Subscribe0100(napi_env env, napi_callback_info info)160 static napi_value OH_Pasteboard_Subscribe0100(napi_env env, napi_callback_info info)
161 {
162     napi_value result = nullptr;
163     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
164     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
165     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
166     int res = OH_Pasteboard_Subscribe(pasteboard, NOTIFY_LOCAL_DATA_CHANGE, observer);
167     napi_create_int32(env, res == ERR_OK, &result);
168     OH_Pasteboard_Destroy(pasteboard);
169     OH_PasteboardObserver_Destroy(observer);
170     return result;
171 }
172 
OH_Pasteboard_Subscribe0200(napi_env env, napi_callback_info info)173 static napi_value OH_Pasteboard_Subscribe0200(napi_env env, napi_callback_info info)
174 {
175     napi_value result = nullptr;
176     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
177     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
178     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
179     int resRepeat = OH_Pasteboard_Subscribe(pasteboard, NOTIFY_LOCAL_DATA_CHANGE, observer);
180     napi_create_int32(env, resRepeat == ERR_OK, &result);
181     OH_Pasteboard_Destroy(pasteboard);
182     OH_PasteboardObserver_Destroy(observer);
183     return result;
184 }
185 
OH_Pasteboard_Subscribe0300(napi_env env, napi_callback_info info)186 static napi_value OH_Pasteboard_Subscribe0300(napi_env env, napi_callback_info info)
187 {
188     napi_value result = nullptr;
189     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
190     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
191     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
192 
193     int resRepeat = OH_Pasteboard_Subscribe(nullptr, NOTIFY_LOCAL_DATA_CHANGE, observer);
194     napi_create_int32(env, resRepeat == ERR_INVALID_PARAMETER, &result);
195 
196     OH_Pasteboard_Destroy(pasteboard);
197     OH_PasteboardObserver_Destroy(observer);
198     return result;
199 }
200 
OH_Pasteboard_Subscribe0400(napi_env env, napi_callback_info info)201 static napi_value OH_Pasteboard_Subscribe0400(napi_env env, napi_callback_info info)
202 {
203     napi_value result = nullptr;
204     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
205     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
206     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
207     int res = OH_Pasteboard_Subscribe(pasteboard, 10, observer);
208     napi_create_int32(env, res == ERR_INVALID_PARAMETER, &result);
209     OH_Pasteboard_Destroy(pasteboard);
210     OH_PasteboardObserver_Destroy(observer);
211     return result;
212 }
213 
214 
OH_Pasteboard_Subscribe0500(napi_env env, napi_callback_info info)215 static napi_value OH_Pasteboard_Subscribe0500(napi_env env, napi_callback_info info)
216 
217 {
218     napi_value result = nullptr;
219     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
220     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
221     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
222     int res = OH_Pasteboard_Subscribe(pasteboard, -1, observer);
223     napi_create_int32(env, res == ERR_INVALID_PARAMETER, &result);
224     OH_Pasteboard_Destroy(pasteboard);
225     OH_PasteboardObserver_Destroy(observer);
226 
227     return result;
228 }
229 
OH_Pasteboard_Subscribe0600(napi_env env, napi_callback_info info)230 static napi_value OH_Pasteboard_Subscribe0600(napi_env env, napi_callback_info info)
231 
232 {
233     napi_value result = nullptr;
234     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
235     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
236     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
237     int res = OH_Pasteboard_Subscribe(pasteboard, NOTIFY_LOCAL_DATA_CHANGE, nullptr);
238     napi_create_int32(env, res == ERR_INVALID_PARAMETER, &result);
239     OH_Pasteboard_Destroy(pasteboard);
240     OH_PasteboardObserver_Destroy(observer);
241     return result;
242 }
243 
244 
OH_Pasteboard_Unsubcribe0100(napi_env env, napi_callback_info info)245 static napi_value OH_Pasteboard_Unsubcribe0100(napi_env env, napi_callback_info info)
246 {
247     napi_value result = nullptr;
248     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
249     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
250     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
251     OH_Pasteboard_Subscribe(pasteboard, NOTIFY_LOCAL_DATA_CHANGE, observer);
252 
253     int res = OH_Pasteboard_Unsubscribe(pasteboard, NOTIFY_LOCAL_DATA_CHANGE, observer);
254     napi_create_int32(env, res == ERR_OK, &result);
255 
256     OH_Pasteboard_Destroy(pasteboard);
257     OH_PasteboardObserver_Destroy(observer);
258     return result;
259 }
260 
OH_Pasteboard_Unsubcribe0200(napi_env env, napi_callback_info info)261 static napi_value OH_Pasteboard_Unsubcribe0200(napi_env env, napi_callback_info info)
262 {
263     napi_value result = nullptr;
264     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
265     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
266     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
267 
268     int res = OH_Pasteboard_Unsubscribe(nullptr, NOTIFY_LOCAL_DATA_CHANGE, observer);
269     napi_create_int32(env, res == ERR_INVALID_PARAMETER, &result);
270     OH_Pasteboard_Destroy(pasteboard);
271     OH_PasteboardObserver_Destroy(observer);
272     return result;
273 }
274 
275 
OH_Pasteboard_Unsubcribe0300(napi_env env, napi_callback_info info)276 static napi_value OH_Pasteboard_Unsubcribe0300(napi_env env, napi_callback_info info)
277 {
278     napi_value result = nullptr;
279     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
280     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
281     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
282     int res = OH_Pasteboard_Unsubscribe(pasteboard, 10, observer);
283     napi_create_int32(env, res == ERR_INVALID_PARAMETER, &result);
284 
285     OH_Pasteboard_Destroy(pasteboard);
286     OH_PasteboardObserver_Destroy(observer);
287     return result;
288 }
289 
OH_Pasteboard_Unsubcribe0400(napi_env env, napi_callback_info info)290 static napi_value OH_Pasteboard_Unsubcribe0400(napi_env env, napi_callback_info info)
291 {
292     napi_value result = nullptr;
293     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
294     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
295     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
296     int res = OH_Pasteboard_Unsubscribe(pasteboard, -1, observer);
297     napi_create_int32(env, res == ERR_INVALID_PARAMETER, &result);
298 
299     OH_Pasteboard_Destroy(pasteboard);
300     OH_PasteboardObserver_Destroy(observer);
301     return result;
302 }
303 
OH_Pasteboard_Unsubcribe0500(napi_env env, napi_callback_info info)304 static napi_value OH_Pasteboard_Unsubcribe0500(napi_env env, napi_callback_info info)
305 {
306     napi_value result = nullptr;
307     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
308     OH_PasteboardObserver* observer = OH_PasteboardObserver_Create();
309     OH_PasteboardObserver_SetData(observer, nullptr, CallbackFunc, ContextFinalizeFunc);
310     int res = OH_Pasteboard_Unsubscribe(pasteboard, NOTIFY_LOCAL_DATA_CHANGE, nullptr);
311     napi_create_int32(env, res == ERR_INVALID_PARAMETER, &result);
312 
313     OH_Pasteboard_Destroy(pasteboard);
314     OH_PasteboardObserver_Destroy(observer);
315     return result;
316 }
317 
OH_Pasteboard_IsRemoteData0100(napi_env env, napi_callback_info info)318 static napi_value OH_Pasteboard_IsRemoteData0100(napi_env env, napi_callback_info info)
319 {
320     napi_value result = nullptr;
321     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
322 
323     bool res = OH_Pasteboard_IsRemoteData(pasteboard);
324     napi_create_int32(env, res == false, &result);
325 
326     OH_Pasteboard_Destroy(pasteboard);
327     return result;
328 }
329 
OH_Pasteboard_GetDataSrouce0100(napi_env env, napi_callback_info info)330 static napi_value OH_Pasteboard_GetDataSrouce0100(napi_env env, napi_callback_info info)
331 {
332     napi_value result = nullptr;
333     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
334     OH_UdmfData* setData = OH_UdmfData_Create();
335     OH_UdmfRecord* record = OH_UdmfRecord_Create();
336     OH_UdsPlainText* plainText = OH_UdsPlainText_Create();
337     char content[] = "hello world";
338     OH_UdsPlainText_SetContent(plainText, content);
339     OH_UdmfRecord_AddPlainText(record, plainText);
340     OH_UdmfData_AddRecord(setData, record);
341 
342     OH_Pasteboard_SetData(pasteboard, setData);
343 
344     int len = 100;
345     char source[100];
346     int res = OH_Pasteboard_GetDataSource(pasteboard, source, len);
347     napi_create_int32(env, res == ERR_OK, &result);
348     OH_Pasteboard_Destroy(pasteboard);
349     return result;
350 }
351 
OH_Pasteboard_HasType0100(napi_env env, napi_callback_info info)352 static napi_value OH_Pasteboard_HasType0100(napi_env env, napi_callback_info info)
353 {
354     napi_value result = nullptr;
355     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
356     OH_UdmfData* setData = OH_UdmfData_Create();
357     OH_UdmfRecord* record = OH_UdmfRecord_Create();
358     OH_UdsPlainText* plainText = OH_UdsPlainText_Create();
359     char content[] = "hello world";
360     OH_UdsPlainText_SetContent(plainText, content);
361     OH_UdmfRecord_AddPlainText(record, plainText);
362     OH_UdmfData_AddRecord(setData, record);
363 
364     OH_Pasteboard_SetData(pasteboard, setData);
365     char type[] = "general.plain-text";
366     bool res = OH_Pasteboard_HasType(pasteboard, type);
367     napi_create_int32(env, res == false, &result);
368     OH_Pasteboard_Destroy(pasteboard);
369 
370     return result;
371 }
372 
373 
OH_Pasteboard_HasData0100(napi_env env, napi_callback_info info)374 static napi_value OH_Pasteboard_HasData0100(napi_env env, napi_callback_info info)
375 {
376     napi_value result = nullptr;
377     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
378     OH_Pasteboard_ClearData(pasteboard);
379     bool res = OH_Pasteboard_HasData(pasteboard);
380     NAPI_ASSERT(env, res == false, "createTable is fail.");
381 
382     OH_UdmfData* setData = OH_UdmfData_Create();
383     OH_UdmfRecord* record = OH_UdmfRecord_Create();
384     OH_UdsPlainText* plainText = OH_UdsPlainText_Create();
385     char content[] = "hello world";
386     OH_UdsPlainText_SetContent(plainText, content);
387     OH_UdmfRecord_AddPlainText(record, plainText);
388     OH_UdmfData_AddRecord(setData, record);
389     OH_Pasteboard_SetData(pasteboard, setData);
390     res = OH_Pasteboard_HasData(pasteboard);
391     NAPI_ASSERT(env, res == true, "OH_Pasteboard_HasData is fail.");
392     napi_create_int32(env, res == true, &result);
393     OH_Pasteboard_Destroy(pasteboard);
394     return result;
395 }
396 
397 
OH_Pasteboard_ClearData0100(napi_env env, napi_callback_info info)398 static napi_value OH_Pasteboard_ClearData0100(napi_env env, napi_callback_info info)
399 {
400     napi_value result = nullptr;
401     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
402     bool res = OH_Pasteboard_ClearData(pasteboard);
403     NAPI_ASSERT(env, res == ERR_OK, "OH_Pasteboard_ClearData is fail.");
404     napi_create_int32(env, res == ERR_OK, &result);
405     OH_Pasteboard_Destroy(pasteboard);
406     return result;
407 }
408 
409 
OH_Pasteboard_SetData0100(napi_env env, napi_callback_info info)410 static napi_value OH_Pasteboard_SetData0100(napi_env env, napi_callback_info info)
411 {
412     napi_value result = nullptr;
413     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
414     OH_UdmfData *setData = OH_UdmfData_Create();
415     OH_UdmfRecord *record = OH_UdmfRecord_Create();
416     OH_UdsPlainText *plainText = OH_UdsPlainText_Create();
417     char content[] = "hello world";
418     OH_UdsPlainText_SetContent(plainText, content);
419     OH_UdmfRecord_AddPlainText(record, plainText);
420     OH_UdmfData_AddRecord(setData, record);
421 
422     bool res = OH_Pasteboard_SetData(pasteboard, setData);
423     NAPI_ASSERT(env, res == ERR_OK, "OH_Pasteboard_SetData is fail.");
424     napi_create_int32(env, res == ERR_OK, &result);
425     OH_Pasteboard_Destroy(pasteboard);
426     OH_UdsPlainText_Destroy(plainText);
427     OH_UdmfRecord_Destroy(record);
428     OH_UdmfData_Destroy(setData);
429     return result;
430 }
431 
432 
OH_Pasteboard_GetData0100(napi_env env, napi_callback_info info)433 static napi_value OH_Pasteboard_GetData0100(napi_env env, napi_callback_info info)
434 {
435     napi_value result = nullptr;
436     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
437     OH_UdmfData* setData = OH_UdmfData_Create();
438     OH_UdmfRecord* record = OH_UdmfRecord_Create();
439     OH_UdsPlainText* plainText = OH_UdsPlainText_Create();
440     char content[] = "hello world";
441     OH_UdsPlainText_SetContent(plainText, content);
442     OH_UdmfRecord_AddPlainText(record, plainText);
443     OH_UdmfData_AddRecord(setData, record);
444 
445     int res = OH_Pasteboard_SetData(pasteboard, setData);
446     NAPI_ASSERT(env, res == ERR_OK, "OH_Pasteboard_SetData is fail.");
447 
448     int status = -1;
449     OH_UdmfData* getData = OH_Pasteboard_GetData(pasteboard, &status);
450     NAPI_ASSERT(env, status == ERR_OK, "OH_Pasteboard_GetData is fail.");
451     NAPI_ASSERT(env, getData != nullptr, "OH_Pasteboard_GetData is fail.");
452 
453     unsigned int count = 0;
454     OH_UdmfRecord **getRecords = OH_UdmfData_GetRecords(getData, &count);
455     NAPI_ASSERT(env, count == 1, "OH_Pasteboard_GetData is fail.");
456 
457     OH_UdsPlainText *getPlainText = OH_UdsPlainText_Create();
458     OH_UdmfRecord_GetPlainText(getRecords[0], getPlainText);
459     const char *getContent = OH_UdsPlainText_GetContent(getPlainText);
460 
461     NAPI_ASSERT(env, strcmp(getContent, content) == 0, "OH_Pasteboard_GetData is fail.");
462     napi_create_int32(env, res == ERR_OK, &result);
463     OH_Pasteboard_Destroy(pasteboard);
464     OH_UdsPlainText_Destroy(plainText);
465     OH_UdsPlainText_Destroy(getPlainText);
466     OH_UdmfRecord_Destroy(record);
467     OH_UdmfData_Destroy(setData);
468     OH_UdmfData_Destroy(getData);
469     return result;
470 }
471 
472 
OH_Pasteboard_GetData0200(napi_env env, napi_callback_info info)473 static napi_value OH_Pasteboard_GetData0200(napi_env env, napi_callback_info info)
474 {
475     int num = 3;
476     napi_value result = nullptr;
477     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
478     OH_UdmfData* setData = OH_UdmfData_Create();
479     OH_UdmfRecord* record = OH_UdmfRecord_Create();
480     OH_UdmfRecordProvider* provider = OH_UdmfRecordProvider_Create();
481     NAPI_ASSERT(env, provider != nullptr, "OH_Pasteboard_SetData is fail.");
482 
483     OH_UdmfRecordProvider_SetData(provider, static_cast<void *>(record), GetDataCallback, ContextFinalizeFunc);
484     OH_UdmfData_AddRecord(setData, record);
485     const char* types[3] = { "general.plain-text", "general.hyperlink", "general.html" };
486     OH_UdmfRecord_SetProvider(record, types, num, provider);
487     int res = OH_Pasteboard_SetData(pasteboard, setData);
488     NAPI_ASSERT(env, res == ERR_OK, "OH_Pasteboard_SetData is fail.");
489 
490     int status = -1;
491     OH_UdmfData* getData = OH_Pasteboard_GetData(pasteboard, &status);
492     NAPI_ASSERT(env, status == ERR_OK, "OH_Pasteboard_GetData is fail.");
493     NAPI_ASSERT(env, getData != nullptr, "OH_Pasteboard_GetData is fail.");
494 
495     unsigned int count = 0;
496     OH_UdmfRecord **getRecords = OH_UdmfData_GetRecords(getData, &count);
497     NAPI_ASSERT(env, count == 1, "OH_UdmfData_GetRecords is fail.");
498 
499     OH_UdsPlainText *getPlainText = OH_UdsPlainText_Create();
500     OH_UdmfRecord_GetPlainText(getRecords[0], getPlainText);
501     const char *getContent = OH_UdsPlainText_GetContent(getPlainText);
502     NAPI_ASSERT(env, strcmp(getContent, PLAINTEXT_CONTENT) == 0, "OH_UdsPlainText_GetContent is fail.");
503 
504     OH_UdsHyperlink *getHyperLink = OH_UdsHyperlink_Create();
505     OH_UdmfRecord_GetHyperlink(getRecords[0], getHyperLink);
506     const char *getUrl = OH_UdsHyperlink_GetUrl(getHyperLink);
507     NAPI_ASSERT(env, strcmp(getUrl, HYPERLINK_URL) == 0, "OH_UdsHyperlink_GetUrl is fail.");
508     napi_create_int32(env, res == ERR_OK, &result);
509     OH_Pasteboard_Destroy(pasteboard);
510     OH_UdsPlainText_Destroy(getPlainText);
511     OH_UdsHyperlink_Destroy(getHyperLink);
512     OH_UdmfRecord_Destroy(record);
513     OH_UdmfData_Destroy(setData);
514     OH_UdmfData_Destroy(getData);
515     return result;
516 }
517 
OH_Pasteboard_GetData0300(napi_env env, napi_callback_info info)518 static napi_value OH_Pasteboard_GetData0300(napi_env env, napi_callback_info info)
519 {
520     napi_value result = nullptr;
521     char typeId[] = "ApplicationDefined-myType";
522     unsigned char entry[] = "CreateGeneralRecord1";
523     unsigned int count = sizeof(entry);
524     OH_UdmfRecord *record = OH_UdmfRecord_Create();
525     int addRes1 = OH_UdmfRecord_AddGeneralEntry(record, typeId, entry, count);
526     NAPI_ASSERT(env, addRes1 == ERR_OK, "OH_AddGeneralEntry is fail.");
527 
528     OH_UdmfData* setData = OH_UdmfData_Create();
529     OH_UdmfData_AddRecord(setData, record);
530     OH_Pasteboard* pasteboard = OH_Pasteboard_Create();
531     int res = OH_Pasteboard_SetData(pasteboard, setData);
532     NAPI_ASSERT(env, res == ERR_OK, "OH_SetData is fail.");
533 
534     int status = -1;
535     OH_UdmfData* getData = OH_Pasteboard_GetData(pasteboard, &status);
536     NAPI_ASSERT(env, status == ERR_OK, "OH_GetData is fail");
537     NAPI_ASSERT(env, getData != nullptr, "OH_GetData is fail");
538 
539     unsigned int getrecordCount = 0;
540     OH_UdmfRecord **getRecords = OH_UdmfData_GetRecords(getData, &getrecordCount);
541     NAPI_ASSERT(env, getrecordCount == 1, "OH_getRecords is fail");
542 
543     unsigned int getCount = 0;
544     unsigned char *getEntry;
545     int getRes = OH_UdmfRecord_GetGeneralEntry(getRecords[0], typeId, &getEntry, &getCount);
546     NAPI_ASSERT(env, getRes == ERR_OK, "OH_getRecords is fail");
547     NAPI_ASSERT(env, getCount == count, "OH_getRecords is fail");
548     NAPI_ASSERT(env, memcmp(entry, getEntry, getCount) == 0, "OH_getRecords is fail");
549     napi_create_int32(env, res == ERR_OK, &result);
550     OH_Pasteboard_Destroy(pasteboard);
551     OH_UdmfRecord_Destroy(record);
552     OH_UdmfData_Destroy(setData);
553     OH_UdmfData_Destroy(getData);
554     return result;
555 }
556 
557 EXTERN_C_START
Init(napi_env env, napi_value exports)558 static napi_value Init(napi_env env, napi_value exports)
559 {
560     napi_property_descriptor desc[] = {
561         {"OH_PasteboardSubscriber_Create0100", nullptr, OH_PasteboardSubscriber_Create0100,
562          nullptr, nullptr, nullptr, napi_default, nullptr},
563         {"OH_PasteboardObserver_SetData0100", nullptr, OH_PasteboardObserver_SetData0100, nullptr,
564          nullptr, nullptr, napi_default, nullptr},
565         {"OH_PasteboardObserver_SetData0200", nullptr, OH_PasteboardObserver_SetData0200, nullptr,
566          nullptr, nullptr, napi_default, nullptr},
567         {"OH_PasteboardObserver_SetData0300", nullptr, OH_PasteboardObserver_SetData0300, nullptr,
568          nullptr, nullptr, napi_default, nullptr},
569         {"OH_PasteboardObserver_SetData0400", nullptr, OH_PasteboardObserver_SetData0400, nullptr,
570          nullptr, nullptr, napi_default, nullptr},
571         {"OH_Pasteboard_Create0100", nullptr, OH_Pasteboard_Create0100, nullptr,
572          nullptr, nullptr, napi_default, nullptr},
573         {"OH_Pasteboard_Subscribe0100", nullptr, OH_Pasteboard_Subscribe0100, nullptr,
574          nullptr, nullptr, napi_default, nullptr},
575         {"OH_Pasteboard_Subscribe0200", nullptr, OH_Pasteboard_Subscribe0200, nullptr,
576          nullptr, nullptr, napi_default, nullptr},
577         {"OH_Pasteboard_Subscribe0300", nullptr, OH_Pasteboard_Subscribe0300, nullptr,
578          nullptr, nullptr, napi_default, nullptr},
579         {"OH_Pasteboard_Subscribe0400", nullptr, OH_Pasteboard_Subscribe0400, nullptr,
580          nullptr, nullptr, napi_default, nullptr},
581         {"OH_Pasteboard_Subscribe0500", nullptr, OH_Pasteboard_Subscribe0500, nullptr,
582          nullptr, nullptr, napi_default, nullptr},
583         {"OH_Pasteboard_Subscribe0600", nullptr, OH_Pasteboard_Subscribe0600, nullptr,
584          nullptr, nullptr, napi_default, nullptr},
585         {"OH_Pasteboard_Unsubcribe0100", nullptr, OH_Pasteboard_Unsubcribe0100, nullptr,
586          nullptr, nullptr, napi_default, nullptr},
587         {"OH_Pasteboard_Unsubcribe0200", nullptr, OH_Pasteboard_Unsubcribe0200, nullptr,
588          nullptr, nullptr, napi_default, nullptr},
589         {"OH_Pasteboard_Unsubcribe0300", nullptr, OH_Pasteboard_Unsubcribe0300, nullptr,
590          nullptr, nullptr, napi_default, nullptr},
591         {"OH_Pasteboard_Unsubcribe0400", nullptr, OH_Pasteboard_Unsubcribe0400, nullptr,
592          nullptr, nullptr, napi_default, nullptr},
593         {"OH_Pasteboard_Unsubcribe0500", nullptr, OH_Pasteboard_Unsubcribe0500, nullptr,
594          nullptr, nullptr, napi_default, nullptr},
595         {"OH_Pasteboard_IsRemoteData0100", nullptr, OH_Pasteboard_IsRemoteData0100, nullptr,
596          nullptr, nullptr, napi_default, nullptr},
597         {"OH_Pasteboard_GetDataSrouce0100", nullptr, OH_Pasteboard_GetDataSrouce0100, nullptr,
598          nullptr, nullptr, napi_default, nullptr},
599         {"OH_Pasteboard_HasType0100", nullptr, OH_Pasteboard_HasType0100, nullptr,
600          nullptr, nullptr, napi_default, nullptr},
601         {"OH_Pasteboard_HasData0100", nullptr, OH_Pasteboard_HasData0100, nullptr,
602          nullptr, nullptr, napi_default, nullptr},
603         {"OH_Pasteboard_ClearData0100", nullptr, OH_Pasteboard_ClearData0100, nullptr,
604          nullptr, nullptr, napi_default, nullptr},
605         {"OH_Pasteboard_SetData0100", nullptr, OH_Pasteboard_SetData0100, nullptr,
606          nullptr, nullptr, napi_default, nullptr},
607         {"OH_Pasteboard_GetData0100", nullptr, OH_Pasteboard_GetData0100, nullptr,
608          nullptr, nullptr, napi_default, nullptr},
609         {"OH_Pasteboard_GetData0200", nullptr, OH_Pasteboard_GetData0200, nullptr,
610          nullptr, nullptr, napi_default, nullptr},
611         {"OH_Pasteboard_GetData0300", nullptr, OH_Pasteboard_GetData0300, nullptr,
612          nullptr, nullptr, napi_default, nullptr}
613     };
614     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
615     return exports;
616 }
617 EXTERN_C_END
618 
619 static napi_module demoModule = {
620     .nm_version = 1,
621     .nm_flags = 0,
622     .nm_filename = nullptr,
623     .nm_register_func = Init,
624     .nm_modname = "entry",
625     .nm_priv = ((void*)0),
626     .reserved = { 0 },
627 };
628 
RegisterEntryModule(void)629 extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
630 {
631     napi_module_register(&demoModule);
632 }
633