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