From fe7c408ebba8118a393f9258511efa8a90297b0d Mon Sep 17 00:00:00 2001 From: mahaifeng Date: Thu, 29 Aug 2024 13:03:48 +0800 Subject: [PATCH] =?UTF-8?q?[fillemanager]=20=E6=B7=BB=E5=8A=A0arraybuffer?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B=E4=B8=8E=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../get-file-system-manager.test.js | 2884 ++++++++-------- .../get-file-system-manager.uvue | 2933 ++++++++++------- pages/API/provider/provider.uvue | 6 +- 3 files changed, 3144 insertions(+), 2679 deletions(-) diff --git a/pages/API/get-file-system-manager/get-file-system-manager.test.js b/pages/API/get-file-system-manager/get-file-system-manager.test.js index 11602989..e4086ff8 100644 --- a/pages/API/get-file-system-manager/get-file-system-manager.test.js +++ b/pages/API/get-file-system-manager/get-file-system-manager.test.js @@ -3,1406 +3,1484 @@ const PAGE_PATH = '/pages/API/get-file-system-manager/get-file-system-manager' describe('ExtApi-FileManagerTest', () => { - if (process.env.uniTestPlatformInfo.indexOf('web') > -1 || process.env.UNI_AUTOMATOR_APP_WEBVIEW == 'true') { - it('dummyTest', () => { - expect(1).toBe(1) - }) - return - } - let page; - let mBasePath; - let mGlobalTempPath; - let mGlobalRootPath - - - function getData(key = '') { - return new Promise(async (resolve, reject) => { - const data = await page.data() - resolve(key ? data[key] : data) - }) - } - - - beforeAll(async () => { - page = await program.reLaunch(PAGE_PATH) - await page.waitFor(600); - }); - - async function isDone() { - let isDone = await page.waitFor(async () => { - return await page.data('done') - }) - await page.setData({ - done: false - }) - return isDone - } - - it('USER_DATA_PATH test', async () => { - // 测试 USER_DATA_PATH - let globalUserDataPath = await getData('globalUserDataPath') - mBasePath = await getData('basePath') - mGlobalRootPath = await getData('globalRootPath') - mGlobalTempPath = await getData('globalTempPath') - - await page.setData({ - logAble: false, - recursiveVal: true, - copyToBasePath: globalUserDataPath, - basePath: globalUserDataPath, - rmDirFile: 'a', - readDir: 'a', - writeFile: 'a/1.txt', - readFile: 'a/1.txt', - unlinkFile: 'a/1.txt', - writeFileContent: '锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦' - }) - - // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 - const btnUnLinkFileButton = await page.$('#btn-clear-file') - await btnUnLinkFileButton.tap() - await isDone() - - - // 清除文件夹 - const btnRmDirButton = await page.$('#btn-remove-dir') - await btnRmDirButton.tap() - await isDone() - // 重新创建测试目录 - const btnMkdDirButton = await page.$('#btn-mkdir') - await btnMkdDirButton.tap() - await isDone() - - const btnReadDirButton = await page.$('#btn-read-dir') - await btnReadDirButton.tap() - await isDone() - - - // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 - let fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual('[]') - let fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual('[]') - - // 先测试 recursive = false 文件夹创建,期望失败 - await page.setData({ - recursiveVal: false, - mkdirFile: 'a/b/c' - }) - - - await btnMkdDirButton.tap() - await isDone() - - - let lastFailError = await getData('lastFailError') - expect(lastFailError.errCode).toEqual(1300002) - expect(lastFailError.errMsg).toEqual('no such file or directory') - let lastCompleteError = await getData('lastCompleteError') - expect(lastCompleteError.errCode).toEqual(1300002) - expect(lastCompleteError.errMsg).toEqual('no such file or directory') - - - // 测试 recursive = true 期望文件夹创建成功 - await page.setData({ - recursiveVal: true - }) - await btnMkdDirButton.tap() - await isDone() - - await btnReadDirButton.tap() - await isDone() - - // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 - fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual("[\"b\"]") - fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\"]") - - // 测试写入文件 - const btnWriteFileButton = await page.$('#btn-write-file') - await btnWriteFileButton.tap() - await isDone() - // 检查目录列表数量 - await btnReadDirButton.tap() - await isDone() - fileListComplete = await getData('fileListComplete') - fileListComplete.sort() - expect(JSON.stringify(fileListComplete)).toEqual("[\"1.txt\",\"b\"]") - fileListSuccess = await getData('fileListSuccess') - fileListSuccess.sort() - expect(JSON.stringify(fileListSuccess)).toEqual("[\"1.txt\",\"b\"]") - // 获取和对比 文件内容 - const btnReadFileButton = await page.$('#btn-read-file') - await btnReadFileButton.tap() - await isDone() - let readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual("锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦") - - // 更换文件内容 获取和对比 文件md5和sha1 - await page.setData({ - writeFileContent: "If you were a teardrop;In my eye,For fear of losing you,I would never cry.And if the golden sun,Should cease to shine its light,Just one smile from you,Would make my whole world bright.", - getFileInfoAlgorithm: "md5" - }) - await btnWriteFileButton.tap() - await isDone() - - await btnReadFileButton.tap() - await isDone() - readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual( - "If you were a teardrop;In my eye,For fear of losing you,I would never cry.And if the golden sun,Should cease to shine its light,Just one smile from you,Would make my whole world bright." - ) - - const btnGetFileInfoButton = await page.$('#btn-get-file-info') - await btnGetFileInfoButton.tap() - await isDone() - - let getFileInfoSize = await getData('getFileInfoSize') - expect(getFileInfoSize).toEqual(185) - let getFileInfoDigest = await getData('getFileInfoDigest') - expect(getFileInfoDigest).toEqual("29ddd02ed3c38ccebb98884eda082cb1") - // 切换为 sha1 - await page.setData({ - getFileInfoAlgorithm: "sha1" - }) - - await btnGetFileInfoButton.tap() - await isDone() - - getFileInfoSize = await getData('getFileInfoSize') - expect(getFileInfoSize).toEqual(185) - getFileInfoDigest = await getData('getFileInfoDigest') - expect(getFileInfoDigest).toEqual("ebef4e75783e0db499fc260d120e695005bead8a") - - // 测试 copyfile - await page.setData({ - - copyFromFile: "a/1.txt", - copyToFile: "a/2.txt" - }) - const btnCopyFileButton = await page.$('#btn-copy-file') - await btnCopyFileButton.tap() - await isDone() - - - await btnReadDirButton.tap() - await isDone() - - // 1.txt 2.txt 两个文件都存在 - fileListComplete = await getData('fileListComplete') - fileListComplete.sort() - expect(JSON.stringify(fileListComplete)).toEqual("[\"1.txt\",\"2.txt\",\"b\"]") - fileListSuccess = await getData('fileListSuccess') - fileListSuccess.sort() - expect(JSON.stringify(fileListSuccess)).toEqual("[\"1.txt\",\"2.txt\",\"b\"]") - - // 测试 rename - await page.setData({ - renameFromFile: "a/2.txt", - renameToFile: "a/3.txt" - }) - - const btnRenameFileButton = await page.$('#btn-rename-file') - await btnRenameFileButton.tap() - await isDone() - - await btnReadDirButton.tap() - await isDone() - - // 1.txt 3.txt 两个文件都存在 - fileListComplete = await getData('fileListComplete') - fileListComplete.sort() - expect(JSON.stringify(fileListComplete)).toEqual("[\"1.txt\",\"3.txt\",\"b\"]") - fileListSuccess = await getData('fileListSuccess') - fileListSuccess.sort() - expect(JSON.stringify(fileListSuccess)).toEqual("[\"1.txt\",\"3.txt\",\"b\"]") - }); - - it('TEMP_PATH test', async () => { - // 测试 TEMP_PATH - let globalTempPath = await getData('globalTempPath') - - let version = process.env.uniTestPlatformInfo - version = parseInt(version.split(" ")[1]) - let testDirName = "我们经历了一场兵慌马乱的战争.1@2#3$4%5^6&7*8(9)0+-qwertyuiopasdfghjklzxcvbnm;," - if (version < 6) { - // android 6 以下文件名不能包含特殊字符 - testDirName = "我们经历了一场兵慌马乱的战争" - } - - await page.setData({ - logAble: false, - recursiveVal: true, - basePath: globalTempPath, - copyToBasePath: globalTempPath, - rmDirFile: 'a', - mkdirFile: 'a', - unlinkFile: 'a/' + testDirName + '/中文路径/张三/name/中文文件.mock' - }) - - - // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 - const btnUnLinkFileButton = await page.$('#btn-unlink-file') - await btnUnLinkFileButton.tap() - await isDone() - - - // 清除文件夹 - const btnRmDirButton = await page.$('#btn-remove-dir') - await btnRmDirButton.tap() - await isDone() - - // 重新创建测试目录 - const btnMkdDirButton = await page.$('#btn-mkdir') - await btnMkdDirButton.tap() - await isDone() - - const btnReadDirButton = await page.$('#btn-read-dir') - await btnReadDirButton.tap() - await isDone() - - - // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 - let fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual("[]") - let fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual("[]") - - // 测试 创建多层级文件目录 - await page.setData({ - recursiveVal: true, - mkdirFile: 'a/b/c/d/e/f/g/h/i/g/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/中文路径/张三/test', - }) - - await btnMkdDirButton.tap() - await isDone() - - await btnReadDirButton.tap() - await isDone() - - fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual("[\"b\"]") - fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\"]") - - // 测试 创建包含中文特殊符号的目录 - await page.setData({ - recursiveVal: true, - mkdirFile: 'a/' + testDirName + '/中文路径/张三/name', - }) - await btnMkdDirButton.tap() - await isDone() - - await btnReadDirButton.tap() - await isDone() - - // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 - fileListComplete = await getData('fileListComplete') - fileListComplete.sort() - expect(JSON.stringify(fileListComplete)).toEqual("[\"b\",\"" + testDirName + "\"]") - fileListSuccess = await getData('fileListSuccess') - fileListSuccess.sort() - expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\",\"" + testDirName + "\"]") - - /** - * 从资源文件中读取图片为base64,测试写入较大文件场景 - * 'static/test-image/logo.ico' 注意,依赖这个资源文件,不能删除 - */ - await page.setData({ - basePath: "", - readFile: 'static/test-image/logo.ico', - readFileEncoding: 'base64' - }) - - - // 获取和对比 文件内容 - const btnReadFileButton = await page.$('#btn-read-file') - await btnReadFileButton.tap() - await isDone() - let readFileRet = await getData('readFileRet') - expect(readFileRet.length).toEqual(208544) - let endStr = readFileRet.substring(readFileRet.length - 10) - expect(endStr).toEqual("///////w==") - - await page.setData({ - basePath: globalTempPath, - writeFile: 'a/' + testDirName + '/中文路径/张三/name/中文文件.mock', - writeFileContent: readFileRet - }) - - - const btnWriteFileButton = await page.$('#btn-write-file') - await btnWriteFileButton.tap() - await isDone() - - // 获取文件列表,判断是否写入成功,同时置空base64内容 避免影响实时查看状态 - await page.setData({ - readDir: 'a/' + testDirName + '/中文路径/张三/name', - readFileRet: '', - writeFileContent: '' - }) - - // 检查目录列表数量 - await btnReadDirButton.tap() - await isDone() - fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual("[\"中文文件.mock\"]") - fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual("[\"中文文件.mock\"]") - - - // 更换文件内容 获取和对比 文件md5和sha1 - await page.setData({ - getFileInfoFile: 'a/' + testDirName + '/中文路径/张三/name/中文文件.mock', - getFileInfoAlgorithm: "md5", - }) - - const btnGetFileInfoButton = await page.$('#btn-get-file-info') - await btnGetFileInfoButton.tap() - await isDone() - - let getFileInfoSize = await getData('getFileInfoSize') - expect(getFileInfoSize).toEqual(208544) - let getFileInfoDigest = await getData('getFileInfoDigest') - expect(getFileInfoDigest).toEqual("486f75ea76625f8c103cac4bc9c49511") - - // 切换为 sha1 - await page.setData({ - getFileInfoAlgorithm: "sha1" - }) - - await btnGetFileInfoButton.tap() - await isDone() - - getFileInfoSize = await getData('getFileInfoSize') - expect(getFileInfoSize).toEqual(208544) - getFileInfoDigest = await getData('getFileInfoDigest') - expect(getFileInfoDigest).toEqual("1830169a16e7c860beff4a3b0975ba0b6f775f9e") - - // 测试不支持的摘要算法,期望返回错误 - await page.setData({ - getFileInfoAlgorithm: "sha256" - }) - - await btnGetFileInfoButton.tap() - await isDone() - - let lastFailError = await getData('lastFailError') - expect(lastFailError.errCode).toEqual(1300022) - let lastCompleteError = await getData('lastCompleteError') - expect(lastCompleteError.errCode).toEqual(1300022) - - - // rename 到一个没有提前创建过的目录,期望返回错误 - await page.setData({ - renameFromFile: "a/" + testDirName + "/中文路径/张三/name/中文文件.mock", - renameToFile: "a/没有提前创建的目录/3.txt" - }) - - const btnRenameFileButton = await page.$('#btn-rename-file') - await btnRenameFileButton.tap() - await isDone() - - lastFailError = await getData('lastFailError') - expect(lastFailError.errCode).toEqual(1300002) - lastCompleteError = await getData('lastCompleteError') - expect(lastCompleteError.errCode).toEqual(1300002) - - // 非递归创建一级目录。期望成功 - await page.setData({ - recursiveVal: false, - mkdirFile: 'a/提前创建的目录', - }) - - await btnMkdDirButton.tap() - await isDone() - - await page.setData({ - readDir: 'a', - }) - - await btnReadDirButton.tap() - await isDone() - - fileListComplete = await getData('fileListComplete') - fileListComplete.sort() - expect(JSON.stringify(fileListComplete)).toEqual("[\"b\",\"" + testDirName + "\",\"提前创建的目录\"]") - fileListSuccess = await getData('fileListSuccess') - fileListSuccess.sort() - expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\",\"" + testDirName + "\",\"提前创建的目录\"]") - - - await page.setData({ - copyFromFile: "a/" + testDirName + "/中文路径/张三/name/中文文件.mock", - copyToFile: "a/提前创建的目录/4.txt" - }) - - const btnCopyFileButton = await page.$('#btn-copy-file') - await btnCopyFileButton.tap() - await isDone() - - await page.setData({ - readDir: 'a/提前创建的目录', - }) - - await btnReadDirButton.tap() - await isDone() - - fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual("[\"4.txt\"]") - fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual("[\"4.txt\"]") - - await page.setData({ - unlinkFile: 'a/提前创建的目录/4.txt', - rmDirFile: 'a/提前创建的目录' - }) - await btnUnLinkFileButton.tap() - await isDone() - - await btnReadDirButton.tap() - await isDone() - - fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual("[]") - fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual("[]") - - }); - - - - it('CROSS DIR test', async () => { - /** - * 跨越用户目录和代码资源目录 - */ - let globalRootPath = await getData('globalRootPath') - await page.setData({ - recursiveVal: true, - logAble: false, - basePath: globalRootPath, - readDir: 'a', - rmDirFile: 'a', - mkdirFile: 'a', - accessFile: 'a/从代码目录拷贝的资源.png', - unlinkFile: 'a/从代码目录拷贝的资源.png' - }) - - - // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 - const btnClearFileButton = await page.$('#btn-clear-file') - await btnClearFileButton.tap() - await isDone() - - - // 清除文件夹 - const btnRmDirButton = await page.$('#btn-remove-dir') - await btnRmDirButton.tap() - await isDone() - - // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 - const btnMkdDirButton = await page.$('#btn-mkdir') - await btnMkdDirButton.tap() - await isDone() - - const btnReadDirButton = await page.$('#btn-read-dir') - await btnReadDirButton.tap() - await isDone() - - let fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual('[]') - let fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual('[]') - - - // 检查资源文件,此时不存在 - const btnAccessFileButton = await page.$('#btn-access-file') - await btnAccessFileButton.tap() - await isDone() - - let accessFileRet = await getData("accessFileRet") - expect(accessFileRet).toEqual('') - - - // 准备从资源目录拷贝png - await page.setData({ - basePath: "", - unlinkFile: 'static/test-image/logo.ico', - accessFile: 'static/test-image/logo.ico', - }) - // 检查资源文件,期望存在 - await btnAccessFileButton.tap() - await isDone() - - accessFileRet = await getData("accessFileRet") - expect(accessFileRet).toEqual('access:ok') - - // 尝试删除资源,期望失败 - const btnUnLinkFileButton = await page.$('#btn-unlink-file') - await btnUnLinkFileButton.tap() - await isDone() - - await btnAccessFileButton.tap() - await isDone() - - accessFileRet = await getData("accessFileRet") - expect(accessFileRet).toEqual('access:ok') - // 复制资源到 root目录 - await page.setData({ - copyToBasePath: globalRootPath, - copyFromFile: "static/test-image/logo.ico", - copyToFile: "a/从代码目录拷贝的资源.png" - }) - const btnCopyFileButton = await page.$('#btn-copy-file') - await btnCopyFileButton.tap() - await isDone() - - // 检查期望 root 目录中图片文件存在 - await page.setData({ - basePath: globalRootPath, - unlinkFile: 'a/从代码目录拷贝的资源.png', - accessFile: 'a/从代码目录拷贝的资源.png', - rmDirFile: 'a', - }) - await btnAccessFileButton.tap() - await isDone() - - accessFileRet = await getData("accessFileRet") - expect(accessFileRet).toEqual('access:ok') - - await btnUnLinkFileButton.tap() - await isDone() - - await btnAccessFileButton.tap() - await isDone() - - accessFileRet = await getData("accessFileRet") - expect(accessFileRet).toEqual('') - - // 从页面的按钮触发一次文件复制 - const btnCopyStaticFileButton = await page.$('#btn-copyStatic-file') - await btnCopyStaticFileButton.tap() - await isDone() - - await btnReadDirButton.tap() - await isDone() - - fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual("[\"mock.json\"]") - fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual("[\"mock.json\"]") - - // 从页面的按钮触发一次文件清空 - await btnClearFileButton.tap() - await isDone() - - await btnReadDirButton.tap() - await isDone() - - fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual("[]") - fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual("[]") - - }); - - - it('write and read', async () => { - /** - * 测试writefile readfile 各个参数是否符合预期 - */ - let globalTempPath = await getData('globalTempPath') - await page.setData({ - recursiveVal: true, - logAble: false, - basePath: globalTempPath, - readDir: 'd', - rmDirFile: 'd', - mkdirFile: 'd', - writeFileContent: "我爱北京天安门,天安门前太阳升", - writeFileEncoding: "utf-8", - readFileEncoding: "utf-8", - unlinkFile: 'd/write.bing', - writeFile: 'd/write.bing', - readFile: 'd/write.bing', - getFileInfoFile: 'd/write.bing', - getFileInfoAlgorithm: "sha1" - }) - - // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 - const btnUnLinkFileButton = await page.$('#btn-unlink-file') - await btnUnLinkFileButton.tap() - await isDone() - - // 清除文件夹 - const btnRmDirButton = await page.$('#btn-remove-dir') - await btnRmDirButton.tap() - await isDone() - - // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 - const btnMkdDirButton = await page.$('#btn-mkdir') - await btnMkdDirButton.tap() - await isDone() - - const btnReadDirButton = await page.$('#btn-read-dir') - await btnReadDirButton.tap() - await isDone() - - let fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual('[]') - let fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual('[]') - - // 先用utf-8 写入内容 - const btnWriteFileButton = await page.$('#btn-write-file') - await btnWriteFileButton.tap() - await isDone() - - const btnReadFileButton = await page.$('#btn-read-file') - await btnReadFileButton.tap() - await isDone() - let readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual("我爱北京天安门,天安门前太阳升") - - const btnGetFileInfoButton = await page.$('#btn-get-file-info') - await btnGetFileInfoButton.tap() - await isDone() - - let getFileInfoSize = await getData('getFileInfoSize') - expect(getFileInfoSize).toEqual(45) - let getFileInfoDigest = await getData('getFileInfoDigest') - expect(getFileInfoDigest).toEqual("2ae9c7672ff6c1e7c7e6a0bb4e74a6f06b39350b") - - // 尝试读取base64 信息 - await page.setData({ - readFileEncoding: "base64", - }) - - await btnReadFileButton.tap() - await isDone() - readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual("5oiR54ix5YyX5Lqs5aSp5a6J6Zeo77yM5aSp5a6J6Zeo5YmN5aSq6Ziz5Y2H") - // 测试ascii,需要特别测试 ascii 写入非法字符的情况,因为微信的常量字符编码和android原生有差异。 - - await page.setData({ - writeFileContent: "丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间", - writeFileEncoding: "ascii", - readFileEncoding: "base64", - }) - - await btnWriteFileButton.tap() - await isDone() - - await btnGetFileInfoButton.tap() - await isDone() - - getFileInfoSize = await getData('getFileInfoSize') - expect(getFileInfoSize).toEqual(78) - getFileInfoDigest = await getData('getFileInfoDigest') - expect(getFileInfoDigest).toEqual("4ac7a65055628818341c2ad86ddc4205d8503801") - - await btnReadFileButton.tap() - await isDone() - readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual( - "GbAtywwibr7mDCeJDFxkxwx8AFAxAg4I4PYJH4pS7lIpAg3lKQqrGQzKFS9VdAIRMljOUrsMyFA8fImHDNgEDdzSAnceBAVxDFU8KLr0" - ) - - // 尝试写入合法ascii - await page.setData({ - writeFileContent: "hello jack.hello marry.", - writeFileEncoding: "ascii", - readFileEncoding: "ascii", - }) - - await btnWriteFileButton.tap() - await isDone() - - await btnReadFileButton.tap() - await isDone() - readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual("hello jack.hello marry.") - - // 写入base64 获取 中文 - await page.setData({ - writeFileContent: "5LiZ6L6w5Lit56eL77yM5qyi6aWu6L6+5pem77yM5aSn6YaJ77yM5L2c5q2k56+H77yM5YW85oCA5a2Q55Sx44CC5piO5pyI5Yeg5pe25pyJ77yf5oqK6YWS6Zeu6Z2S5aSp44CC5LiN55+l5aSp5LiK5a6r6ZiZ77yM5LuK5aSV5piv5L2V5bm044CC5oiR5qyy5LmY6aOO5b2S5Y6777yM5Y+I5oGQ55C85qW8546J5a6H77yM6auY5aSE5LiN6IOc5a+S44CC6LW36Iie5byE5riF5b2x77yM5L2V5Ly85Zyo5Lq66Ze0", - writeFileEncoding: "base64", - readFileEncoding: "utf-8", - }) - - await btnWriteFileButton.tap() - await isDone() - - await btnReadFileButton.tap() - await isDone() - readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual( - "丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间") - - await page.setData({ - readFileEncoding: "base64", - }) - - await btnReadFileButton.tap() - await isDone() - readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual( - "5LiZ6L6w5Lit56eL77yM5qyi6aWu6L6+5pem77yM5aSn6YaJ77yM5L2c5q2k56+H77yM5YW85oCA5a2Q55Sx44CC5piO5pyI5Yeg5pe25pyJ77yf5oqK6YWS6Zeu6Z2S5aSp44CC5LiN55+l5aSp5LiK5a6r6ZiZ77yM5LuK5aSV5piv5L2V5bm044CC5oiR5qyy5LmY6aOO5b2S5Y6777yM5Y+I5oGQ55C85qW8546J5a6H77yM6auY5aSE5LiN6IOc5a+S44CC6LW36Iie5byE5riF5b2x77yM5L2V5Ly85Zyo5Lq66Ze0" - ) - - }); - - it('stat and asset test', async () => { - // 测试 USER_DATA_PATH //globalTempPath - let globalRootPath = await getData('globalRootPath') - - await page.setData({ - recursiveVal: true, - copyToBasePath: globalRootPath, - basePath: globalRootPath, - globalTempPath: globalRootPath, - rmDirFile: 'a', - mkdirFile: 'a', - unlinkFile: 'a/1.txt', - }) - - // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 - const btnUnLinkFileButton = await page.$('#btn-unlink-file') - await btnUnLinkFileButton.tap() - await isDone() - - await page.setData({ - unlinkFile: 'a/2.txt', - }) - await btnUnLinkFileButton.tap() - await isDone() - - await page.setData({ - unlinkFile: 'a/m/3.txt', - }) - await btnUnLinkFileButton.tap() - await isDone() - - // // 清除文件夹 - const btnRmDirButton = await page.$('#btn-remove-dir') - await btnRmDirButton.tap() - await isDone() - // // 重新创建测试目录 - const btnMkdDirButton = await page.$('#btn-mkdir') - await btnMkdDirButton.tap() - await isDone() - - const btnReadDirButton = await page.$('#btn-read-dir') - await btnReadDirButton.tap() - await isDone() - - - // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 - let fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual('[]') - let fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual('[]') - - // 写入一个文件 - await page.setData({ - writeFileContent: "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦", - writeFileEncoding: "utf-8", - writeFile: 'a/1.txt', - recursiveVal: false, - statFile: 'a/1.txt', - }) - - let lastFailError = await getData('lastFailError') - console.log(lastFailError) - - const btnWriteFileButton = await page.$('#btn-write-file') - await btnWriteFileButton.tap() - await isDone() - - let btnStatFileButton = await page.$('#btn-stat-file') - await btnStatFileButton.tap() - await isDone() - - // 读取单个文件信息 - let statsRet = await getData('statsRet') - expect(statsRet.length).toEqual(1) - expect(statsRet[0].path).toMatch(new RegExp('.*/a/1.txt$')) - expect(statsRet[0].stats.size).toEqual(69) - if (isAndroid()) { - // 写入一个文件 - await page.setData({ - statsRet: '' - }) - btnStatFileButton = await page.$('#btn-stat-file-sync') - await btnStatFileButton.tap() - await isDone() - - // 读取单个文件信息 - statsRet = await getData('statsRet') - expect(statsRet.length).toEqual(1) - expect(statsRet[0].path).toMatch(new RegExp('.*/a/1.txt$')) - expect(statsRet[0].stats.size).toEqual(69) - } - - /** - * 创建子目录和子目录文件,测试recursive参数 - */ - await page.setData({ - writeFileContent: "1234567890", - writeFileEncoding: "ascii", - writeFile: 'a/2.txt', - basePath: globalRootPath, - recursiveVal: false, - statFile: 'a', - mkdirFile: 'a/m', - }) - - - await btnWriteFileButton.tap() - await isDone() - - // 创建子目录 - await btnMkdDirButton.tap() - await isDone() - - // 复制一份文件到 /a/m/3.txt - await page.setData({ - // asset 只能正式版测试,这里只能模拟返回路径 - basePath: '', - copyFromFile: 'static/test-image/logo.ico', - copyToFile: 'a/m/3.txt', - }) - const btnCopyFileButton = await page.$('#btn-copy-file') - await btnCopyFileButton.tap() - await isDone() - - - await page.setData({ - basePath: globalRootPath, - recursiveVal: true, - statFile: 'a', - }) - - await btnStatFileButton.tap() - await isDone() - - // 读取全部文件信息 - statsRet = await getData('statsRet') - - statsRet.sort(function(a, b) { - if (a.path > b.path) { - return 1 - } else if (a.path < b.path) { - return -1 - } - return 0 - }) - console.log(statsRet) - expect(statsRet.length).toEqual(5) - expect(statsRet[0].path).toMatch(new RegExp('.*/a$')) - // expect(statsRet[0].stats.size).toEqual(0) - - expect(statsRet[2].path).toMatch(new RegExp('.*/a/2.txt$')) - expect(statsRet[2].stats.size).toEqual(10) - - expect(statsRet[4].path).toMatch(new RegExp('.*/a/m/3.txt$')) - expect(statsRet[4].stats.size).toEqual(156406) - - - // 清理文件,避免影响其他测试用例 - await page.setData({ - unlinkFile: 'a/1.txt', - }) - await btnUnLinkFileButton.tap() - await isDone() - - await page.setData({ - unlinkFile: 'a/2.txt', - }) - await btnUnLinkFileButton.tap() - await isDone() - - await page.setData({ - unlinkFile: 'a/m/3.txt', - rmDirFile: 'a', - readDir: 'a', - recursiveVal: true, - }) - await btnUnLinkFileButton.tap() - await isDone() - - await btnRmDirButton.tap() - await isDone() - - await btnReadDirButton.tap() - await isDone() - - // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 - fileListComplete = await getData('fileListComplete') - expect(JSON.stringify(fileListComplete)).toEqual('[]') - fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual('[]') - - }); - it('appendFileTest', async () => { - if (!isAndroid()) { - return - } - - - let basePath = await getData('basePath') - - await page.setData({ - basePath: mBasePath, - recursiveVal: true, - logAble: false, - rmDirFile: 'appendfile', - mkdirFile: 'appendfile', - writeFileContent: "我爱北京天安门,天安门前太阳升", - appendFileContent: "再说一遍", - writeFileEncoding: "utf-8", - readFileEncoding: "utf-8", - readFile: 'appendfile/appendfile.txt', - unlinkFile: 'appendfile/appendfile.txt', - writeFile: 'appendfile/appendfile.txt', - }) - - // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 - const btnUnLinkFileButton = await page.$('#btn-unlink-file') - await btnUnLinkFileButton.tap() - await isDone() - - // 清除文件夹 - const btnRmDirButton = await page.$('#btn-remove-dir') - await btnRmDirButton.tap() - await isDone() - - // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 - const btnMkdDirButton = await page.$('#btn-mkdir') - await btnMkdDirButton.tap() - await isDone() - - // 先用utf-8 写入内容 - const btnWriteFileButton = await page.$('#btn-write-file') - - await btnWriteFileButton.tap() - await isDone() - - - //追加内容 - const btnAppendFileButton = await page.$('#btn-append-file') - await btnAppendFileButton.tap() - await isDone() - - const btnReadFileButton = await page.$('#btn-read-file') - await btnReadFileButton.tap() - await isDone() - let readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual("我爱北京天安门,天安门前太阳升再说一遍") - }); - //nlinkSyncTest mkdirSyncTest appendFileTest writeFileSyncTest readFileSyncTest rmdirSyncTest readDirSyncTest accessFileSyncTest - //renameFileSync copyFileSyncTest appendFileSyncTest truncateFileTest truncateFileSyncTest - it('sync test', - async () => { - if (!isAndroid()) { - return - } - - - await page.setData({ - basePath: mBasePath, - recursiveVal: false, - logAble: false, - rmDirFile: 'sync', - mkdirFile: 'sync', - writeFileContent: "我爱北京天安门,天安门前太阳升", - appendFileContent: "再说一遍", - writeFileEncoding: "utf-8", - readFileEncoding: "utf-8", - readDir: 'sync', - rmDirFile: 'sync', - unlinkFile: 'sync/sync.txt', - readFile: 'sync/sync.txt', - writeFile: 'sync/sync.txt', - accessFile: 'sync/sync.txt', - renameToFile: 'sync/sync.txt', - renameFromFile: 'sync/sync.txt', - }) - await clearDir('sync') - // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 目录 - const btnMkdDirButton = await page.$('#btn-mkdir-sync') - await btnMkdDirButton.tap() - await isDone() - - const btnReadDirButton = await page.$('#btn-read-dir-sync') - await btnReadDirButton.tap() - await isDone() - const fileListSuccess = await getData('fileListSuccess') - expect(JSON.stringify(fileListSuccess)).toEqual('[]') - - // 先用utf-8 写入内容 - const btnWriteFileButton = await page.$('#btn-write-file-sync') - await btnWriteFileButton.tap() - await isDone() - - let btnAccessFileButton = await page.$('#btn-access-file-sync') - await btnAccessFileButton.tap() - await isDone() - let accessFileRet = await getData("accessFileRet") - expect(accessFileRet).toEqual('access:ok') - - //重新命名文件 - const btnRenameFileButton = await page.$('#btn-rename-file-sync') - await btnRenameFileButton.tap() - await isDone() - let renameFileRet = await getData("renameFileRet") - expect(renameFileRet).toEqual("rename:ok") - - - //追加内容 - let btnAppendFileButton = await page.$('#btn-append-file') - await btnAppendFileButton.tap() - await isDone() - - btnAppendFileButton = await page.$('#btn-append-file-sync') - await btnAppendFileButton.tap() - - - let btnReadFileButton = await page.$('#btn-read-file-sync') - await btnReadFileButton.tap() - await isDone() - let readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual("我爱北京天安门,天安门前太阳升再说一遍再说一遍") - - //truncateFileTest - let btnTruncateFile = await page.$('#btn-truncate-file') - await btnTruncateFile.tap() - await isDone() - btnReadFileButton = await page.$('#btn-read-file-sync') - await btnReadFileButton.tap() - await isDone() - readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual("我爱北京天安门") - - btnTruncateFile = await page.$('#btn-truncate-file-sync') - await btnTruncateFile.tap() - await isDone() - btnReadFileButton = await page.$('#btn-read-file-sync') - await btnReadFileButton.tap() - await isDone() - readFileRet = await getData('readFileRet') - expect(readFileRet).toEqual("我爱北京") - - - // 测试 copyfile - await page.setData({ - basePath: mBasePath, - copyToBasePath: mBasePath, - copyFromFile: "sync/sync.txt", - copyToFile: "sync/syncto.txt", - accessFile: "sync/syncto.txt" - }) - const btnCopyFileButton = await page.$('#btn-copy-file-sync') - await btnCopyFileButton.tap() - await isDone() - btnAccessFileButton = await page.$('#btn-access-file-sync') - await btnAccessFileButton.tap() - await isDone() - accessFileRet = await getData("accessFileRet") - expect(accessFileRet).toEqual('access:ok') - - await clearDir('sync') - }); - - async function createFile() { - // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 目录 - const btnMkdDirButton = await page.$('#btn-mkdir-sync') - await btnMkdDirButton.tap() - await isDone() - - // 先用utf-8 写入内容 - const btnWriteFileButton = await page.$('#btn-write-file-sync') - await btnWriteFileButton.tap() - await isDone() - } - - async function clearDir(dir) { - // 最后需要清楚所有文件避免测试失败 - await page.setData({ - rmDirFile: dir, - }) - const btnUnLinkFileButton = await page.$('#btn-clear-file') - await btnUnLinkFileButton.tap() - await isDone() - - const btnClear = await page.$('#btn-remove-dir') - await btnClear.tap() - await isDone() - } - - function isAndroid() { - if (process.env.uniTestPlatformInfo.indexOf('web') > -1 || process.env.UNI_AUTOMATOR_APP_WEBVIEW === 'true') { - expect(1).toBe(1) - return false - } - if (process.env.uniTestPlatformInfo.toLocaleLowerCase().startsWith('ios')) { - expect(1).toBe(1) - return false - } - return true - } - - it('getSavedFileListTest', - async () => { - if (!isAndroid()) { - return - } - // await page.setData({ - // logAble: false, - // basePath: mBasePath - // }) - // console.log('getSavedFileListTest', 'start') - // await clearDir('') - // console.log('getSavedFileListTest', 'end') - await page.setData({ - logAble: false, - basePath: mGlobalTempPath, - temFile: 'save3/2.txt', - mkdirFile: 'save3', - writeFile: 'save3/2.txt', - accessFile: '2.txt' - }) - await createFile() - await page.setData({ - basePath: mBasePath, - writeFile: 'save/2.txt', - }) - btnSaveFile = await page.$('#btn-save-file-sync') - await btnSaveFile.tap() - await isDone() - let btnSavedFileList = await page.$('#btn-getsaved-filelist') - await btnSavedFileList.tap() - await isDone() - let getSavedFileListRet = await getData("getSavedFileListRet") - console.log('getSavedFileListTest->' + getSavedFileListRet) - expect(getSavedFileListRet).toEqual('getSavedFileList:ok') - }); - - it('removeSavedFileTest', - async () => { - if (!isAndroid()) { - return - } - await page.setData({ - logAble: false, - basePath: mBasePath - }) - await clearDir('save4') - await page.setData({ - logAble: false, - basePath: mGlobalTempPath, - temFile: 'save4/saveSync.txt', - mkdirFile: 'save4', - writeFile: 'save4/saveSync.txt', - accessFile: 'saveSync.txt' - }) - await createFile() - let btnRemoveSavedFileRet = await page.$('#btn-remove-saved-file') - await btnRemoveSavedFileRet.tap() - await isDone() - let removeSavedFileRet = await getData("removeSavedFileRet") - expect(removeSavedFileRet).toEqual('removeSavedFile:ok') - - }); - - //openFiletest openFileSynctest closeTest closeTestSync writeTest writeSyncTest - it('openFiletest', async () => { - if (!isAndroid()) { - return - } - - await page.setData({ - basePath: mBasePath, - logAble: false, - mkdirFile: 'fd', - writeFile: 'fd/1.txt', - readFile: 'fd/1.txt' - }) - await clearDir('fd') - await createFile() - console.log('openFiletest', '2') - //openFiletest - let btnOpenFile = await page.$('#btn-open-file') - await btnOpenFile.tap() - await isDone() - let fd = await getData("fd") - expect(fd).not.toBe(''); - await page.setData({ - fd: '', - }) - console.log('openFiletest', '3') - //openFileSynctest - btnOpenFile = await page.$('#btn-open-file-sync') - await btnOpenFile.tap() - await isDone() - fd = await getData("fd") - expect(fd).not.toBe(''); - console.log('openFiletest', '4') - }); - // closeTest closeTestSync - it('closeTest', async () => { - if (!isAndroid()) { - return - } - - - - await page.setData({ - basePath: mBasePath, - logAble: false, - mkdirFile: 'fd', - writeFile: 'fd/1.txt', - readFile: 'fd/1.txt' - }) - await clearDir('fd') - await createFile() - //closeTest - let btnCloseFile = await page.$('#btn-close-file') - await btnCloseFile.tap() - await isDone() - let closeFileRet = await getData("closeFileRet") - expect(closeFileRet).toEqual('close:ok') - await page.setData({ - closeFileRet: '', - }) - //closeTestSync - btnCloseFile = await page.$('#btn-close-file-sync') - await btnCloseFile.tap() - await isDone() - closeFileRet = await getData("closeFileRet") - expect(closeFileRet).toEqual('close:ok') - - }); - //writeTest writeSyncTest - it('writeTest', async () => { - if (!isAndroid()) { - return - } - console.log('writeTest', 'start') - - await page.setData({ - basePath: mBasePath, - logAble: false, - mkdirFile: 'fd', - writeFile: 'fd/1.txt', - readFile: 'fd/1.txt', - writeData: '我是一只小小鸟' - }) - await clearDir('fd') - await createFile() - console.log('writeTest', '1') - let btnWrite = await page.$('#btn-write') - await btnWrite.tap() - await isDone() - let bytesWritten = await getData("bytesWritten") - let lastFailError = await getData("lastFailError") - if(bytesWritten != 7){ - let writeData = await getData("writeData") - console.log('writeTest',lastFailError.errCode,lastFailError.errMsg,bytesWritten,writeData) - } - - expect(bytesWritten).toEqual(7) - console.log('writeTest', '2') - //writeSyncTest - await page.setData({ - writeFile: 'fd/1.txt', - readFile: 'fd/1.txt', - writeData: '我是' - }) - - btnWrite = await page.$('#btn-write-sync') - await btnWrite.tap() - await isDone() - bytesWritten = await getData("bytesWritten") - expect(bytesWritten).toEqual(2) - console.log('writeTest', '3') - //fstatTest - let btnFstat = await page.$('#btn-fstat-file') - await btnFstat.tap() - await isDone() - let fstat = await getData("fstat") - expect(fstat.size > 0).toBe(true) - console.log('writeTest', '4') - - //fstatSyncTest - btnFstat = await page.$('#btn-fstat-file-sync') - await btnFstat.tap() - await isDone() - fstat = await getData("fstat") - expect(fstat.size > 0).toBe(true) - console.log('writeTest', '5') - - //ftruncateFileTest - let btnFTruncateFile = await page.$('#btn-ftruncate-file') - await btnFTruncateFile.tap() - await isDone() - let ftruncateRet = await getData("ftruncateRet") - expect(fstat).not.toEqual('ftruncate:ok') - await page.setData({ - ftruncate: '', - }) - console.log('writeTest', '6') - - //ftruncateFileSyncTest - btnFTruncateFile = await page.$('#btn-ftruncate-file-sync') - await btnFTruncateFile.tap() - await isDone() - ftruncateRet = await getData("ftruncateRet") - expect(fstat).not.toEqual('ftruncate:ok') - console.log('writeTest', '7') - }); - //writeTest writeSyncTest - it('ftruncateFileTest', async () => { - if (!isAndroid()) { - return - } - console.log('ftruncateFileTest', 'start') - - await page.setData({ - basePath: mBasePath, - logAble: false, - mkdirFile: 'fd', - writeFile: 'fd/1.txt', - readFile: 'fd/1.txt', - writeData: '我是一只小小鸟我是' - }) - await clearDir('fd') - await createFile() - console.log('ftruncateFileTest', '1') - btnWrite = await page.$('#btn-write-sync') - await btnWrite.tap() - await isDone() - bytesWritten = await getData("bytesWritten") - expect(bytesWritten).toEqual(9) - console.log('ftruncateFileTest', '3') - //ftruncateFileTest - let btnFTruncateFile = await page.$('#btn-ftruncate-file') - await btnFTruncateFile.tap() - await isDone() - let ftruncateRet = await getData("ftruncateRet") - expect(ftruncateRet).toEqual('ftruncate:ok') - await page.setData({ - ftruncate: '', - }) - console.log('ftruncateFileTest', '6') - - //ftruncateFileSyncTest - btnFTruncateFile = await page.$('#btn-ftruncate-file-sync') - await btnFTruncateFile.tap() - await isDone() - ftruncateRet = await getData("ftruncateRet") - expect(ftruncateRet).toEqual('ftruncate:ok') - console.log('ftruncateFileTest', '7') - }); -}); + if (process.env.uniTestPlatformInfo.indexOf('web') > -1 || process.env.UNI_AUTOMATOR_APP_WEBVIEW == + 'true') { + it('dummyTest', () => { + expect(1).toBe(1) + }) + return + } + let page; + let mBasePath; + let mGlobalTempPath; + let mGlobalRootPath + + + function getData(key = '') { + return new Promise(async (resolve, reject) => { + const data = await page.data() + resolve(key ? data[key] : data) + }) + } + + + beforeAll(async () => { + page = await program.reLaunch(PAGE_PATH) + await page.waitFor(600); + }); + + async function isDone() { + let isDone = await page.waitFor(async () => { + return await page.data('done') + }) + await page.setData({ + done: false + }) + return isDone + } + + it('USER_DATA_PATH test', async () => { + // 测试 USER_DATA_PATH + let globalUserDataPath = await getData('globalUserDataPath') + mBasePath = await getData('basePath') + mGlobalRootPath = await getData('globalRootPath') + mGlobalTempPath = await getData('globalTempPath') + + await page.setData({ + logAble: false, + recursiveVal: true, + copyToBasePath: globalUserDataPath, + basePath: globalUserDataPath, + rmDirFile: 'a', + readDir: 'a', + writeFile: 'a/1.txt', + readFile: 'a/1.txt', + unlinkFile: 'a/1.txt', + writeFileContent: '锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦' + }) + + // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 + const btnUnLinkFileButton = await page.$('#btn-clear-file') + await btnUnLinkFileButton.tap() + await isDone() + + + // 清除文件夹 + const btnRmDirButton = await page.$('#btn-remove-dir') + await btnRmDirButton.tap() + await isDone() + // 重新创建测试目录 + const btnMkdDirButton = await page.$('#btn-mkdir') + await btnMkdDirButton.tap() + await isDone() + + const btnReadDirButton = await page.$('#btn-read-dir') + await btnReadDirButton.tap() + await isDone() + + + // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 + let fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual('[]') + let fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual('[]') + + // 先测试 recursive = false 文件夹创建,期望失败 + await page.setData({ + recursiveVal: false, + mkdirFile: 'a/b/c' + }) + + + await btnMkdDirButton.tap() + await isDone() + + + let lastFailError = await getData('lastFailError') + expect(lastFailError.errCode).toEqual(1300002) + expect(lastFailError.errMsg).toEqual('no such file or directory') + let lastCompleteError = await getData('lastCompleteError') + expect(lastCompleteError.errCode).toEqual(1300002) + expect(lastCompleteError.errMsg).toEqual('no such file or directory') + + + // 测试 recursive = true 期望文件夹创建成功 + await page.setData({ + recursiveVal: true + }) + await btnMkdDirButton.tap() + await isDone() + + await btnReadDirButton.tap() + await isDone() + + // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 + fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual("[\"b\"]") + fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\"]") + + // 测试写入文件 + const btnWriteFileButton = await page.$('#btn-write-file') + await btnWriteFileButton.tap() + await isDone() + // 检查目录列表数量 + await btnReadDirButton.tap() + await isDone() + fileListComplete = await getData('fileListComplete') + fileListComplete.sort() + expect(JSON.stringify(fileListComplete)).toEqual("[\"1.txt\",\"b\"]") + fileListSuccess = await getData('fileListSuccess') + fileListSuccess.sort() + expect(JSON.stringify(fileListSuccess)).toEqual("[\"1.txt\",\"b\"]") + // 获取和对比 文件内容 + const btnReadFileButton = await page.$('#btn-read-file') + await btnReadFileButton.tap() + await isDone() + let readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual("锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦") + + // 更换文件内容 获取和对比 文件md5和sha1 + await page.setData({ + writeFileContent: "If you were a teardrop;In my eye,For fear of losing you,I would never cry.And if the golden sun,Should cease to shine its light,Just one smile from you,Would make my whole world bright.", + getFileInfoAlgorithm: "md5" + }) + await btnWriteFileButton.tap() + await isDone() + + await btnReadFileButton.tap() + await isDone() + readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual( + "If you were a teardrop;In my eye,For fear of losing you,I would never cry.And if the golden sun,Should cease to shine its light,Just one smile from you,Would make my whole world bright." + ) + + const btnGetFileInfoButton = await page.$('#btn-get-file-info') + await btnGetFileInfoButton.tap() + await isDone() + + let getFileInfoSize = await getData('getFileInfoSize') + expect(getFileInfoSize).toEqual(185) + let getFileInfoDigest = await getData('getFileInfoDigest') + expect(getFileInfoDigest).toEqual("29ddd02ed3c38ccebb98884eda082cb1") + // 切换为 sha1 + await page.setData({ + getFileInfoAlgorithm: "sha1" + }) + + await btnGetFileInfoButton.tap() + await isDone() + + getFileInfoSize = await getData('getFileInfoSize') + expect(getFileInfoSize).toEqual(185) + getFileInfoDigest = await getData('getFileInfoDigest') + expect(getFileInfoDigest).toEqual("ebef4e75783e0db499fc260d120e695005bead8a") + + // 测试 copyfile + await page.setData({ + + copyFromFile: "a/1.txt", + copyToFile: "a/2.txt" + }) + const btnCopyFileButton = await page.$('#btn-copy-file') + await btnCopyFileButton.tap() + await isDone() + + + await btnReadDirButton.tap() + await isDone() + + // 1.txt 2.txt 两个文件都存在 + fileListComplete = await getData('fileListComplete') + fileListComplete.sort() + expect(JSON.stringify(fileListComplete)).toEqual("[\"1.txt\",\"2.txt\",\"b\"]") + fileListSuccess = await getData('fileListSuccess') + fileListSuccess.sort() + expect(JSON.stringify(fileListSuccess)).toEqual("[\"1.txt\",\"2.txt\",\"b\"]") + + // 测试 rename + await page.setData({ + renameFromFile: "a/2.txt", + renameToFile: "a/3.txt" + }) + + const btnRenameFileButton = await page.$('#btn-rename-file') + await btnRenameFileButton.tap() + await isDone() + + await btnReadDirButton.tap() + await isDone() + + // 1.txt 3.txt 两个文件都存在 + fileListComplete = await getData('fileListComplete') + fileListComplete.sort() + expect(JSON.stringify(fileListComplete)).toEqual("[\"1.txt\",\"3.txt\",\"b\"]") + fileListSuccess = await getData('fileListSuccess') + fileListSuccess.sort() + expect(JSON.stringify(fileListSuccess)).toEqual("[\"1.txt\",\"3.txt\",\"b\"]") + }); + + it('TEMP_PATH test', async () => { + // 测试 TEMP_PATH + let globalTempPath = await getData('globalTempPath') + + let version = process.env.uniTestPlatformInfo + version = parseInt(version.split(" ")[1]) + let testDirName = "我们经历了一场兵慌马乱的战争.1@2#3$4%5^6&7*8(9)0+-qwertyuiopasdfghjklzxcvbnm;," + if (version < 6) { + // android 6 以下文件名不能包含特殊字符 + testDirName = "我们经历了一场兵慌马乱的战争" + } + + await page.setData({ + logAble: false, + recursiveVal: true, + basePath: globalTempPath, + copyToBasePath: globalTempPath, + rmDirFile: 'a', + mkdirFile: 'a', + unlinkFile: 'a/' + testDirName + '/中文路径/张三/name/中文文件.mock' + }) + + + // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 + const btnUnLinkFileButton = await page.$('#btn-unlink-file') + await btnUnLinkFileButton.tap() + await isDone() + + + // 清除文件夹 + const btnRmDirButton = await page.$('#btn-remove-dir') + await btnRmDirButton.tap() + await isDone() + + // 重新创建测试目录 + const btnMkdDirButton = await page.$('#btn-mkdir') + await btnMkdDirButton.tap() + await isDone() + + const btnReadDirButton = await page.$('#btn-read-dir') + await btnReadDirButton.tap() + await isDone() + + + // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 + let fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual("[]") + let fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual("[]") + + // 测试 创建多层级文件目录 + await page.setData({ + recursiveVal: true, + mkdirFile: 'a/b/c/d/e/f/g/h/i/g/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/中文路径/张三/test', + }) + + await btnMkdDirButton.tap() + await isDone() + + await btnReadDirButton.tap() + await isDone() + + fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual("[\"b\"]") + fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\"]") + + // 测试 创建包含中文特殊符号的目录 + await page.setData({ + recursiveVal: true, + mkdirFile: 'a/' + testDirName + '/中文路径/张三/name', + }) + await btnMkdDirButton.tap() + await isDone() + + await btnReadDirButton.tap() + await isDone() + + // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 + fileListComplete = await getData('fileListComplete') + fileListComplete.sort() + expect(JSON.stringify(fileListComplete)).toEqual("[\"b\",\"" + testDirName + "\"]") + fileListSuccess = await getData('fileListSuccess') + fileListSuccess.sort() + expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\",\"" + testDirName + "\"]") + + /** + * 从资源文件中读取图片为base64,测试写入较大文件场景 + * 'static/test-image/logo.ico' 注意,依赖这个资源文件,不能删除 + */ + await page.setData({ + basePath: "", + readFile: 'static/test-image/logo.ico', + readFileEncoding: 'base64' + }) + + + // 获取和对比 文件内容 + const btnReadFileButton = await page.$('#btn-read-file') + await btnReadFileButton.tap() + await isDone() + let readFileRet = await getData('readFileRet') + expect(readFileRet.length).toEqual(208544) + let endStr = readFileRet.substring(readFileRet.length - 10) + expect(endStr).toEqual("///////w==") + + await page.setData({ + basePath: globalTempPath, + writeFile: 'a/' + testDirName + '/中文路径/张三/name/中文文件.mock', + writeFileContent: readFileRet + }) + + + const btnWriteFileButton = await page.$('#btn-write-file') + await btnWriteFileButton.tap() + await isDone() + + // 获取文件列表,判断是否写入成功,同时置空base64内容 避免影响实时查看状态 + await page.setData({ + readDir: 'a/' + testDirName + '/中文路径/张三/name', + readFileRet: '', + writeFileContent: '' + }) + + // 检查目录列表数量 + await btnReadDirButton.tap() + await isDone() + fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual("[\"中文文件.mock\"]") + fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual("[\"中文文件.mock\"]") + + + // 更换文件内容 获取和对比 文件md5和sha1 + await page.setData({ + getFileInfoFile: 'a/' + testDirName + '/中文路径/张三/name/中文文件.mock', + getFileInfoAlgorithm: "md5", + }) + + const btnGetFileInfoButton = await page.$('#btn-get-file-info') + await btnGetFileInfoButton.tap() + await isDone() + + let getFileInfoSize = await getData('getFileInfoSize') + expect(getFileInfoSize).toEqual(208544) + let getFileInfoDigest = await getData('getFileInfoDigest') + expect(getFileInfoDigest).toEqual("486f75ea76625f8c103cac4bc9c49511") + + // 切换为 sha1 + await page.setData({ + getFileInfoAlgorithm: "sha1" + }) + + await btnGetFileInfoButton.tap() + await isDone() + + getFileInfoSize = await getData('getFileInfoSize') + expect(getFileInfoSize).toEqual(208544) + getFileInfoDigest = await getData('getFileInfoDigest') + expect(getFileInfoDigest).toEqual("1830169a16e7c860beff4a3b0975ba0b6f775f9e") + + // 测试不支持的摘要算法,期望返回错误 + await page.setData({ + getFileInfoAlgorithm: "sha256" + }) + + await btnGetFileInfoButton.tap() + await isDone() + + let lastFailError = await getData('lastFailError') + expect(lastFailError.errCode).toEqual(1300022) + let lastCompleteError = await getData('lastCompleteError') + expect(lastCompleteError.errCode).toEqual(1300022) + + + // rename 到一个没有提前创建过的目录,期望返回错误 + await page.setData({ + renameFromFile: "a/" + testDirName + "/中文路径/张三/name/中文文件.mock", + renameToFile: "a/没有提前创建的目录/3.txt" + }) + + const btnRenameFileButton = await page.$('#btn-rename-file') + await btnRenameFileButton.tap() + await isDone() + + lastFailError = await getData('lastFailError') + expect(lastFailError.errCode).toEqual(1300002) + lastCompleteError = await getData('lastCompleteError') + expect(lastCompleteError.errCode).toEqual(1300002) + + // 非递归创建一级目录。期望成功 + await page.setData({ + recursiveVal: false, + mkdirFile: 'a/提前创建的目录', + }) + + await btnMkdDirButton.tap() + await isDone() + + await page.setData({ + readDir: 'a', + }) + + await btnReadDirButton.tap() + await isDone() + + fileListComplete = await getData('fileListComplete') + fileListComplete.sort() + expect(JSON.stringify(fileListComplete)).toEqual("[\"b\",\"" + testDirName + + "\",\"提前创建的目录\"]") + fileListSuccess = await getData('fileListSuccess') + fileListSuccess.sort() + expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\",\"" + testDirName + + "\",\"提前创建的目录\"]") + + + await page.setData({ + copyFromFile: "a/" + testDirName + "/中文路径/张三/name/中文文件.mock", + copyToFile: "a/提前创建的目录/4.txt" + }) + + const btnCopyFileButton = await page.$('#btn-copy-file') + await btnCopyFileButton.tap() + await isDone() + + await page.setData({ + readDir: 'a/提前创建的目录', + }) + + await btnReadDirButton.tap() + await isDone() + + fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual("[\"4.txt\"]") + fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual("[\"4.txt\"]") + + await page.setData({ + unlinkFile: 'a/提前创建的目录/4.txt', + rmDirFile: 'a/提前创建的目录' + }) + await btnUnLinkFileButton.tap() + await isDone() + + await btnReadDirButton.tap() + await isDone() + + fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual("[]") + fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual("[]") + + }); + + + + it('CROSS DIR test', async () => { + /** + * 跨越用户目录和代码资源目录 + */ + let globalRootPath = await getData('globalRootPath') + await page.setData({ + recursiveVal: true, + logAble: false, + basePath: globalRootPath, + readDir: 'a', + rmDirFile: 'a', + mkdirFile: 'a', + accessFile: 'a/从代码目录拷贝的资源.png', + unlinkFile: 'a/从代码目录拷贝的资源.png' + }) + + + // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 + const btnClearFileButton = await page.$('#btn-clear-file') + await btnClearFileButton.tap() + await isDone() + + + // 清除文件夹 + const btnRmDirButton = await page.$('#btn-remove-dir') + await btnRmDirButton.tap() + await isDone() + + // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 + const btnMkdDirButton = await page.$('#btn-mkdir') + await btnMkdDirButton.tap() + await isDone() + + const btnReadDirButton = await page.$('#btn-read-dir') + await btnReadDirButton.tap() + await isDone() + + let fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual('[]') + let fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual('[]') + + + // 检查资源文件,此时不存在 + const btnAccessFileButton = await page.$('#btn-access-file') + await btnAccessFileButton.tap() + await isDone() + + let accessFileRet = await getData("accessFileRet") + expect(accessFileRet).toEqual('') + + + // 准备从资源目录拷贝png + await page.setData({ + basePath: "", + unlinkFile: 'static/test-image/logo.ico', + accessFile: 'static/test-image/logo.ico', + }) + // 检查资源文件,期望存在 + await btnAccessFileButton.tap() + await isDone() + + accessFileRet = await getData("accessFileRet") + expect(accessFileRet).toEqual('access:ok') + + // 尝试删除资源,期望失败 + const btnUnLinkFileButton = await page.$('#btn-unlink-file') + await btnUnLinkFileButton.tap() + await isDone() + + await btnAccessFileButton.tap() + await isDone() + + accessFileRet = await getData("accessFileRet") + expect(accessFileRet).toEqual('access:ok') + // 复制资源到 root目录 + await page.setData({ + copyToBasePath: globalRootPath, + copyFromFile: "static/test-image/logo.ico", + copyToFile: "a/从代码目录拷贝的资源.png" + }) + const btnCopyFileButton = await page.$('#btn-copy-file') + await btnCopyFileButton.tap() + await isDone() + + // 检查期望 root 目录中图片文件存在 + await page.setData({ + basePath: globalRootPath, + unlinkFile: 'a/从代码目录拷贝的资源.png', + accessFile: 'a/从代码目录拷贝的资源.png', + rmDirFile: 'a', + }) + await btnAccessFileButton.tap() + await isDone() + + accessFileRet = await getData("accessFileRet") + expect(accessFileRet).toEqual('access:ok') + + await btnUnLinkFileButton.tap() + await isDone() + + await btnAccessFileButton.tap() + await isDone() + + accessFileRet = await getData("accessFileRet") + expect(accessFileRet).toEqual('') + + // 从页面的按钮触发一次文件复制 + const btnCopyStaticFileButton = await page.$('#btn-copyStatic-file') + await btnCopyStaticFileButton.tap() + await isDone() + + await btnReadDirButton.tap() + await isDone() + + fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual("[\"mock.json\"]") + fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual("[\"mock.json\"]") + + // 从页面的按钮触发一次文件清空 + await btnClearFileButton.tap() + await isDone() + + await btnReadDirButton.tap() + await isDone() + + fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual("[]") + fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual("[]") + + }); + + + it('write and read', async () => { + /** + * 测试writefile readfile 各个参数是否符合预期 + */ + let globalTempPath = await getData('globalTempPath') + await page.setData({ + recursiveVal: true, + logAble: false, + basePath: globalTempPath, + readDir: 'd', + rmDirFile: 'd', + mkdirFile: 'd', + writeFileContent: "我爱北京天安门,天安门前太阳升", + writeFileEncoding: "utf-8", + readFileEncoding: "utf-8", + unlinkFile: 'd/write.bing', + writeFile: 'd/write.bing', + readFile: 'd/write.bing', + getFileInfoFile: 'd/write.bing', + getFileInfoAlgorithm: "sha1" + }) + + // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 + const btnUnLinkFileButton = await page.$('#btn-unlink-file') + await btnUnLinkFileButton.tap() + await isDone() + + // 清除文件夹 + const btnRmDirButton = await page.$('#btn-remove-dir') + await btnRmDirButton.tap() + await isDone() + + // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 + const btnMkdDirButton = await page.$('#btn-mkdir') + await btnMkdDirButton.tap() + await isDone() + + const btnReadDirButton = await page.$('#btn-read-dir') + await btnReadDirButton.tap() + await isDone() + + let fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual('[]') + let fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual('[]') + + // 先用utf-8 写入内容 + const btnWriteFileButton = await page.$('#btn-write-file') + await btnWriteFileButton.tap() + await isDone() + + const btnReadFileButton = await page.$('#btn-read-file') + await btnReadFileButton.tap() + await isDone() + let readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual("我爱北京天安门,天安门前太阳升") + + const btnGetFileInfoButton = await page.$('#btn-get-file-info') + await btnGetFileInfoButton.tap() + await isDone() + + let getFileInfoSize = await getData('getFileInfoSize') + expect(getFileInfoSize).toEqual(45) + let getFileInfoDigest = await getData('getFileInfoDigest') + expect(getFileInfoDigest).toEqual("2ae9c7672ff6c1e7c7e6a0bb4e74a6f06b39350b") + + // 尝试读取base64 信息 + await page.setData({ + readFileEncoding: "base64", + }) + + await btnReadFileButton.tap() + await isDone() + readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual("5oiR54ix5YyX5Lqs5aSp5a6J6Zeo77yM5aSp5a6J6Zeo5YmN5aSq6Ziz5Y2H") + // 测试ascii,需要特别测试 ascii 写入非法字符的情况,因为微信的常量字符编码和android原生有差异。 + + await page.setData({ + writeFileContent: "丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间", + writeFileEncoding: "ascii", + readFileEncoding: "base64", + }) + + await btnWriteFileButton.tap() + await isDone() + + await btnGetFileInfoButton.tap() + await isDone() + + getFileInfoSize = await getData('getFileInfoSize') + expect(getFileInfoSize).toEqual(78) + getFileInfoDigest = await getData('getFileInfoDigest') + expect(getFileInfoDigest).toEqual("4ac7a65055628818341c2ad86ddc4205d8503801") + + await btnReadFileButton.tap() + await isDone() + readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual( + "GbAtywwibr7mDCeJDFxkxwx8AFAxAg4I4PYJH4pS7lIpAg3lKQqrGQzKFS9VdAIRMljOUrsMyFA8fImHDNgEDdzSAnceBAVxDFU8KLr0" + ) + + // 尝试写入合法ascii + await page.setData({ + writeFileContent: "hello jack.hello marry.", + writeFileEncoding: "ascii", + readFileEncoding: "ascii", + }) + + await btnWriteFileButton.tap() + await isDone() + + await btnReadFileButton.tap() + await isDone() + readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual("hello jack.hello marry.") + + // 写入base64 获取 中文 + await page.setData({ + writeFileContent: "5LiZ6L6w5Lit56eL77yM5qyi6aWu6L6+5pem77yM5aSn6YaJ77yM5L2c5q2k56+H77yM5YW85oCA5a2Q55Sx44CC5piO5pyI5Yeg5pe25pyJ77yf5oqK6YWS6Zeu6Z2S5aSp44CC5LiN55+l5aSp5LiK5a6r6ZiZ77yM5LuK5aSV5piv5L2V5bm044CC5oiR5qyy5LmY6aOO5b2S5Y6777yM5Y+I5oGQ55C85qW8546J5a6H77yM6auY5aSE5LiN6IOc5a+S44CC6LW36Iie5byE5riF5b2x77yM5L2V5Ly85Zyo5Lq66Ze0", + writeFileEncoding: "base64", + readFileEncoding: "utf-8", + }) + + await btnWriteFileButton.tap() + await isDone() + + await btnReadFileButton.tap() + await isDone() + readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual( + "丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间") + + await page.setData({ + readFileEncoding: "base64", + }) + + await btnReadFileButton.tap() + await isDone() + readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual( + "5LiZ6L6w5Lit56eL77yM5qyi6aWu6L6+5pem77yM5aSn6YaJ77yM5L2c5q2k56+H77yM5YW85oCA5a2Q55Sx44CC5piO5pyI5Yeg5pe25pyJ77yf5oqK6YWS6Zeu6Z2S5aSp44CC5LiN55+l5aSp5LiK5a6r6ZiZ77yM5LuK5aSV5piv5L2V5bm044CC5oiR5qyy5LmY6aOO5b2S5Y6777yM5Y+I5oGQ55C85qW8546J5a6H77yM6auY5aSE5LiN6IOc5a+S44CC6LW36Iie5byE5riF5b2x77yM5L2V5Ly85Zyo5Lq66Ze0" + ) + + }); + + it('stat and asset test', async () => { + // 测试 USER_DATA_PATH //globalTempPath + let globalRootPath = await getData('globalRootPath') + + await page.setData({ + recursiveVal: true, + copyToBasePath: globalRootPath, + basePath: globalRootPath, + globalTempPath: globalRootPath, + rmDirFile: 'a', + mkdirFile: 'a', + unlinkFile: 'a/1.txt', + }) + + // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 + const btnUnLinkFileButton = await page.$('#btn-unlink-file') + await btnUnLinkFileButton.tap() + await isDone() + + await page.setData({ + unlinkFile: 'a/2.txt', + }) + await btnUnLinkFileButton.tap() + await isDone() + + await page.setData({ + unlinkFile: 'a/m/3.txt', + }) + await btnUnLinkFileButton.tap() + await isDone() + + // // 清除文件夹 + const btnRmDirButton = await page.$('#btn-remove-dir') + await btnRmDirButton.tap() + await isDone() + // // 重新创建测试目录 + const btnMkdDirButton = await page.$('#btn-mkdir') + await btnMkdDirButton.tap() + await isDone() + + const btnReadDirButton = await page.$('#btn-read-dir') + await btnReadDirButton.tap() + await isDone() + + + // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 + let fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual('[]') + let fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual('[]') + + // 写入一个文件 + await page.setData({ + writeFileContent: "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦", + writeFileEncoding: "utf-8", + writeFile: 'a/1.txt', + recursiveVal: false, + statFile: 'a/1.txt', + }) + + let lastFailError = await getData('lastFailError') + console.log(lastFailError) + + const btnWriteFileButton = await page.$('#btn-write-file') + await btnWriteFileButton.tap() + await isDone() + + let btnStatFileButton = await page.$('#btn-stat-file') + await btnStatFileButton.tap() + await isDone() + + // 读取单个文件信息 + let statsRet = await getData('statsRet') + expect(statsRet.length).toEqual(1) + expect(statsRet[0].path).toMatch(new RegExp('.*/a/1.txt$')) + expect(statsRet[0].stats.size).toEqual(69) + if (isAndroid()) { + // 写入一个文件 + await page.setData({ + statsRet: '' + }) + btnStatFileButton = await page.$('#btn-stat-file-sync') + await btnStatFileButton.tap() + await isDone() + + // 读取单个文件信息 + statsRet = await getData('statsRet') + expect(statsRet.length).toEqual(1) + expect(statsRet[0].path).toMatch(new RegExp('.*/a/1.txt$')) + expect(statsRet[0].stats.size).toEqual(69) + } + + /** + * 创建子目录和子目录文件,测试recursive参数 + */ + await page.setData({ + writeFileContent: "1234567890", + writeFileEncoding: "ascii", + writeFile: 'a/2.txt', + basePath: globalRootPath, + recursiveVal: false, + statFile: 'a', + mkdirFile: 'a/m', + }) + + + await btnWriteFileButton.tap() + await isDone() + + // 创建子目录 + await btnMkdDirButton.tap() + await isDone() + + // 复制一份文件到 /a/m/3.txt + await page.setData({ + // asset 只能正式版测试,这里只能模拟返回路径 + basePath: '', + copyFromFile: 'static/test-image/logo.ico', + copyToFile: 'a/m/3.txt', + }) + const btnCopyFileButton = await page.$('#btn-copy-file') + await btnCopyFileButton.tap() + await isDone() + + + await page.setData({ + basePath: globalRootPath, + recursiveVal: true, + statFile: 'a', + }) + + await btnStatFileButton.tap() + await isDone() + + // 读取全部文件信息 + statsRet = await getData('statsRet') + + statsRet.sort(function(a, b) { + if (a.path > b.path) { + return 1 + } else if (a.path < b.path) { + return -1 + } + return 0 + }) + console.log(statsRet) + expect(statsRet.length).toEqual(5) + expect(statsRet[0].path).toMatch(new RegExp('.*/a$')) + // expect(statsRet[0].stats.size).toEqual(0) + + expect(statsRet[2].path).toMatch(new RegExp('.*/a/2.txt$')) + expect(statsRet[2].stats.size).toEqual(10) + + expect(statsRet[4].path).toMatch(new RegExp('.*/a/m/3.txt$')) + expect(statsRet[4].stats.size).toEqual(156406) + + + // 清理文件,避免影响其他测试用例 + await page.setData({ + unlinkFile: 'a/1.txt', + }) + await btnUnLinkFileButton.tap() + await isDone() + + await page.setData({ + unlinkFile: 'a/2.txt', + }) + await btnUnLinkFileButton.tap() + await isDone() + + await page.setData({ + unlinkFile: 'a/m/3.txt', + rmDirFile: 'a', + readDir: 'a', + recursiveVal: true, + }) + await btnUnLinkFileButton.tap() + await isDone() + + await btnRmDirButton.tap() + await isDone() + + await btnReadDirButton.tap() + await isDone() + + // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 + fileListComplete = await getData('fileListComplete') + expect(JSON.stringify(fileListComplete)).toEqual('[]') + fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual('[]') + + }); + it('appendFileTest', async () => { + if (!isAndroid()) { + return + } + + + let basePath = await getData('basePath') + + await page.setData({ + basePath: mBasePath, + recursiveVal: true, + logAble: false, + rmDirFile: 'appendfile', + mkdirFile: 'appendfile', + writeFileContent: "我爱北京天安门,天安门前太阳升", + appendFileContent: "再说一遍", + writeFileEncoding: "utf-8", + readFileEncoding: "utf-8", + readFile: 'appendfile/appendfile.txt', + unlinkFile: 'appendfile/appendfile.txt', + writeFile: 'appendfile/appendfile.txt', + }) + + // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败 + const btnUnLinkFileButton = await page.$('#btn-unlink-file') + await btnUnLinkFileButton.tap() + await isDone() + + // 清除文件夹 + const btnRmDirButton = await page.$('#btn-remove-dir') + await btnRmDirButton.tap() + await isDone() + + // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录 + const btnMkdDirButton = await page.$('#btn-mkdir') + await btnMkdDirButton.tap() + await isDone() + + // 先用utf-8 写入内容 + const btnWriteFileButton = await page.$('#btn-write-file') + + await btnWriteFileButton.tap() + await isDone() + + + //追加内容 + const btnAppendFileButton = await page.$('#btn-append-file') + await btnAppendFileButton.tap() + await isDone() + + const btnReadFileButton = await page.$('#btn-read-file') + await btnReadFileButton.tap() + await isDone() + let readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual("我爱北京天安门,天安门前太阳升再说一遍") + }); + //nlinkSyncTest mkdirSyncTest appendFileTest writeFileSyncTest readFileSyncTest rmdirSyncTest readDirSyncTest accessFileSyncTest + //renameFileSync copyFileSyncTest appendFileSyncTest truncateFileTest truncateFileSyncTest + it('sync test', + async () => { + if (!isAndroid()) { + return + } + + + await page.setData({ + basePath: mBasePath, + recursiveVal: false, + logAble: false, + rmDirFile: 'sync', + mkdirFile: 'sync', + writeFileContent: "我爱北京天安门,天安门前太阳升", + appendFileContent: "再说一遍", + writeFileEncoding: "utf-8", + readFileEncoding: "utf-8", + readDir: 'sync', + rmDirFile: 'sync', + unlinkFile: 'sync/sync.txt', + readFile: 'sync/sync.txt', + writeFile: 'sync/sync.txt', + accessFile: 'sync/sync.txt', + renameToFile: 'sync/sync.txt', + renameFromFile: 'sync/sync.txt', + }) + await clearDir('sync') + // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 目录 + const btnMkdDirButton = await page.$('#btn-mkdir-sync') + await btnMkdDirButton.tap() + await isDone() + + const btnReadDirButton = await page.$('#btn-read-dir-sync') + await btnReadDirButton.tap() + await isDone() + const fileListSuccess = await getData('fileListSuccess') + expect(JSON.stringify(fileListSuccess)).toEqual('[]') + + // 先用utf-8 写入内容 + const btnWriteFileButton = await page.$('#btn-write-file-sync') + await btnWriteFileButton.tap() + await isDone() + + let btnAccessFileButton = await page.$('#btn-access-file-sync') + await btnAccessFileButton.tap() + await isDone() + let accessFileRet = await getData("accessFileRet") + expect(accessFileRet).toEqual('access:ok') + + //重新命名文件 + const btnRenameFileButton = await page.$('#btn-rename-file-sync') + await btnRenameFileButton.tap() + await isDone() + let renameFileRet = await getData("renameFileRet") + expect(renameFileRet).toEqual("rename:ok") + + + //追加内容 + let btnAppendFileButton = await page.$('#btn-append-file') + await btnAppendFileButton.tap() + await isDone() + + btnAppendFileButton = await page.$('#btn-append-file-sync') + await btnAppendFileButton.tap() + + + let btnReadFileButton = await page.$('#btn-read-file-sync') + await btnReadFileButton.tap() + await isDone() + let readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual("我爱北京天安门,天安门前太阳升再说一遍再说一遍") + + //truncateFileTest + let btnTruncateFile = await page.$('#btn-truncate-file') + await btnTruncateFile.tap() + await isDone() + btnReadFileButton = await page.$('#btn-read-file-sync') + await btnReadFileButton.tap() + await isDone() + readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual("我爱北京天安门") + + btnTruncateFile = await page.$('#btn-truncate-file-sync') + await btnTruncateFile.tap() + await isDone() + btnReadFileButton = await page.$('#btn-read-file-sync') + await btnReadFileButton.tap() + await isDone() + readFileRet = await getData('readFileRet') + expect(readFileRet).toEqual("我爱北京") + + + // 测试 copyfile + await page.setData({ + basePath: mBasePath, + copyToBasePath: mBasePath, + copyFromFile: "sync/sync.txt", + copyToFile: "sync/syncto.txt", + accessFile: "sync/syncto.txt" + }) + const btnCopyFileButton = await page.$('#btn-copy-file-sync') + await btnCopyFileButton.tap() + await isDone() + btnAccessFileButton = await page.$('#btn-access-file-sync') + await btnAccessFileButton.tap() + await isDone() + accessFileRet = await getData("accessFileRet") + expect(accessFileRet).toEqual('access:ok') + + await clearDir('sync') + }); + + async function createFile() { + // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 目录 + const btnMkdDirButton = await page.$('#btn-mkdir-sync') + await btnMkdDirButton.tap() + await isDone() + + // 先用utf-8 写入内容 + const btnWriteFileButton = await page.$('#btn-write-file-sync') + await btnWriteFileButton.tap() + await isDone() + } + + async function clearDir(dir) { + // 最后需要清楚所有文件避免测试失败 + await page.setData({ + rmDirFile: dir, + }) + const btnUnLinkFileButton = await page.$('#btn-clear-file') + await btnUnLinkFileButton.tap() + await isDone() + + const btnClear = await page.$('#btn-remove-dir') + await btnClear.tap() + await isDone() + } + + function isAndroid() { + if (process.env.uniTestPlatformInfo.indexOf('web') > -1 || process.env.UNI_AUTOMATOR_APP_WEBVIEW === + 'true') { + expect(1).toBe(1) + return false + } + if (process.env.uniTestPlatformInfo.toLocaleLowerCase().startsWith('ios')) { + expect(1).toBe(1) + return false + } + return true + } + + it('getSavedFileListTest', + async () => { + if (!isAndroid()) { + return + } + // await page.setData({ + // logAble: false, + // basePath: mBasePath + // }) + // console.log('getSavedFileListTest', 'start') + // await clearDir('') + // console.log('getSavedFileListTest', 'end') + await page.setData({ + logAble: false, + basePath: mGlobalTempPath, + temFile: 'save3/2.txt', + mkdirFile: 'save3', + writeFile: 'save3/2.txt', + accessFile: '2.txt' + }) + await createFile() + await page.setData({ + basePath: mBasePath, + writeFile: 'save/2.txt', + }) + btnSaveFile = await page.$('#btn-save-file-sync') + await btnSaveFile.tap() + await isDone() + let btnSavedFileList = await page.$('#btn-getsaved-filelist') + await btnSavedFileList.tap() + await isDone() + let getSavedFileListRet = await getData("getSavedFileListRet") + console.log('getSavedFileListTest->' + getSavedFileListRet) + expect(getSavedFileListRet).toEqual('getSavedFileList:ok') + }); + + it('removeSavedFileTest', + async () => { + if (!isAndroid()) { + return + } + await page.setData({ + logAble: false, + basePath: mBasePath + }) + await clearDir('save4') + await page.setData({ + logAble: false, + basePath: mGlobalTempPath, + temFile: 'save4/saveSync.txt', + mkdirFile: 'save4', + writeFile: 'save4/saveSync.txt', + accessFile: 'saveSync.txt' + }) + await createFile() + let btnRemoveSavedFileRet = await page.$('#btn-remove-saved-file') + await btnRemoveSavedFileRet.tap() + await isDone() + let removeSavedFileRet = await getData("removeSavedFileRet") + expect(removeSavedFileRet).toEqual('removeSavedFile:ok') + + }); + + //openFiletest openFileSynctest closeTest closeTestSync writeTest writeSyncTest + it('openFiletest', async () => { + if (!isAndroid()) { + return + } + + await page.setData({ + basePath: mBasePath, + logAble: false, + mkdirFile: 'fd', + writeFile: 'fd/1.txt', + readFile: 'fd/1.txt' + }) + await clearDir('fd') + await createFile() + console.log('openFiletest', '2') + //openFiletest + let btnOpenFile = await page.$('#btn-open-file') + await btnOpenFile.tap() + await isDone() + let fd = await getData("fd") + expect(fd).not.toBe(''); + await page.setData({ + fd: '', + }) + console.log('openFiletest', '3') + //openFileSynctest + btnOpenFile = await page.$('#btn-open-file-sync') + await btnOpenFile.tap() + await isDone() + fd = await getData("fd") + expect(fd).not.toBe(''); + console.log('openFiletest', '4') + }); + // closeTest closeTestSync + it('closeTest', async () => { + if (!isAndroid()) { + return + } + + + + await page.setData({ + basePath: mBasePath, + logAble: false, + mkdirFile: 'fd', + writeFile: 'fd/1.txt', + readFile: 'fd/1.txt' + }) + await clearDir('fd') + await createFile() + //closeTest + let btnCloseFile = await page.$('#btn-close-file') + await btnCloseFile.tap() + await isDone() + let closeFileRet = await getData("closeFileRet") + expect(closeFileRet).toEqual('close:ok') + await page.setData({ + closeFileRet: '', + }) + //closeTestSync + btnCloseFile = await page.$('#btn-close-file-sync') + await btnCloseFile.tap() + await isDone() + closeFileRet = await getData("closeFileRet") + expect(closeFileRet).toEqual('close:ok') + + }); + //writeTest writeSyncTest + it('writeTest', async () => { + if (!isAndroid()) { + return + } + console.log('writeTest', 'start') + + await page.setData({ + basePath: mBasePath, + logAble: false, + mkdirFile: 'fd', + writeFile: 'fd/1.txt', + readFile: 'fd/1.txt', + writeData: '我是一只小小鸟' + }) + await clearDir('fd') + await createFile() + console.log('writeTest', '1') + let btnWrite = await page.$('#btn-write') + await btnWrite.tap() + await isDone() + let bytesWritten = await getData("bytesWritten") + let lastFailError = await getData("lastFailError") + if (bytesWritten != 7) { + let writeData = await getData("writeData") + console.log('writeTest', lastFailError.errCode, lastFailError.errMsg, bytesWritten, + writeData) + } + + expect(bytesWritten).toEqual(7) + console.log('writeTest', '2') + //writeSyncTest + await page.setData({ + writeFile: 'fd/1.txt', + readFile: 'fd/1.txt', + writeData: '我是' + }) + + btnWrite = await page.$('#btn-write-sync') + await btnWrite.tap() + await isDone() + bytesWritten = await getData("bytesWritten") + expect(bytesWritten).toEqual(2) + console.log('writeTest', '3') + //fstatTest + let btnFstat = await page.$('#btn-fstat-file') + await btnFstat.tap() + await isDone() + let fstat = await getData("fstat") + expect(fstat.size > 0).toBe(true) + console.log('writeTest', '4') + + //fstatSyncTest + btnFstat = await page.$('#btn-fstat-file-sync') + await btnFstat.tap() + await isDone() + fstat = await getData("fstat") + expect(fstat.size > 0).toBe(true) + console.log('writeTest', '5') + + //ftruncateFileTest + let btnFTruncateFile = await page.$('#btn-ftruncate-file') + await btnFTruncateFile.tap() + await isDone() + let ftruncateRet = await getData("ftruncateRet") + expect(fstat).not.toEqual('ftruncate:ok') + await page.setData({ + ftruncate: '', + }) + console.log('writeTest', '6') + + //ftruncateFileSyncTest + btnFTruncateFile = await page.$('#btn-ftruncate-file-sync') + await btnFTruncateFile.tap() + await isDone() + ftruncateRet = await getData("ftruncateRet") + expect(fstat).not.toEqual('ftruncate:ok') + console.log('writeTest', '7') + }); + //writeTest writeSyncTest + it('ftruncateFileTest', async () => { + if (!isAndroid()) { + return + } + console.log('ftruncateFileTest', 'start') + + await page.setData({ + basePath: mBasePath, + logAble: false, + mkdirFile: 'fd', + writeFile: 'fd/1.txt', + readFile: 'fd/1.txt', + writeData: '我是一只小小鸟我是' + }) + await clearDir('fd') + await createFile() + console.log('ftruncateFileTest', '1') + btnWrite = await page.$('#btn-write-sync') + await btnWrite.tap() + await isDone() + bytesWritten = await getData("bytesWritten") + expect(bytesWritten).toEqual(9) + console.log('ftruncateFileTest', '3') + //ftruncateFileTest + let btnFTruncateFile = await page.$('#btn-ftruncate-file') + await btnFTruncateFile.tap() + await isDone() + let ftruncateRet = await getData("ftruncateRet") + expect(ftruncateRet).toEqual('ftruncate:ok') + await page.setData({ + ftruncate: '', + }) + console.log('ftruncateFileTest', '6') + + //ftruncateFileSyncTest + btnFTruncateFile = await page.$('#btn-ftruncate-file-sync') + await btnFTruncateFile.tap() + await isDone() + ftruncateRet = await getData("ftruncateRet") + expect(ftruncateRet).toEqual('ftruncate:ok') + console.log('ftruncateFileTest', '7') + }); + + //testAppendFileBuffer + it('testAppendFileBuffer', async () => { + if (!isAndroid()) { + return + } + + var btnWrite = await page.$('#btn-appendfile-buffer') + await btnWrite.tap() + await isDone() + let arrayBufferRes = await getData("arrayBufferRes") + expect(bytesWritten).toEqual(21) + }); + + it('testAppendFileBufferSync', async () => { + if (!isAndroid()) { + return + } + + var btnWrite = await page.$('#btn-appendfilesync-buffer') + await btnWrite.tap() + await isDone() + let arrayBufferRes = await getData("arrayBufferRes") + expect(bytesWritten).toEqual(20) + }); + + it('testWriteReadSyncBuffer', async () => { + if (!isAndroid()) { + return + } + + var btnWrite = await page.$('#btn-writereadsync-buffer') + await btnWrite.tap() + await isDone() + let arrayBufferRes = await getData("arrayBufferRes") + expect(bytesWritten).toEqual(1.11) + }); + + it('testWriteReadBuffer', async () => { + if (!isAndroid()) { + return + } + + var btnWrite = await page.$('#btn-writeread-buffer') + await btnWrite.tap() + await isDone() + let arrayBufferRes = await getData("arrayBufferRes") + expect(bytesWritten).toEqual(1.24) + }); + + it('testWriteReadFileSyncBuffer', async () => { + if (!isAndroid()) { + return + } + + var btnWrite = await page.$('#btn-writereadfilesync-buffer') + await btnWrite.tap() + await isDone() + let arrayBufferRes = await getData("arrayBufferRes") + expect(bytesWritten).toEqual(1.333) + }); + + it('testReadFileBuffer', async () => { + if (!isAndroid()) { + return + } + + var btnWrite = await page.$('#btn-writereadfile-buffer') + await btnWrite.tap() + await isDone() + let arrayBufferRes = await getData("arrayBufferRes") + expect(bytesWritten).toEqual(1.2222222) + }); +}); \ No newline at end of file diff --git a/pages/API/get-file-system-manager/get-file-system-manager.uvue b/pages/API/get-file-system-manager/get-file-system-manager.uvue index 45621e5b..08fcedb9 100644 --- a/pages/API/get-file-system-manager/get-file-system-manager.uvue +++ b/pages/API/get-file-system-manager/get-file-system-manager.uvue @@ -1,1281 +1,1666 @@ + .btnstyle { + margin: 4px; + } + \ No newline at end of file diff --git a/pages/API/provider/provider.uvue b/pages/API/provider/provider.uvue index 665e41c5..6c190c66 100644 --- a/pages/API/provider/provider.uvue +++ b/pages/API/provider/provider.uvue @@ -56,8 +56,10 @@ this.serviceList.forEach((item : ProviderItem) => { var provider = uni.getProviderSync({ service: item.service, - } as GetProviderSyncOptions) - provider.providerIds.forEach((value) => { + } as GetProviderSyncOptions) + console.log('getProvider',provider,provider.providerIds.length) + provider.providerIds.forEach((value) => { + console.log('getProvider','value',value) this.providerIds.push(value) }) this.updateProvider(item.service, provider.providerIds, provider.providerObjects); -- GitLab