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('PasteBoardPerfJSTest', function () {
21  beforeAll(async function () {
22    console.info('beforeAll');
23  });
24
25  afterAll(async function () {
26    console.info('afterAll');
27  });
28
29  const BASE_CONUT = 100;
30  const htmlText = '<html><head></head><body>Hello!</body></html>';
31
32  /**
33   * @tc.name      clearData_Callback_performance_test_001
34   * @tc.desc      clearData interface Callback performance test
35   * @tc.type      PERF
36   * @tc.require   I5YP4X
37   */
38  it('clearData_Callback_performance_test_001', 0, async function (done) {
39    let systemPasteboard = pasteboard.getSystemPasteboard();
40    let startTime = new Date().getTime();
41    clearDataCallbackPerfTest(0);
42
43    function clearDataCallbackPerfTest(index) {
44      systemPasteboard.clearData(() => {
45        if (index < BASE_CONUT) {
46          clearDataCallbackPerfTest(index + 1);
47        } else {
48          computeAverageTime(startTime, BASE_CONUT, 'clearData_Callback_performance_test_001 averageTime:');
49          done();
50        }
51      });
52    }
53  });
54
55  /**
56   * @tc.name      clear_Callback_performance_test_001
57   * @tc.desc      clear interface Callback performance test
58   * @tc.type      PERF
59   * @tc.require   I5YP4X
60   */
61  it('clear_Callback_performance_test_001', 0, async function (done) {
62    let systemPasteboard = pasteboard.getSystemPasteboard();
63    let startTime = new Date().getTime();
64    clearCallbackPerfTest(0);
65
66    function clearCallbackPerfTest(index) {
67      systemPasteboard.clear(() => {
68        if (index < BASE_CONUT) {
69          clearCallbackPerfTest(index + 1);
70        } else {
71          computeAverageTime(startTime, BASE_CONUT, 'clear_Callback_performance_test_001 averageTime:');
72          done();
73        }
74      });
75    }
76  });
77
78  /**
79   * @tc.name      setData_Callback_performance_test_001
80   * @tc.desc      setData interface Callback performance test
81   * @tc.type      PERF
82   * @tc.require   I5YP4X
83   */
84  it('setData_Callback_performance_test_001', 0, async function (done) {
85    let systemPasteboard = pasteboard.getSystemPasteboard();
86    let pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_HTML, htmlText);
87    let startTime = new Date().getTime();
88    setDataCallbackPerfTest(0);
89
90    function setDataCallbackPerfTest(index) {
91      systemPasteboard.setData(pasteData, () => {
92        if (index < BASE_CONUT) {
93          setDataCallbackPerfTest(index + 1);
94        } else {
95          computeAverageTime(startTime, BASE_CONUT, 'setData_Callback_performance_test_001 averageTime:');
96          done();
97        }
98      });
99    }
100  });
101
102  /**
103   * @tc.name      setPasteData_Callback_performance_test_001
104   * @tc.desc      setPasteData interface Callback performance test
105   * @tc.type      PERF
106   * @tc.require   I5YP4X
107   */
108  it('setPasteData_Callback_performance_test_001', 0, async function (done) {
109    let systemPasteboard = pasteboard.getSystemPasteboard();
110    let pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_HTML, htmlText);
111    let startTime = new Date().getTime();
112    setPasteDataCallbackPerfTest(0);
113
114    function setPasteDataCallbackPerfTest(index) {
115      systemPasteboard.setPasteData(pasteData, () => {
116        if (index < BASE_CONUT) {
117          setPasteDataCallbackPerfTest(index + 1);
118        } else {
119          computeAverageTime(startTime, BASE_CONUT, 'setPasteData_Callback_performance_test_001 averageTime:');
120          done();
121        }
122      });
123    }
124  });
125
126  /**
127   * @tc.name      hasData_Callback_performance_test_001
128   * @tc.desc      hasData interface Callback performance test
129   * @tc.type      PERF
130   * @tc.require   I5YP4X
131   */
132  it('hasData_Callback_performance_test_001', 0, async function (done) {
133    let systemPasteboard = pasteboard.getSystemPasteboard();
134    let startTime = new Date().getTime();
135    hasDataCallbackPerfTest(0);
136
137    function hasDataCallbackPerfTest(index) {
138      systemPasteboard.hasData(() => {
139        if (index < BASE_CONUT) {
140          hasDataCallbackPerfTest(index + 1);
141        } else {
142          computeAverageTime(startTime, BASE_CONUT, 'hasData_Callback_performance_test_001 averageTime:');
143          done();
144        }
145      });
146    }
147  });
148
149  /**
150   * @tc.name      hasPasteData_Callback_performance_test_001
151   * @tc.desc      hasPasteData interface Callback performance test
152   * @tc.type      PERF
153   * @tc.require   I5YP4X
154   */
155  it('hasPasteData_Callback_performance_test_001', 0, async function (done) {
156    let systemPasteboard = pasteboard.getSystemPasteboard();
157    let startTime = new Date().getTime();
158    hasPasteDataCallbackPerfTest(0);
159
160    function hasPasteDataCallbackPerfTest(index) {
161      systemPasteboard.hasPasteData(() => {
162        if (index < BASE_CONUT) {
163          hasPasteDataCallbackPerfTest(index + 1);
164        } else {
165          computeAverageTime(startTime, BASE_CONUT, 'hasPasteData_Callback_performance_test_001 averageTime:');
166          done();
167        }
168      });
169    }
170  });
171
172  /**
173   * @tc.name      getData_Callback_performance_test_001
174   * @tc.desc      getData interface Callback performance test
175   * @tc.type      PERF
176   * @tc.require   I5YP4X
177   */
178  it('getData_Callback_performance_test_001', 0, async function (done) {
179    let systemPasteboard = pasteboard.getSystemPasteboard();
180    let pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_HTML, htmlText);
181    await systemPasteboard.clearData();
182    await systemPasteboard.setData(pasteData);
183    let startTime = new Date().getTime();
184    getDataCallbackPerfTest(0);
185
186    function getDataCallbackPerfTest(index) {
187      systemPasteboard.getPasteData(() => {
188        if (index < BASE_CONUT) {
189          getDataCallbackPerfTest(index + 1);
190        } else {
191          computeAverageTime(startTime, BASE_CONUT, 'getData_Callback_performance_test_001 averageTime:');
192          done();
193        }
194      });
195    }
196  });
197
198  /**
199   * @tc.name      getPasteData_Callback_performance_test_001
200   * @tc.desc      getPasteData interface Callback performance test
201   * @tc.type      PERF
202   * @tc.require   I5YP4X
203   */
204  it('getPasteData_Callback_performance_test_001', 0, async function (done) {
205    let systemPasteboard = pasteboard.getSystemPasteboard();
206    let pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_HTML, htmlText);
207    await systemPasteboard.clearData();
208    await systemPasteboard.setData(pasteData);
209    let startTime = new Date().getTime();
210    getPasteDataCallbackPerfTest(0);
211
212    function getPasteDataCallbackPerfTest(index) {
213      systemPasteboard.getPasteData(() => {
214        if (index < BASE_CONUT) {
215          getPasteDataCallbackPerfTest(index + 1);
216        } else {
217          computeAverageTime(startTime, BASE_CONUT, 'getPasteData_Callback_performance_test_001 averageTime:');
218          done();
219        }
220      });
221    }
222  });
223
224  /**
225   * @tc.name      convertToText_Callback_performance_test_001
226   * @tc.desc      convertToText interface Callback performance test
227   * @tc.type      PERF
228   * @tc.require   I5YP4X
229   */
230  it('convertToText_Callback_performance_test_001', 0, async function (done) {
231    let pasteDataRecord = pasteboard.createRecord(pasteboard.MIMETYPE_TEXT_HTML, htmlText);
232    let startTime = new Date().getTime();
233    convertToTextCallbackPerfTest(0);
234
235    function convertToTextCallbackPerfTest(index) {
236      pasteDataRecord.convertToText(() => {
237        if (index < BASE_CONUT) {
238          convertToTextCallbackPerfTest(index + 1);
239        } else {
240          computeAverageTime(startTime, BASE_CONUT, 'convertToText_Callback_performance_test_001 averageTime:');
241          done();
242        }
243      });
244    }
245  });
246
247  /**
248   * @tc.name      convertToTextV9_Callback_performance_test_001
249   * @tc.desc      convertToTextV9 interface Callback performance test
250   * @tc.type      PERF
251   * @tc.require   I5YP4X
252   */
253  it('convertToTextV9_Callback_performance_test_001', 0, async function (done) {
254    let pasteDataRecord = pasteboard.createRecord(pasteboard.MIMETYPE_TEXT_HTML, htmlText);
255    let startTime = new Date().getTime();
256    convertToTextV9CallbackPerfTest(0);
257
258    function convertToTextV9CallbackPerfTest(index) {
259      pasteDataRecord.convertToTextV9(() => {
260        if (index < BASE_CONUT) {
261          convertToTextV9CallbackPerfTest(index + 1);
262        } else {
263          computeAverageTime(startTime, BASE_CONUT, 'convertToTextV9_Callback_performance_test_001 averageTime:');
264          done();
265        }
266      });
267    }
268  });
269
270  function computeAverageTime(startTime, baseCount, message) {
271    let endTime = new Date().getTime();
272    let averageTime = ((endTime - startTime) * 1000) / baseCount;
273    console.info(message + averageTime);
274  }
275});
276