• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
15import mediaLibrary from "@ohos.multimedia.mediaLibrary";
16import abilityAccessCtrl from "@ohos.abilityAccessCtrl";
17import uitest from "@ohos.UiTest";
18const presetsCount = {
19    ActsMediaLibraryAlbumTest: { albumsCount: 15, assetsCount: 27 },
20    ActsMediaLibraryBaseTest: { albumsCount: 11, assetsCount: 14 },
21    ActsMediaLibraryFavoriteTest: { albumsCount: 6, assetsCount: 32 },
22    ActsMediaLibraryFileTest: { albumsCount: 6, assetsCount: 28 },
23    ActsMediaLibraryFileAssetTest: { albumsCount: 27, assetsCount: 116 },
24    ActsMediaLibraryFileKeyTest: { albumsCount: 2, assetsCount: 2 },
25    ActsMediaLibraryFileResultTest: { albumsCount: 3, assetsCount: 112 },
26    ActsMediaLibraryGetThumbnailTest: { albumsCount: 3, assetsCount: 3 },
27    ActsMediaLibraryMediafetchoptionsTest: { albumsCount: 3, assetsCount: 8 },
28    ActsMediaLibraryTrashJsTest: { albumsCount: 6, assetsCount: 24 },
29};
30
31const IMAGE_TYPE = mediaLibrary.MediaType.IMAGE;
32const VIDEO_TYPE = mediaLibrary.MediaType.VIDEO;
33const AUDIO_TYPE = mediaLibrary.MediaType.AUDIO;
34const FILE_TYPE = mediaLibrary.MediaType.FILE;
35
36const FILEKEY = mediaLibrary.FileKey;
37const { RELATIVE_PATH, ALBUM_NAME, MEDIA_TYPE } = FILEKEY;
38
39const sleep = async function sleep(times) {
40    if (!times) {
41        times = 10;
42    }
43    await new Promise((res) => setTimeout(res, times));
44};
45
46const allFetchOp = function (others) {
47    if (!others) {
48        others = {};
49    }
50    return {
51        selections: "",
52        selectionArgs: [],
53        ...others,
54    };
55};
56
57const fetchOps = function (testNum, path, type, others) {
58    if (!others) {
59        others = {};
60    }
61    let ops = {
62        selections: FILEKEY.RELATIVE_PATH + "= ? AND " + FILEKEY.MEDIA_TYPE + "=?",
63        selectionArgs: [path, type.toString()],
64        ...others,
65    };
66    console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`);
67    return ops;
68};
69const nameFetchOps = function (testNum, path, display_name, type) {
70    let ops = {
71        selections: FILEKEY.RELATIVE_PATH + "= ? AND " + FILEKEY.DISPLAY_NAME + "= ? AND " + FILEKEY.MEDIA_TYPE + "=?",
72        selectionArgs: [path, display_name, type.toString()],
73    };
74    console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`);
75    return ops;
76};
77
78const idFetchOps = function (testNum, albumId) {
79    let ops = {
80        selections: FILEKEY.ALBUM_ID + "= ?",
81        selectionArgs: [albumId + ""],
82    };
83    console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`);
84    return ops;
85};
86
87const fileIdFetchOps = function (testNum, id) {
88    let ops = {
89        selections: FILEKEY.ID + "= ?",
90        selectionArgs: [id + ""],
91    };
92    console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`);
93    return ops;
94};
95
96const albumFetchOps = function (testNum, albumName, others) {
97    let ops = {
98        selections: ALBUM_NAME + "= ?",
99        selectionArgs: [albumName],
100        ...others,
101    };
102    console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`);
103    return ops;
104};
105
106// albums of two resource types
107const albumTwoTypesFetchOps = function (testNum, paths, albumName, types, others) {
108    if (!others) {
109        others = { order: FILEKEY.DATE_ADDED + " DESC" };
110    }
111    try {
112        let ops = {
113            selections:
114                "(" +
115                RELATIVE_PATH +
116                "= ? or " +
117                RELATIVE_PATH +
118                "= ? ) AND " +
119                ALBUM_NAME +
120                "= ? AND (" +
121                MEDIA_TYPE +
122                "= ? or " +
123                MEDIA_TYPE +
124                "= ?)",
125            selectionArgs: [paths[0], paths[1], albumName, types[0].toString(), types[1].toString()],
126            ...others,
127        };
128        console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`);
129        return ops;
130    } catch (error) {
131        console.info(`albumTwoTypesFetchOps :: error: ${error}`);
132    }
133};
134
135// albums of three resource types
136const albumThreeTypesFetchOps = function (testNum, paths, albumName, types, others) {
137    if (!others) {
138        others = { order: FILEKEY.DATE_ADDED + " DESC" };
139    }
140    try {
141        let ops = {
142            selections:
143                "(" +
144                RELATIVE_PATH +
145                "= ? or " +
146                RELATIVE_PATH +
147                "= ? or " +
148                RELATIVE_PATH +
149                "= ? ) AND " +
150                ALBUM_NAME +
151                "= ? AND (" +
152                MEDIA_TYPE +
153                "= ? or " +
154                MEDIA_TYPE +
155                "= ? or " +
156                MEDIA_TYPE +
157                "= ?)",
158            selectionArgs: [
159                paths[0],
160                paths[1],
161                paths[2],
162                albumName,
163                types[0].toString(),
164                types[1].toString(),
165                types[2].toString(),
166            ],
167            ...others,
168        };
169        console.info(`${testNum}: fetchOps ${JSON.stringify(ops)}`);
170        return ops;
171    } catch (error) {
172        console.info(`albumThreeTypesFetchOps :: error: ${error}`);
173    }
174};
175
176const fileFetchOption = function (testNum, selections, selectionArgs) {
177    let ops = {
178        selections: selections,
179        selectionArgs: selectionArgs,
180    };
181    console.info(`${testNum} fetchOps: ${JSON.stringify(ops)}`);
182    return ops;
183}
184
185const checkPresetsAssets = async function (media, hapName) {
186    console.info("checkPresetsAssets start");
187    let albumList = await media.getAlbums(allFetchOp());
188    let albumsCount = albumList.length;
189    let fetchFileResult = await media.getFileAssets(allFetchOp());
190    let assetsCount = await fetchFileResult.getCount();
191    let presetsassetsCount = presetsCount[hapName].assetsCount;
192    let presetsalbumsCount = presetsCount[hapName].albumsCount;
193    if (assetsCount != presetsCount[hapName].assetsCount || albumsCount != presetsCount[hapName].albumsCount) {
194        console.info(`${hapName} checkPresetsAssets failed;
195            assetsCount : presetsassetsCount = ${assetsCount} : ${presetsassetsCount}
196            albumsCount : presetsalbumsCount = ${albumsCount} : ${presetsalbumsCount}`);
197        fetchFileResult.close();
198    } else {
199        console.info(`${hapName} checkPresetsAssets passed`);
200        fetchFileResult.close();
201    }
202};
203
204const checkAssetsCount = async function (done, testNum, fetchFileResult, expectCount) {
205    if (!fetchFileResult) {
206        console.info(`${testNum}:: fetchFileResult error:`);
207        expect(false).assertTrue();
208        done();
209        return false;
210    }
211    let count = await fetchFileResult.getCount();
212    if (count != expectCount) {
213        console.info(`${testNum}:: count:expectCount - ${count} : ${expectCount}`);
214        expect(count).assertEqual(expectCount);
215        done();
216    }
217    return count == expectCount;
218};
219
220const checkAlbumsCount = function (done, testNum, albumList, expectCount) {
221    if (!Array.isArray(albumList)) {
222        console.info(`${testNum}:: albumList error:`);
223        expect(false).assertTrue();
224        done();
225        return false;
226    }
227    let albumsCount = albumList.length;
228    if (albumsCount != expectCount) {
229        console.info(`${testNum}:: albumsCount: expectCount - ${albumsCount} : ${expectCount}`);
230        expect(albumsCount).assertEqual(expectCount);
231        done();
232    }
233    return albumsCount == expectCount;
234};
235
236const getPermission = async function (name, context) {
237    if (!name) {
238        name = "ohos.acts.multimedia.mediaLibrary";
239    }
240
241    try {
242        console.info('getPermission start: ' + name);
243        let isGetPermission = false;
244        let permissions = ["ohos.permission.MEDIA_LOCATION", "ohos.permission.READ_MEDIA", "ohos.permission.WRITE_MEDIA"];
245        let atManager = abilityAccessCtrl.createAtManager();
246        atManager.requestPermissionsFromUser(context, permissions, (err, result) => {
247            if (err) {
248                console.info('getPermission failed: ' + JSON.stringify(err));
249            } else {
250                console.info('getPermission suc: ' + JSON.stringify(result));
251                isGetPermission = true;
252            }
253        });
254
255        let driver = uitest.Driver.create();
256        await sleep(500);
257        for (let i = 0; i < 10; i++) {
258            if (isGetPermission) {
259                break;
260            }
261            await sleep(500);
262            let button = await driver.findComponent(uitest.ON.text('允许'));
263            if (button != undefined) {
264                await button.click();
265            }
266        }
267        console.info("getPermission end");
268    } catch (error) {
269        console.info('getPermission error: ' + error);
270    }
271};
272
273const MODIFY_ERROR_CODE_01 = "-1000";
274
275const isNum = function (value) {
276    return typeof value === "number" && !isNaN(value);
277};
278export {
279    getPermission,
280    IMAGE_TYPE,
281    VIDEO_TYPE,
282    AUDIO_TYPE,
283    FILE_TYPE,
284    FILEKEY,
285    sleep,
286    allFetchOp,
287    fetchOps,
288    nameFetchOps,
289    idFetchOps,
290    albumFetchOps,
291    fileFetchOption,
292    albumTwoTypesFetchOps,
293    albumThreeTypesFetchOps,
294    checkPresetsAssets,
295    checkAssetsCount,
296    checkAlbumsCount,
297    MODIFY_ERROR_CODE_01,
298    isNum,
299    fileIdFetchOps,
300};
301