1/*
2* Copyright (c) 2021 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*/
15import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
16import storage from '@ohos.data.storage'
17
18const PATH = "/data/storage/el2/database/test_storage";
19const KEY_TEST_INT_ELEMENT = 'key_test_int';
20const KEY_TEST_LONG_ELEMENT = 'key_test_long';
21const KEY_TEST_FLOAT_ELEMENT = 'key_test_float';
22const KEY_TEST_BOOLEAN_ELEMENT = 'key_test_boolean';
23const KEY_TEST_STRING_ELEMENT = 'key_test_string';
24
25var mPref;
26
27describe('StorageSyncJsunit', function () {
28    beforeAll(function() {
29        console.info('beforeAll')
30    })
31
32    beforeEach(async function () {
33        console.info('beforeEach');
34        mPref = await storage.getStorageSync(PATH);
35    })
36
37    afterEach(async function () {
38        console.info('afterEach');
39        await storage.deleteStorageSync(PATH);
40    })
41
42    afterAll(function () {
43        console.info('afterAll')
44    })
45
46    it('testClear001', 0, function () {
47        mPref.putSync(KEY_TEST_STRING_ELEMENT, "test");
48        mPref.putSync(KEY_TEST_INT_ELEMENT, 3);
49        mPref.flushSync();
50        mPref.clearSync();
51        expect("defaultvalue").assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, "defaultvalue"));
52        expect(0).assertEqual(mPref.getSync(KEY_TEST_INT_ELEMENT, 0));
53    })
54
55    /**
56     * @tc.name Constructor test
57     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0010
58     * @tc.desc Constructor test
59     */
60    it('testConstructor002', 0, function () {
61        expect('to:' + mPref).assertEqual('to:[object Object]');
62    })
63
64    /**
65     * @tc.name put string sync interface test
66     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0020
67     * @tc.desc put string sync interface test
68     */
69    it('testHasKey003', 0, function () {
70        mPref.putSync(KEY_TEST_STRING_ELEMENT, "test");
71        expect(true).assertEqual(mPref.hasSync(KEY_TEST_STRING_ELEMENT));
72    })
73
74    /**
75     * @tc.name put int sync interface test
76     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0170
77     * @tc.desc put int sync interface test
78     */
79    it('testHasKey004', 0, function () {
80        mPref.putSync(KEY_TEST_INT_ELEMENT, 1);
81        expect(true).assertEqual(mPref.hasSync(KEY_TEST_INT_ELEMENT));
82    })
83
84    /**
85     * @tc.name put boolean sync interface test
86     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0180
87     * @tc.desc put boolean sync interface test
88     */
89    it('testHasKey005', 0, function () {
90        mPref.putSync(KEY_TEST_BOOLEAN_ELEMENT, false);
91        expect(true).assertEqual(mPref.hasSync(KEY_TEST_BOOLEAN_ELEMENT));
92    })
93
94    /**
95     * @tc.name put long sync interface test
96     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0190
97     * @tc.desc put long sync interface test
98     */
99    it('testHasKey006', 0, function () {
100        mPref.putSync(KEY_TEST_LONG_ELEMENT, 0);
101        expect(true).assertEqual(mPref.hasSync(KEY_TEST_LONG_ELEMENT));
102    })
103
104    /**
105     * @tc.name put float sync interface test
106     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0200
107     * @tc.desc put float sync interface test
108     */
109    it('testHasKey007', 0, function () {
110        mPref.putSync(KEY_TEST_FLOAT_ELEMENT, 1.1);
111        expect(true).assertEqual(mPref.hasSync(KEY_TEST_FLOAT_ELEMENT));
112    })
113
114    /**
115     * @tc.name put boolean sync interface test
116     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0030
117     * @tc.desc put boolean sync interface test
118     */
119    it('testGetBoolean005', 0, function () {
120        mPref.putSync(KEY_TEST_LONG_ELEMENT, true);
121        expect(true).assertEqual(mPref.hasSync(KEY_TEST_LONG_ELEMENT));
122    })
123
124    /**
125     * @tc.name get defaultValue sync interface test
126     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0040
127     * @tc.desc get defaultValue sync interface test
128     */
129    it('testGetDefValue006', 0, function () {
130        expect(-1).assertEqual(mPref.getSync(KEY_TEST_INT_ELEMENT, -1));
131        expect(1.0).assertEqual(mPref.getSync(KEY_TEST_FLOAT_ELEMENT, 1.0));
132        expect(10000).assertEqual(mPref.getSync(KEY_TEST_LONG_ELEMENT, 10000));
133        expect(true).assertEqual(mPref.getSync(KEY_TEST_BOOLEAN_ELEMENT, true));
134        expect('defaultValue').assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, "defaultValue"));
135    })
136
137    /**
138     * @tc.name put float sync interface test
139     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0050
140     * @tc.desc put float sync interface test
141     */
142    it('testGetFloat007', 0, function () {
143        mPref.putSync(KEY_TEST_FLOAT_ELEMENT, 3.0);
144        expect(3.0).assertEqual(mPref.getSync(KEY_TEST_FLOAT_ELEMENT, 0.0));
145        expect(0.0).assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, 0.0));
146    })
147
148    /**
149     * @tc.name put int sync interface test
150     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0060
151     * @tc.desc put int sync interface test
152     */
153    it('testGetInt008', 0, function () {
154        mPref.putSync(KEY_TEST_INT_ELEMENT, 3);
155        expect(3).assertEqual(mPref.getSync(KEY_TEST_INT_ELEMENT, 0.0));
156    })
157
158    /**
159     * @tc.name put long sync interface test
160     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0070
161     * @tc.desc put long sync interface test
162     */
163    it('testGetLong009', 0, function () {
164        mPref.putSync(KEY_TEST_LONG_ELEMENT, 3);
165        expect(3).assertEqual(mPref.getSync(KEY_TEST_LONG_ELEMENT, 0));
166        expect(0).assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, 0));
167    })
168
169    /**
170     * @tc.name put String & int sync interface test
171     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0080
172     * @tc.desc put String & int sync interface test
173     */
174    it('testGetString10', 0, function () {
175        mPref.putSync(KEY_TEST_STRING_ELEMENT, "test");
176        mPref.putSync(KEY_TEST_INT_ELEMENT, 3);
177        mPref.flushSync();
178        expect('test').assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, "defaultvalue"));
179        expect('defaultvalue').assertEqual(mPref.getSync(KEY_TEST_INT_ELEMENT, "defaultvalue"));
180    })
181
182    /**
183     * @tc.name put boolean sync interface test
184     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0090
185     * @tc.desc put boolean sync interface test
186     */
187    it('testPutBoolean012', 0, function () {
188        mPref.putSync(KEY_TEST_BOOLEAN_ELEMENT, true);
189        expect(true).assertEqual(mPref.getSync(KEY_TEST_BOOLEAN_ELEMENT, false));
190        mPref.flushSync();
191        storage.removeStorageFromCacheSync(PATH);
192        mPref = null;
193        mPref = storage.getStorageSync(PATH);
194        expect(true).assertEqual(mPref.getSync(KEY_TEST_BOOLEAN_ELEMENT, false));
195    })
196
197    /**
198     * @tc.name put float sync interface test
199     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0100
200     * @tc.desc put float sync interface test
201     */
202    it('testPutFloat013', 0, function () {
203        mPref.putSync(KEY_TEST_FLOAT_ELEMENT, 4.0);
204        expect(4.0).assertEqual(mPref.getSync(KEY_TEST_FLOAT_ELEMENT, 0.0));
205        mPref.flushSync();
206        storage.removeStorageFromCacheSync(PATH);
207        mPref = null;
208        mPref = storage.getStorageSync(PATH);
209        expect(4.0).assertEqual(mPref.getSync(KEY_TEST_FLOAT_ELEMENT, 0.0));
210    })
211
212    /**
213     * @tc.name put int sync interface test
214     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0110
215     * @tc.desc put int sync interface test
216     */
217    it('testPutInt014', 0, function () {;
218        mPref.putSync(KEY_TEST_INT_ELEMENT, 4);
219        expect(4).assertEqual(mPref.getSync(KEY_TEST_INT_ELEMENT, 0));
220        mPref.flushSync();
221        storage.removeStorageFromCacheSync(PATH);
222        mPref = null;
223        mPref = storage.getStorageSync(PATH);
224        expect(4).assertEqual(mPref.getSync(KEY_TEST_INT_ELEMENT, 0));
225    })
226
227    /**
228     * @tc.name put long sync interface test
229     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0120
230     * @tc.desc put long sync interface test
231     */
232    it('testPutLong015', 0, function () {
233        mPref.putSync(KEY_TEST_LONG_ELEMENT, 4);
234        expect(4).assertEqual(mPref.getSync(KEY_TEST_LONG_ELEMENT, 0));
235        mPref.flushSync();
236        storage.removeStorageFromCacheSync(PATH);
237        mPref = null;
238        mPref = storage.getStorageSync(PATH);
239        expect(4).assertEqual(mPref.getSync(KEY_TEST_LONG_ELEMENT, 0));
240    })
241
242    /**
243     * @tc.name put String sync interface test
244     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0130
245     * @tc.desc put String sync interface test
246     */
247    it('testPutString016', 0, function () {
248        mPref.putSync(KEY_TEST_STRING_ELEMENT, "abc");
249        mPref.putSync(KEY_TEST_STRING_ELEMENT, '');
250        expect('').assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, "defaultvalue"));
251        mPref.flushSync();
252        storage.removeStorageFromCacheSync(PATH);
253        mPref = null;
254        mPref = storage.getStorageSync(PATH);
255        expect('').assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, "defaultvalue"));
256    })
257
258    /**
259     * @tc.name put interface test
260     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0140
261     * @tc.desc put interface test
262     */
263    it('testRegisterObserver001', 0, function () {
264        var observer = function (key) {
265            expect('abcd').assertEqual(key);
266        };
267        mPref.on('change', observer);
268        mPref.putSync(KEY_TEST_STRING_ELEMENT, "abcd");
269    })
270
271    /**
272     * @tc.name repeat on interface test
273     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0150
274     * @tc.desc repeat on interface test
275     */
276    it('testRegisterObserver002', 0, function () {
277        var observer = function (key) {
278            console.info('testRegisterObserver001 key' + key);
279            expect('abc').assertEqual(key);
280        };
281        mPref.on('change', observer);
282        mPref.on('change', observer);
283        mPref.putSync(KEY_TEST_STRING_ELEMENT, "abc");
284    })
285
286    /**
287     * @tc.name off interface test
288     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0160
289     * @tc.desc off interface test
290     */
291    it('testUnRegisterObserver001', 0, function () {
292        var observer = function (key) {
293            console.info('testUnRegisterObserver001 key' + key);
294            expect('').assertEqual(key);
295        };
296        mPref.on('change', observer);
297        mPref.off('change', observer);
298        mPref.putSync(KEY_TEST_STRING_ELEMENT, "abc");
299    })
300
301    /**
302     * @tc.name test putSync interface
303     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0170
304     * @tc.desc test put interface input parameter key exceed 1024 bytes.
305     */
306    it('testputSyncIllegal001', 0, function () {
307        let illegalKey = "1";
308        illegalKey = illegalKey.repeat(1025);
309        try {
310            mPref.putSync(illegalKey, "123456");
311            expect(false).assertTrue();
312        } catch (err) {
313            console.log("try catch err =" + err);
314        }
315    })
316
317    /**
318     * @tc.name test putSync interface
319     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0180
320     * @tc.desc test put interface input parameter key is legal.
321     */
322    it('testputSyncIllegal002', 0, function () {
323        let legalKey = "1";
324        legalKey = legalKey.repeat(1024);
325        try {
326            mPref.putSync(legalKey, "123456");
327        } catch (err) {
328            console.log("try catch err =" + err);
329            expect(false).assertTrue();
330        }
331    })
332
333    /**
334     * @tc.name test putSync interface
335     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0180
336     * @tc.desc test put interface input parameter value exceed 16 * 1024 * 1024byte.
337     */
338    it('testputSyncIllegal003', 0, function () {
339        let illegalValue = "1";
340        illegalValue = illegalValue.repeat(16 * 1024 * 1024 + 1);
341        try {
342            mPref.putSync("test", illegalValue);
343            expect(false).assertTrue();
344        } catch (err) {
345            console.log("try catch err =" + err);
346        }
347    })
348
349    /**
350     * @tc.name test putSync interface
351     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0180
352     * @tc.desc test put interface input parameter value is legal.
353     */
354    it('testputSyncIllegal004', 0, function () {
355        let legalValue = "1";
356        legalValue = legalValue.repeat(16 * 1024 * 1024);
357        try {
358            mPref.putSync("test", legalValue);
359        } catch (err) {
360            console.log("try catch err =" + err);
361            expect(false).assertTrue();
362        }
363    })
364
365    /**
366     * @tc.name test getSync interface
367     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0190
368     * @tc.desc test getSync interface input parameter key exceed 1024 bytes.
369     */
370    it('testgetSyncIllegal001', 0, function () {
371        let illegalkey = "1";
372        illegalkey = illegalkey.repeat(1025);
373        try {
374            mPref.getSync(illegalkey, "defaultValue");
375            expect(false).assertTrue();
376        } catch (err) {
377            console.log("try catch err =" + err);
378        }
379    })
380
381    /**
382     * @tc.name test getSync interface
383     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0190
384     * @tc.desc test getSync interface input parameter key is legal.
385     */
386    it('testgetSyncIllegal002', 0, function () {
387        let legalkey = "1";
388        legalkey = legalkey.repeat(1024);
389        try {
390            mPref.getSync(legalkey, "defaultValue");
391        } catch (err) {
392            console.log("try catch err =" + err);
393            expect(false).assertTrue();
394        }
395    })
396
397    /**
398     * @tc.name test deleteSync interface
399     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0200
400     * @tc.desc test deleteSync interface input parameter key exceed 1024 bytes.
401     */
402    it('testdeleteSyncIllegal001', 0, function () {
403        let illegalkey = "1";
404        illegalkey = illegalkey.repeat(1025);
405        try {
406            mPref.deleteSync(illegalkey);
407            expect(false).assertTrue();
408        } catch (err) {
409            console.log("try catch err =" + err);
410        }
411    })
412
413    /**
414     * @tc.name test deleteSync interface
415     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0200
416     * @tc.desc test deleteSync interface input parameter key is legal.
417     */
418    it('testdeleteSyncIllegal002', 0, function () {
419        let legalkey = "1";
420        legalkey = legalkey.repeat(1024);
421        try {
422            mPref.deleteSync(legalkey);
423        } catch (err) {
424            console.log("try catch err =" + err);
425            expect(false).assertTrue();
426        }
427    })
428
429    /**
430     * @tc.name test hasSync interface
431     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0210
432     * @tc.desc test hasSync interface input parameter key exceed 1024 bytes.
433     */
434    it('testhasSyncIllegal001', 0, function () {
435        let illegalkey = "1";
436        illegalkey = illegalkey.repeat(1025);
437        try {
438            mPref.hasSync(illegalkey);
439            expect(false).assertTrue();
440        } catch (err) {
441            console.log("try catch err =" + err);
442        }
443    })
444
445    /**
446     * @tc.name test hasSync interface
447     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_Sync_0210
448     * @tc.desc test hasSync interface input parameter key is legal.
449     */
450    it('testhasSyncIllegal002', 0, function () {
451        let legalkey = "1";
452        legalkey = legalkey.repeat(1024);
453        try {
454            mPref.hasSync(legalkey);
455        } catch (err) {
456            console.log("try catch err =" + err);
457            expect(false).assertTrue();
458        }
459    })
460})
461