1/*
2 * Copyright (C) 2022-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// @ts-nocheck
16import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index';
17import pasteboard from '@ohos.pasteboard';
18import image from '@ohos.multimedia.image';
19
20describe('PasteBoardJSTest', function () {
21  beforeAll(async function () {
22    console.info('beforeAll');
23  });
24
25  afterAll(async function () {
26    console.info('afterAll');
27  });
28
29  /**
30   * @tc.name      pasteboard_exception_test1
31   * @tc.desc      自定义数据测试
32   * @tc.type      Function
33   * @tc.require   AR000HEECB
34   */
35  it('pasteboard_exception_test1', 0, async function (done) {
36    const systemPasteboard = pasteboard.getSystemPasteboard();
37    await systemPasteboard.clearData();
38    let pasteData = undefined;
39    console.info('systemPasteboard clear data success');
40    const dataUri = new ArrayBuffer(256);
41    pasteData = pasteboard.createData('xxx', dataUri);
42    const addUri = new ArrayBuffer(128);
43    pasteData.addRecord('xxx', addUri);
44    const recordUri = new ArrayBuffer(96);
45    const pasteDataRecord = pasteboard.createRecord('xxx', recordUri);
46    pasteData.addRecord(pasteDataRecord);
47    await systemPasteboard.setPasteData(pasteData);
48    console.info('Set pastedata success');
49    const res = await systemPasteboard.hasPasteData();
50    console.info('Check pastedata has data success, result: ' + res);
51    expect(res).assertTrue();
52    const data = await systemPasteboard.getPasteData();
53    console.info('Get paste data success');
54    expect(data.getRecordCount()).assertEqual(3);
55    expect(data.getRecordAt(0).data['xxx'].byteLength).assertEqual(96);
56    expect(data.getRecordAt(1).data['xxx'].byteLength).assertEqual(128);
57    expect(data.getRecordAt(2).data['xxx'].byteLength).assertEqual(256);
58    done();
59  });
60
61  /**
62   * @tc.name      pasteboard_exception_test2
63   * @tc.desc      自定义数据测试
64   * @tc.type      Function
65   * @tc.require   AR000HEECB
66   */
67  it('pasteboard_exception_test2', 0, async function (done) {
68    const systemPasteboard = pasteboard.getSystemPasteboard();
69    await systemPasteboard.clearData();
70    console.info('systemPasteboard clear data success');
71    let pasteData = undefined;
72    let pasteRecord = undefined;
73    const dataHtml = new ArrayBuffer(256);
74    pasteData = pasteboard.createData('xy', dataHtml);
75    expect(pasteData != undefined).assertTrue();
76    pasteData.addRecord('x'.repeat(1024), dataHtml);
77    expect(pasteData.getRecordCount()).assertEqual(2);
78    pasteRecord = pasteboard.createRecord('xy2', dataHtml);
79    expect(pasteRecord != undefined).assertTrue();
80    pasteData.addRecord(pasteRecord);
81    await systemPasteboard.setPasteData(pasteData);
82    console.info('set pastedata success');
83    const res = await systemPasteboard.hasPasteData();
84    console.info('Check pastedata has data success, result: ' + res);
85    expect(res).assertTrue();
86    systemPasteboard.getPasteData().then((data) => {
87      console.info('get paste data success');
88      expect(data.getRecordCount()).assertEqual(3);
89      expect(data.getRecordAt(0).mimeType).assertEqual('xy2');
90      expect(data.getRecordAt(1).mimeType).assertEqual('x'.repeat(1024));
91      expect(data.getRecordAt(2).mimeType).assertEqual('xy');
92      done();
93    });
94  });
95
96  /**
97   * @tc.name      pasteboard_exception_test3
98   * @tc.desc      自定义数据异常测试
99   * @tc.type      Function
100   * @tc.require   AR000HEECB
101   */
102  it('pasteboard_exception_test3', 0, async function (done) {
103    console.info('pasteboard_exception_test1 start');
104    const systemPasteboard = pasteboard.getSystemPasteboard();
105    await systemPasteboard.clearData();
106    console.info('systemPasteboard clear data success');
107    let pasteData = undefined;
108    let pasteRecord = undefined;
109
110    // test createData
111    let dataHtml = new ArrayBuffer(256);
112    try {
113      pasteData = pasteboard.createData('x'.repeat(1025), dataHtml);
114      expect(true === false).assertTrue();
115    } catch (error) {
116      console.info(error.code);
117      console.info(error.message);
118    }
119
120    expect(pasteData).assertEqual(undefined);
121    pasteData = pasteboard.createData('x'.repeat(1024), dataHtml);
122    expect(pasteData != undefined).assertTrue();
123
124    // test addRecord
125    try {
126      pasteData.addRecord('x'.repeat(1025), dataHtml);
127      expect(true === false).assertTrue();
128    } catch (error) {
129      console.info(error.code);
130      console.info(error.message);
131    }
132    expect(pasteData.getRecordCount()).assertEqual(1);
133    pasteData.addRecord('x'.repeat(1024), dataHtml);
134    expect(pasteData.getRecordCount()).assertEqual(2);
135
136    let addHtml = new ArrayBuffer(128);
137    try {
138      pasteData.addRecord('x'.repeat(1025), addHtml);
139      expect(true === false).assertTrue();
140    } catch (error) {
141      console.info(error.code);
142      console.info(error.message);
143    }
144    expect(pasteData.getRecordCount()).assertEqual(2);
145    pasteData.addRecord('x'.repeat(1024), addHtml);
146    expect(pasteData.getRecordCount()).assertEqual(3);
147
148    let recordHtml = new ArrayBuffer(64);
149    try {
150      pasteRecord = pasteboard.createRecord('x'.repeat(1025), recordHtml);
151      expect(true === false).assertTrue();
152    } catch (error) {
153      console.info(error.code);
154      console.info(error.message);
155    }
156    expect(pasteRecord).assertEqual(undefined);
157    pasteRecord = pasteboard.createRecord('x'.repeat(1024), recordHtml);
158    expect(pasteRecord != undefined).assertTrue();
159    pasteData.addRecord(pasteRecord);
160    expect(pasteData.getRecordCount()).assertEqual(4);
161    await systemPasteboard.setPasteData(pasteData);
162    console.info('set pastedata success');
163    const res = await systemPasteboard.hasPasteData();
164    console.info('Check pastedata has data success, result: ' + res);
165    expect(res).assertTrue();
166    systemPasteboard.getPasteData().then((data) => {
167      console.info('get paste data success');
168      expect(data.getRecordCount()).assertEqual(4);
169      done();
170    });
171  });
172
173  /**
174   * @tc.name      pasteboard_exception_test4
175   * @tc.desc      一个record中多个数据类型:get primary html、pixelMap、want、text、uri
176   * @tc.type      Function
177   * @tc.require   AR000HEECB
178   */
179  it('pasteboard_exception_test4', 0, async function (done) {
180    const systemPasteboard = pasteboard.getSystemPasteboard();
181    await systemPasteboard.clearData();
182    const dataHtml = new ArrayBuffer(256);
183    const htmlText = '<html><head></head><body>Hello!</body></html>';
184    const uriText = 'https://www.baidu.com/';
185    const wantText = {
186      bundleName: 'com.example.myapplication3',
187      abilityName: 'com.example.myapplication3.MainAbility',
188    };
189    let plainText = '';
190    const pasteData = pasteboard.createData('x'.repeat(1024), dataHtml);
191    const record = pasteData.getRecordAt(0);
192    record.htmlText = htmlText;
193    record.plainText = plainText;
194    record.uri = uriText;
195    record.want = wantText;
196    const buffer = new ArrayBuffer(128);
197    const opt = {
198      size: { height: 5, width: 5 },
199      pixelFormat: 3,
200      editable: true,
201      alphaType: 1,
202      scaleMode: 1,
203    };
204    const pixelMap = await image.createPixelMap(buffer, opt);
205    record.pixelMap = pixelMap;
206    pasteData.replaceRecordAt(0, record);
207    await systemPasteboard.setPasteData(pasteData);
208    const hasData = await systemPasteboard.hasPasteData();
209    expect(hasData).assertTrue();
210    systemPasteboard.getPasteData().then((data) => {
211      expect(data.getRecordCount()).assertEqual(1);
212      expect(data.getRecordAt(0).mimeType).assertEqual('x'.repeat(1024));
213      expect(data.getPrimaryWant().bundleName).assertEqual(wantText.bundleName);
214      expect(data.getPrimaryWant().abilityName).assertEqual(wantText.abilityName);
215      let newPixelMap = data.getPrimaryPixelMap();
216      newPixelMap.getImageInfo().then((imageInfo) => {
217        expect(imageInfo.size.height).assertEqual(opt.size.height);
218        expect(imageInfo.size.width).assertEqual(opt.size.width);
219      });
220      expect(data.getPrimaryUri()).assertEqual(uriText);
221      expect(data.getPrimaryText()).assertEqual(plainText);
222      expect(data.getPrimaryHtml()).assertEqual(htmlText);
223      done();
224    });
225  });
226
227  /**
228   * @tc.name      pasteboard_exception_test5
229   * @tc.desc      Test CreateRecord throw error
230   * @tc.type      Function
231   * @tc.require   I5TYVJ
232   */
233  it('pasteboard_exception_test5', 0, async function (done) {
234    const systemPasteboard = pasteboard.getSystemPasteboard();
235    await systemPasteboard.clearData();
236    const uriText = 'https://www.baidu.com/';
237    const pasteData = pasteboard.createUriData(uriText);
238    await systemPasteboard.setPasteData(pasteData);
239    const res = await systemPasteboard.hasPasteData();
240    expect(res).assertEqual(true);
241    systemPasteboard.getPasteData().then((data) => {
242      const pasteData1 = data;
243      expect(pasteData1.getRecordCount()).assertEqual(1);
244      const uriText1 = 'https://www.baidu.com/1';
245      const pasteDataRecord = pasteboard.createRecord(pasteboard.MIMETYPE_TEXT_URI, uriText1);
246      const replace = pasteData1.replaceRecordAt(0, pasteDataRecord);
247      expect(replace).assertEqual(true);
248      const primaryUri1 = pasteData1.getPrimaryUri();
249      expect(primaryUri1).assertEqual(uriText1);
250      expect(pasteData1.hasMimeType(pasteboard.MIMETYPE_TEXT_URI)).assertEqual(true);
251      const primaryUri2 = pasteData1.getPrimaryUri();
252      expect(primaryUri2).assertEqual(uriText1);
253      done();
254    });
255  });
256
257  /**
258   * @tc.name      pasteboard_exception_test6
259   * @tc.desc      Test CreateRecord throw error
260   * @tc.type      Function
261   * @tc.require   I5TYVJ
262   */
263  it('pasteboard_exception_test6', 0, async function (done) {
264    const systemPasteboard = pasteboard.getSystemPasteboard();
265    await systemPasteboard.clearData();
266    const uriText6 = 'https://www.baidu.com/';
267    const textData6 = 'Hello World!';
268    const htmlText6 = '<html><head></head><body>Hello World!</body></html>';
269    const wantText6 = {
270      bundleName: 'com.example.myapplication3',
271      abilityName: 'com.example.myapplication3.MainAbility',
272    };
273    const dataHtml6 = new ArrayBuffer(256);
274    const buffer6 = new ArrayBuffer(128);
275    const opt6 = {
276      size: { height: 5, width: 5 },
277      pixelFormat: 3,
278      editable: true,
279      alphaType: 1,
280      scaleMode: 1,
281    };
282    const pixelMap = await image.createPixelMap(buffer6, opt6);
283    const pasteData = pasteboard.createUriData(uriText6);
284
285    try {
286      let pasteDataRecord = pasteboard.createRecord(pasteboard.MIMETYPE_TEXT_URI, uriText6);
287      pasteData.addRecord(pasteDataRecord);
288      pasteDataRecord = pasteboard.createRecord(pasteboard.MIMETYPE_TEXT_PLAIN, textData6);
289      pasteData.addRecord(pasteDataRecord);
290      pasteDataRecord = pasteboard.createRecord(pasteboard.MIMETYPE_TEXT_HTML, htmlText6);
291      pasteData.addRecord(pasteDataRecord);
292      pasteDataRecord = pasteboard.createRecord(pasteboard.MIMETYPE_TEXT_WANT, wantText6);
293      pasteData.addRecord(pasteDataRecord);
294      pasteDataRecord = pasteboard.createRecord('x'.repeat(1022), dataHtml6);
295      pasteData.addRecord(pasteDataRecord);
296      pasteDataRecord = pasteboard.createRecord(pasteboard.MIMETYPE_PIXELMAP, pixelMap);
297      pasteData.addRecord(pasteDataRecord);
298    } catch (error) {
299      expect(error.code === undefined).assertTrue();
300      expect(error.message === undefined).assertTrue();
301      expect(True === false).assertTrue();
302    }
303    await systemPasteboard.setPasteData(pasteData);
304    const res = await systemPasteboard.hasPasteData();
305    expect(res).assertEqual(true);
306    systemPasteboard.getPasteData().then((data) => {
307      expect(data.getRecordCount()).assertEqual(7);
308      let dataRecord = data.getRecordAt(3);
309      expect(dataRecord.htmlText).assertEqual(htmlText6);
310      done();
311    });
312  });
313
314  /**
315   * @tc.name      pasteboard_exception_test7
316   * @tc.desc      Test CreateRecord throw error
317   * @tc.type      Function
318   * @tc.require   I5TYVJ
319   */
320  it('pasteboard_exception_test7', 0, async function (done) {
321    const systemPasteboard = pasteboard.getSystemPasteboard();
322    await systemPasteboard.clearData();
323    const uriText = 'https://www.baidu.com/';
324    const htmlText = '<html><head></head><body>Hello World!</body></html>';
325    const pasteData = pasteboard.createUriData(uriText);
326
327    try {
328      const pasteDataRecord = pasteboard.createRecord('xxddxx', htmlText);
329      pasteData.addRecord(pasteDataRecord);
330      expect(true === false).assertTrue();
331    } catch (error) {
332      expect(error.code).assertEqual('401');
333      expect(error.message).assertEqual('Parameter error. The mimeType is not an arraybuffer.');
334    }
335    done();
336  });
337
338  /**
339   * @tc.name      pasteboard_exception_test8
340   * @tc.desc      Test Create Uri Data
341   * @tc.type      Function
342   * @tc.require   I5TYVJ
343   */
344  it('pasteboard_exception_test8', 0, async function (done) {
345    const systemPasteboard = pasteboard.getSystemPasteboard();
346    await systemPasteboard.clearData();
347    let uriText = 'https://www.baidu.com/';
348    let pasteData = undefined;
349    try {
350      pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uriText);
351    } catch (e) {
352      expect(true === false).assertTrue();
353    }
354    await systemPasteboard.setPasteData(pasteData);
355    const res = await systemPasteboard.hasPasteData();
356    expect(res).assertEqual(true);
357    systemPasteboard.getPasteData().then((data) => {
358      expect(data.getRecordCount()).assertEqual(1);
359      const dataRecord = data.getRecordAt(0);
360      expect(dataRecord.uri).assertEqual(uriText);
361      done();
362    });
363  });
364
365  /**
366   * @tc.name      pasteboard_exception_test9
367   * @tc.desc      Test Create htmlText Data
368   * @tc.type      Function
369   * @tc.require   I5TYVJ
370   */
371  it('pasteboard_exception_test9', 0, async function (done) {
372    const systemPasteboard = pasteboard.getSystemPasteboard();
373    await systemPasteboard.clearData();
374    const htmlText = '<html><head></head><body>Hello World!</body></html>';
375    let pasteData = undefined;
376    try {
377      pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_HTML, htmlText);
378    } catch (e) {
379      expect(true === false).assertTrue();
380    }
381    await systemPasteboard.setPasteData(pasteData);
382    const res = await systemPasteboard.hasPasteData();
383    expect(res).assertEqual(true);
384    systemPasteboard.getPasteData().then((data) => {
385      expect(data.getRecordCount()).assertEqual(1);
386      const dataRecord = data.getRecordAt(0);
387      expect(dataRecord.htmlText).assertEqual(htmlText);
388      done();
389    });
390  });
391
392  /**
393   * @tc.name      pasteboard_exception_test10
394   * @tc.desc      Test Create wantText Data
395   * @tc.type      Function
396   * @tc.require   I5TYVJ
397   */
398  it('pasteboard_exception_test10', 0, async function (done) {
399    const systemPasteboard = pasteboard.getSystemPasteboard();
400    await systemPasteboard.clearData();
401    const wantText = {
402      bundleName: 'com.example.myapplication3',
403      abilityName: 'com.example.myapplication3.MainAbility',
404    };
405    let pasteData = undefined;
406    try {
407      pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_WANT, wantText);
408    } catch (e) {
409      expect(true === false).assertTrue();
410    }
411    await systemPasteboard.setPasteData(pasteData);
412    const res = await systemPasteboard.hasPasteData();
413    expect(res).assertEqual(true);
414    systemPasteboard.getPasteData().then((data) => {
415      expect(data.getRecordCount()).assertEqual(1);
416      let primaryWant = data.getPrimaryWant();
417      expect(primaryWant.bundleName).assertEqual(wantText.bundleName);
418      expect(primaryWant.abilityName).assertEqual(wantText.abilityName);
419      done();
420    });
421  });
422
423  /**
424   * @tc.name      pasteboard_exception_test11
425   * @tc.desc      Test Create pixelMap Data
426   * @tc.type      Function
427   * @tc.require   I5TYVJ
428   */
429  it('pasteboard_exception_test11', 0, async function (done) {
430    const systemPasteboard = pasteboard.getSystemPasteboard();
431    await systemPasteboard.clearData();
432    const buffer = new ArrayBuffer(128);
433    const opt = {
434      size: { height: 5, width: 5 },
435      pixelFormat: 3,
436      editable: true,
437      alphaType: 1,
438      scaleMode: 1,
439    };
440    let pasteData = undefined;
441    const pixelMap = await image.createPixelMap(buffer, opt);
442    try {
443      pasteData = pasteboard.createData(pasteboard.MIMETYPE_PIXELMAP, pixelMap);
444    } catch (e) {
445      expect(true === false).assertTrue();
446    }
447    await systemPasteboard.setPasteData(pasteData);
448    const res = await systemPasteboard.hasPasteData();
449    expect(res).assertEqual(true);
450    systemPasteboard.getPasteData().then(async (data) => {
451      expect(data.getRecordCount()).assertEqual(1);
452      const primaryPixelMap = data.getPrimaryPixelMap();
453      const PixelMapBytesNumber = primaryPixelMap.getPixelBytesNumber();
454      expect(PixelMapBytesNumber).assertEqual(100);
455      const imageInfo = await primaryPixelMap.getImageInfo();
456      expect(imageInfo.size.height === 5 && imageInfo.size.width === 5).assertEqual(true);
457      done();
458    });
459  });
460
461  /**
462   * @tc.name      pasteboard_exception_test12
463   * @tc.desc      Test CreateData throw error
464   * @tc.type      Function
465   * @tc.require   I5TYVJ
466   */
467  it('pasteboard_exception_test12', 0, async function (done) {
468    const systemPasteboard = pasteboard.getSystemPasteboard();
469    await systemPasteboard.clearData();
470    let dataHtml = new ArrayBuffer(256);
471    let pasteData = undefined;
472    try {
473      pasteData = pasteboard.createData(pasteboard.MIMETYPE_PIXELMAP, dataHtml);
474      expect(true === false).assertTrue();
475    } catch (e) {
476      expect(e.code).assertEqual('401');
477      expect(e.message).assertEqual('Parameter error. Actual mimeType is not mimetype_pixelmap.');
478    }
479    done();
480  });
481
482  /**
483   * @tc.name      pasteboard_exception_test13
484   * @tc.desc      Test Create KV Data
485   * @tc.type      Function
486   * @tc.require   I5TYVJ
487   */
488  it('pasteboard_exception_test13', 0, async function (done) {
489    const systemPasteboard = pasteboard.getSystemPasteboard();
490    await systemPasteboard.clearData();
491    let dataHtml = new ArrayBuffer(256);
492    let pasteData = undefined;
493    try {
494      pasteData = pasteboard.createData('x'.repeat(1034), dataHtml);
495      expect(true === false).assertTrue();
496    } catch (e) {
497      expect(e.code === '401').assertTrue();
498      expect(e.message === 'Parameter error. The length of mimeType cannot be greater than 1024 bytes.').assertTrue();
499    }
500    done();
501  });
502
503  /**
504   * @tc.name      pasteboard_exception_test14
505   * @tc.desc      Test addRecord throw error
506   * @tc.type      Function
507   * @tc.require   I5TYVJ
508   */
509  it('pasteboard_exception_test14', 0, async function (done) {
510    const systemPasteboard = pasteboard.getSystemPasteboard();
511    await systemPasteboard.clearData();
512    const uriText14 = 'https://www.baidu.com/';
513    const textData14 = 'Hello World!';
514    const htmlText14 = '<html><head></head><body>Hello World!</body></html>';
515    const wantText14 = {
516      bundleName: 'com.example.myapplication3',
517      abilityName: 'com.example.myapplication3.MainAbility',
518    };
519    const dataHtml14 = new ArrayBuffer(256);
520    const buffer14 = new ArrayBuffer(128);
521    const opt14 = {
522      size: { height: 5, width: 5 },
523      pixelFormat: 3,
524      editable: true,
525      alphaType: 1,
526      scaleMode: 1,
527    };
528    const pixelMap = await image.createPixelMap(buffer14, opt14);
529    const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uriText14);
530
531    try {
532      pasteData.addRecord(pasteboard.MIMETYPE_TEXT_HTML, htmlText14);
533      pasteData.addRecord(pasteboard.MIMETYPE_TEXT_URI, uriText14);
534      pasteData.addRecord(pasteboard.MIMETYPE_TEXT_PLAIN, textData14);
535      pasteData.addRecord(pasteboard.MIMETYPE_PIXELMAP, pixelMap);
536      pasteData.addRecord(pasteboard.MIMETYPE_TEXT_WANT, wantText14);
537      pasteData.addRecord('x'.repeat(100), dataHtml14);
538    } catch (error) {
539      expect(true === false).assertTrue();
540    }
541    await systemPasteboard.setPasteData(pasteData);
542    const res = await systemPasteboard.hasPasteData();
543    expect(res).assertEqual(true);
544    systemPasteboard.getPasteData().then((data) => {
545      expect(data.getRecordCount()).assertEqual(7);
546      let dataRecord = data.getRecordAt(6);
547      expect(dataRecord.uri).assertEqual(uriText14);
548      let primaryPixelMap = data.getPrimaryPixelMap();
549      let PixelMapBytesNumber = primaryPixelMap.getPixelBytesNumber();
550      expect(PixelMapBytesNumber).assertEqual(100);
551      done();
552    });
553  });
554
555  /**
556   * @tc.name      pasteboard_exception_test15
557   * @tc.desc      Test addRecord throw error
558   * @tc.type      Function
559   * @tc.require   I5TYVJ
560   */
561  it('pasteboard_exception_test15', 0, async function (done) {
562    let uriText = 'https://www.baidu.com/';
563    let pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uriText);
564    try {
565      pasteData.addRecord('xxxx', uriText);
566      expect(true === false).assertTrue();
567    } catch (e) {
568      expect(e.code === '401').assertTrue();
569    }
570    done();
571  });
572
573  /**
574   * @tc.name      pasteboard_exception_test16
575   * @tc.desc      Test addRecord throw error
576   * @tc.type      Function
577   * @tc.require   I5TYVJ
578   */
579  it('pasteboard_exception_test16', 0, async function (done) {
580    const uriText = 'https://www.baidu.com/';
581    const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uriText);
582    const num = 600;
583    try {
584      for (let i = 0; i < num-1; i++) {
585        pasteData.addRecord(pasteboard.MIMETYPE_TEXT_URI, uriText);
586      }
587      expect(pasteData.getRecordCount()).assertEqual(num);
588    } catch (e) {
589      expect(e.code === '12900002').assertTrue();
590    }
591    done();
592  });
593
594  /**
595   * @tc.name      pasteboard_exception_test17
596   * @tc.desc      Test getRecord throw error
597   * @tc.type      Function
598   * @tc.require   I5TYVJ
599   */
600  it('pasteboard_exception_test17', 0, async function (done) {
601    const uriText = 'https://www.baidu.com/';
602    const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uriText);
603    try {
604      let dataRecord = pasteData.getRecord(0);
605      expect(dataRecord.uri).assertEqual(uriText);
606    } catch (e) {
607      expect(true === false).assertTrue();
608    }
609    done();
610  });
611
612  /**
613   * @tc.name      pasteboard_exception_test18
614   * @tc.desc      Test getRecord throw error
615   * @tc.type      Function
616   * @tc.require   I5TYVJ
617   */
618  it('pasteboard_exception_test18', 0, async function (done) {
619    const uriText = 'https://www.baidu.com/';
620    const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uriText);
621    try {
622      let dataRecord = pasteData.getRecord(5);
623      expect(true === false).assertTrue();
624    } catch (e) {
625      expect(e.code === '12900001').assertTrue();
626    }
627    done();
628  });
629
630  /**
631   * @tc.name      pasteboard_exception_test19
632   * @tc.desc      Test replaceRecord throw error
633   * @tc.type      Function
634   * @tc.require   I5TYVJ
635   */
636  it('pasteboard_exception_test19', 0, async function (done) {
637    const uriText = 'https://www.baidu.com/';
638    const uriText1 = 'https://www.baidu1.com/';
639    const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uriText);
640    const dataRecord = pasteboard.createRecord(pasteboard.MIMETYPE_TEXT_URI, uriText1);
641    try {
642      pasteData.replaceRecord(0, dataRecord);
643      const record = pasteData.getRecord(0);
644      expect(record.uri).assertEqual(uriText1);
645    } catch (e) {
646      expect(true === false).assertTrue();
647    }
648    done();
649  });
650
651  /**
652   * @tc.name      pasteboard_exception_test20
653   * @tc.desc      Test replaceRecord throw error
654   * @tc.type      Function
655   * @tc.require   I5TYVJ
656   */
657  it('pasteboard_exception_test20', 0, async function (done) {
658    const uriText = 'https://www.baidu.com/';
659    const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uriText);
660    try {
661      pasteData.replaceRecord(0, 'xxxxxx');
662      expect(true === false).assertTrue();
663    } catch (e) {
664      expect(e.code === '401').assertTrue();
665    }
666    done();
667  });
668
669  /**
670   * @tc.name      pasteboard_exception_test21
671   * @tc.desc      Test setData
672   * @tc.type      Function
673   * @tc.require   I5TYVJ
674   */
675  it('pasteboard_exception_test21', 0, async function (done) {
676    const systemPasteboard = pasteboard.getSystemPasteboard();
677    await systemPasteboard.clearData();
678    const uriText = 'Hello//';
679    const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uriText);
680    await systemPasteboard.setData(pasteData);
681    const data = await systemPasteboard.hasData();
682    expect(data).assertEqual(true);
683    systemPasteboard.getData().then((pasteData1) => {
684      expect(pasteData1.getRecordCount()).assertEqual(1);
685      expect(pasteData1.hasType(pasteboard.MIMETYPE_TEXT_URI)).assertEqual(true);
686      expect(pasteData1.getPrimaryUri()).assertEqual(uriText);
687      done();
688    });
689  });
690
691  /**
692   * @tc.name      pasteboard_exception_test22
693   * @tc.desc      Test setData throw error
694   * @tc.type      Function
695   * @tc.require   I5TYVJ
696   */
697  it('pasteboard_exception_test22', 0, async function (done) {
698    const systemPasteboard = pasteboard.getSystemPasteboard();
699    try {
700      systemPasteboard.setData('xxxxx');
701      expect(true === false).assertTrue();
702    } catch (e) {
703      expect(e.code === '401').assertTrue();
704      expect(e.message === 'Parameter error. The Type of data must be pasteData.').assertTrue();
705    }
706    done();
707  });
708
709  /**
710   * @tc.name      pasteboard_exception_test23
711   * @tc.desc      Test setproperty throw error
712   * @tc.type      Function
713   * @tc.require   I5TYVJ
714   */
715  it('pasteboard_exception_test23', 0, async function (done) {
716    const systemPasteboard = pasteboard.getSystemPasteboard();
717    await systemPasteboard.clearData();
718    const textData = 'Hello World!';
719    const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, textData);
720    const pasteDataProperty = pasteData.getProperty();
721    expect(pasteDataProperty.shareOption).assertEqual(pasteboard.ShareOption.CrossDevice);
722    pasteDataProperty.shareOption = pasteboard.ShareOption.InApp;
723    pasteData.setProperty(pasteDataProperty);
724    expect(pasteData.getProperty().shareOption).assertEqual(pasteboard.ShareOption.InApp);
725    done();
726  });
727
728  /**
729   * @tc.name      pasteboard_exception_test24
730   * @tc.desc      Test setproperty throw error
731   * @tc.type      Function
732   * @tc.require   I5TYVJ
733   */
734  it('pasteboard_exception_test24', 0, async function (done) {
735    const systemPasteboard = pasteboard.getSystemPasteboard();
736    await systemPasteboard.clearData();
737    const textData = 'Hello World!';
738    const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, textData);
739    try {
740      const obj = { shareOption: 1 };
741      pasteData.setProperty(obj);
742      expect(true === false).assertTrue();
743    } catch (e) {
744      expect(e.code === '401').assertTrue();
745      expect(e.message === 'Parameter error. The type of property must be PasteDataProperty.').assertTrue();
746    }
747    done();
748  });
749
750  /**
751   * @tc.name      pasteboard_exception_test25
752   * @tc.desc      Test createData throw error
753   * @tc.type      Function
754   * @tc.require   I5TYVJ
755   */
756  it('pasteboard_exception_test25', 0, async function (done) {
757    const textData = 'Hello World!';
758    const dataXml = new ArrayBuffer(512);
759    try {
760      const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, dataXml);
761      expect(true === false).assertTrue();
762    } catch (e) {
763      expect(e.code === '401').assertTrue();
764      expect(e.message === 'Parameter error. The type of mimeType must be string.').assertTrue();
765    }
766    done();
767  });
768
769  /**
770   * @tc.name      pasteboard_exception_test26
771   * @tc.desc      Test createData throw error
772   * @tc.type      Function
773   * @tc.require   I5TYVJ
774   */
775  it('pasteboard_exception_test26', 0, async function (done) {
776    const textData = 'Hello World!';
777    const dataXml = new ArrayBuffer(512);
778    try {
779      const pasteData = pasteboard.createData('xxxxx', textData);
780      expect(true === false).assertTrue();
781    } catch (e) {
782      expect(e.code === '401').assertTrue();
783      expect(e.message === 'Parameter error. The mimeType is not an arraybuffer.').assertTrue();
784    }
785    done();
786  });
787
788  /**
789   * @tc.name      pasteboard_exception_test27
790   * @tc.desc      Test createData throw error
791   * @tc.type      Function
792   * @tc.require   I5TYVJ
793   */
794  it('pasteboard_exception_test27', 0, async function (done) {
795    try {
796      const pasteData = pasteboard.createData(pasteboard.MIMETYPE_PIXELMAP, {});
797      expect(true === false).assertTrue();
798    } catch (e) {
799      expect(e.code === '401').assertTrue();
800      expect(e.message === 'Parameter error. Actual mimeType is not mimetype_pixelmap.').assertTrue();
801    }
802    done();
803  });
804
805  /**
806   * @tc.name      pasteboard_exception_test28
807   * @tc.desc      异常值 非数组
808   * @tc.type      Function
809   * @tc.require   AR000H5HVI
810   */
811  it('pasteboard_exception_test28', 0, async function (done) {
812    const systemPasteboard = pasteboard.getSystemPasteboard();
813    await systemPasteboard.clearData();
814    const textData = "部分人的十点半:\n" +
815    "https://pr5yyye-drseyive.u54yk.cwerfe/s/42e1ewed77f3dab4" +
816    "网gest加尔文iqru发的我ui哦计划任务i文化人:\n" +
817    "~b0043fg3423tddj~";
818    const pasteData = pasteboard.createPlainTextData(textData);
819    await systemPasteboard.setPasteData(pasteData);
820    const res = await systemPasteboard.hasPasteData();
821    expect(res).assertEqual(true);
822    const patterns = pasteboard.Pattern.EMAIL_ADDRESS;
823    try {
824      await systemPasteboard.detectPatterns(patterns);
825    } catch (e) {
826      expect(e.code == 401).assertTrue();
827    }
828    done();
829  });
830
831  /**
832   * @tc.name      pasteboard_exception_test29
833   * @tc.desc      异常值 传空
834   * @tc.type      Function
835   * @tc.require   AR000H5HVI
836   */
837  it('pasteboard_exception_test29', 0, async function (done) {
838    const systemPasteboard = pasteboard.getSystemPasteboard();
839    await systemPasteboard.clearData();
840    const textData = "部分人的十点半:\n" +
841    "https://pr5yyye-drseyive.u54yk.cwerfe/s/42e1ewed77f3dab4" +
842    "网gest加尔文iqru发的我ui哦计划任务i文化人:\n" +
843    "~b0043fg3423tddj~";
844    const pasteData = pasteboard.createPlainTextData(textData);
845    await systemPasteboard.setPasteData(pasteData);
846    const res = await systemPasteboard.hasPasteData();
847    expect(res).assertEqual(true);
848    try {
849      await systemPasteboard.detectPatterns();
850    } catch (e) {
851      expect(e.code == 401).assertTrue();
852    }
853    done();
854  });
855
856  /**
857   * @tc.name      pasteboard_exception_test30
858   * @tc.desc      异常值 数组内元素出错
859   * @tc.type      Function
860   * @tc.require   AR000H5HVI
861   */
862  it('pasteboard_exception_test30', 0, async function (done) {
863    const systemPasteboard = pasteboard.getSystemPasteboard();
864    await systemPasteboard.clearData();
865    const textData = "部分人的十点半:\n" +
866    "https://pr5yyye-drseyive.u54yk.cwerfe/s/42e1ewed77f3dab4" +
867    "网gest加尔文iqru发的我ui哦计划任务i文化人:\n" +
868    "~b0043fg3423tddj~";
869    const pasteData = pasteboard.createPlainTextData(textData);
870    await systemPasteboard.setPasteData(pasteData);
871    const res = await systemPasteboard.hasPasteData();
872    expect(res).assertEqual(true);
873    const patterns = ["dsa", "fdsf", "da"];
874    try {
875      await systemPasteboard.detectPatterns(patterns);
876    } catch (e) {
877      expect(e.code == 401).assertTrue();
878    }
879    done();
880  });
881
882  /**
883   * @tc.name      pasteboard_exception_test31
884   * @tc.desc      异常值 参数个数异常
885   * @tc.type      Function
886   * @tc.require   AR000H5HVI
887   */
888  it('pasteboard_exception_test31', 0, async function (done) {
889    const systemPasteboard = pasteboard.getSystemPasteboard();
890    await systemPasteboard.clearData();
891    const textData = "部分人的十点半:\n" +
892    "https://pr5yyye-drseyive.u54yk.cwerfe/s/42e1ewed77f3dab4" +
893    "网gest加尔文iqru发的我ui哦计划任务i文化人:\n" +
894    "~b0043fg3423tddj~";
895    const pasteData = pasteboard.createPlainTextData(textData);
896    await systemPasteboard.setPasteData(pasteData);
897    const res = await systemPasteboard.hasPasteData();
898    expect(res).assertEqual(true);
899    const patterns1 = [0, 1];
900    const patterns2 = [1, 2];
901    try {
902      await systemPasteboard.detectPatterns(patterns1, patterns2);
903    } catch (e) {
904      expect(e.code == 401).assertTrue();
905    }
906    done();
907  });
908
909  /**
910   * @tc.name      pasteboard_exception_test32
911   * @tc.desc      异常值-非预期数字数组
912   * @tc.type      Function
913   * @tc.require   AR000H5HVI
914   */
915  it('pasteboard_exception_test32', 0, async function (done) {
916    const systemPasteboard = pasteboard.getSystemPasteboard();
917    await systemPasteboard.clearData();
918    const textData = "<!DOCTYPE html><html><head><title>" +
919    ",尽快改好Greg就就。、</title></head><body><h2>访如果如果</h2>" +
920    "<p>搞了个<a href=\"https://grehtjeffxample.com\">" +
921    "剖一个v给ioadhoa@wdoiewf.com</a>。</p></body></html>";
922    const pasteData = pasteboard.createHtmlData(textData);
923    await systemPasteboard.setPasteData(pasteData);
924    const res = await systemPasteboard.hasPasteData();
925    expect(res).assertEqual(true);
926    const patterns1 = [0, 1, 23789, 238];
927    try {
928      await systemPasteboard.detectPatterns(patterns1);
929    } catch (e) {
930      expect(e.code == 401).assertTrue();
931    }
932    done();
933  });
934
935  /**
936   * @tc.name      pasteboard_exception_test33
937   * @tc.desc      异常值-空数组
938   * @tc.type      Function
939   * @tc.require   AR000H5HVI
940   */
941  it('pasteboard_exception_test33', 0, async function (done) {
942    const systemPasteboard = pasteboard.getSystemPasteboard();
943    await systemPasteboard.clearData();
944    const textData = "<!DOCTYPE html><html><head><title>" +
945    ",尽快改好Greg就就。、</title></head><body><h2>访如果如果</h2>" +
946    "<p>搞了个<a href=\"https://grehtjeffxample.com\">" +
947    "剖一个v给ioadhoa@wdoiewf.com</a>。</p></body></html>";
948    const pasteData = pasteboard.createHtmlData(textData);
949    await systemPasteboard.setPasteData(pasteData);
950    const res = await systemPasteboard.hasPasteData();
951    expect(res).assertEqual(true);
952    const patterns1 = [];
953    try {
954      await systemPasteboard.detectPatterns(patterns1);
955    } catch (e) {
956      expect(e.code == 401).assertTrue();
957    }
958    done();
959  });
960
961});
962