get-file-system-manager.test.js 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497
  1. jest.setTimeout(50000);
  2. const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
  3. const isIOS = platformInfo.startsWith('ios')
  4. const isAndroid = platformInfo.startsWith('android')
  5. const isHarmony = platformInfo.startsWith('harmony')
  6. const isMP = platformInfo.startsWith('mp')
  7. const isWeb = platformInfo.startsWith('web')
  8. const isAppWebView = process.env.UNI_AUTOMATOR_APP_WEBVIEW == 'true'
  9. const isApp = isAndroid || isIOS || isHarmony && !isAppWebView
  10. const PAGE_PATH = '/pages/API/get-file-system-manager/get-file-system-manager'
  11. describe('ExtApi-FileManagerTest', () => {
  12. if (isWeb || isAppWebView) {
  13. it('not support', () => {
  14. expect(1).toBe(1)
  15. })
  16. return
  17. }
  18. let page;
  19. let mBasePath;
  20. let mGlobalTempPath;
  21. beforeAll(async () => {
  22. page = await program.reLaunch(PAGE_PATH)
  23. await page.waitFor('text');
  24. await page.waitFor(600);
  25. });
  26. async function isDone() {
  27. let isDone = await page.waitFor(async () => {
  28. return await page.data('done')
  29. })
  30. await page.setData({
  31. done: false
  32. })
  33. return isDone
  34. }
  35. it('USER_DATA_PATH test', async () => {
  36. // 测试 USER_DATA_PATH
  37. let globalUserDataPath = await page.data('globalUserDataPath')
  38. mBasePath = await page.data('basePath')
  39. mGlobalRootPath = await page.data('globalRootPath')
  40. mGlobalTempPath = await page.data('globalTempPath')
  41. await page.setData({
  42. logAble: false,
  43. recursiveVal: true,
  44. copyToBasePath: globalUserDataPath,
  45. basePath: globalUserDataPath,
  46. rmDirFile: 'a',
  47. readDir: 'a',
  48. writeFile: 'a/1.txt',
  49. readFile: 'a/1.txt',
  50. unlinkFile: 'a/1.txt',
  51. writeFileContent: '锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦'
  52. })
  53. // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败
  54. const btnUnLinkFileButton = await page.$('#btn-clear-file')
  55. await btnUnLinkFileButton.tap()
  56. await isDone()
  57. // 清除文件夹
  58. const btnRmDirButton = await page.$('#btn-remove-dir')
  59. await btnRmDirButton.tap()
  60. await isDone()
  61. // 重新创建测试目录
  62. const btnMkdDirButton = await page.$('#btn-mkdir')
  63. await btnMkdDirButton.tap()
  64. await isDone()
  65. const btnReadDirButton = await page.$('#btn-read-dir')
  66. await btnReadDirButton.tap()
  67. await isDone()
  68. // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录
  69. let fileListComplete = await page.data('fileListComplete')
  70. expect(JSON.stringify(fileListComplete)).toEqual('[]')
  71. let fileListSuccess = await page.data('fileListSuccess')
  72. expect(JSON.stringify(fileListSuccess)).toEqual('[]')
  73. // 先测试 recursive = false 文件夹创建,期望失败
  74. await page.setData({
  75. recursiveVal: false,
  76. mkdirFile: 'a/b/c'
  77. })
  78. if (!isMP) {
  79. await btnMkdDirButton.tap()
  80. await isDone()
  81. let lastFailError = await page.data('lastFailError')
  82. expect(lastFailError.errCode).toEqual(1300002)
  83. expect(lastFailError.errMsg).toContain('No such file or directory')
  84. // let lastCompleteError = await page.data('lastCompleteError')
  85. // expect(lastCompleteError.errCode).toEqual(1300002)
  86. // expect(lastCompleteError.errMsg).toEqual('No such file or directory')
  87. }
  88. // 测试 recursive = true 期望文件夹创建成功
  89. await page.setData({
  90. recursiveVal: true
  91. })
  92. await btnMkdDirButton.tap()
  93. await isDone()
  94. await btnReadDirButton.tap()
  95. await isDone()
  96. // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录
  97. fileListComplete = await page.data('fileListComplete')
  98. expect(JSON.stringify(fileListComplete)).toEqual("[\"b\"]")
  99. fileListSuccess = await page.data('fileListSuccess')
  100. expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\"]")
  101. // 测试写入文件
  102. const btnWriteFileButton = await page.$('#btn-write-file')
  103. await btnWriteFileButton.tap()
  104. await isDone()
  105. // 检查目录列表数量
  106. await btnReadDirButton.tap()
  107. await isDone()
  108. fileListComplete = await page.data('fileListComplete')
  109. fileListComplete.sort()
  110. expect(JSON.stringify(fileListComplete)).toEqual("[\"1.txt\",\"b\"]")
  111. fileListSuccess = await page.data('fileListSuccess')
  112. fileListSuccess.sort()
  113. expect(JSON.stringify(fileListSuccess)).toEqual("[\"1.txt\",\"b\"]")
  114. // 获取和对比 文件内容
  115. const btnReadFileButton = await page.$('#btn-read-file')
  116. await btnReadFileButton.tap()
  117. await isDone()
  118. let readFileRet = await page.data('readFileRet')
  119. expect(readFileRet).toEqual("锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦")
  120. // 更换文件内容 获取和对比 文件md5和sha1
  121. await page.setData({
  122. 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.",
  123. getFileInfoAlgorithm: "md5"
  124. })
  125. await btnWriteFileButton.tap()
  126. await isDone()
  127. await btnReadFileButton.tap()
  128. await isDone()
  129. readFileRet = await page.data('readFileRet')
  130. expect(readFileRet).toEqual(
  131. "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."
  132. )
  133. const btnGetFileInfoButton = await page.$('#btn-get-file-info')
  134. await btnGetFileInfoButton.tap()
  135. await isDone()
  136. let getFileInfoSize = await page.data('getFileInfoSize')
  137. expect(getFileInfoSize).toEqual(185)
  138. let getFileInfoDigest = await page.data('getFileInfoDigest')
  139. expect(getFileInfoDigest).toEqual("29ddd02ed3c38ccebb98884eda082cb1")
  140. // 切换为 sha1
  141. await page.setData({
  142. getFileInfoAlgorithm: "sha1"
  143. })
  144. await btnGetFileInfoButton.tap()
  145. await isDone()
  146. getFileInfoSize = await page.data('getFileInfoSize')
  147. expect(getFileInfoSize).toEqual(185)
  148. getFileInfoDigest = await page.data('getFileInfoDigest')
  149. expect(getFileInfoDigest).toEqual("ebef4e75783e0db499fc260d120e695005bead8a")
  150. // 测试 copyfile
  151. await page.setData({
  152. copyFromFile: "a/1.txt",
  153. copyToFile: "a/2.txt"
  154. })
  155. const btnCopyFileButton = await page.$('#btn-copy-file')
  156. await btnCopyFileButton.tap()
  157. await isDone()
  158. await btnReadDirButton.tap()
  159. await isDone()
  160. // 1.txt 2.txt 两个文件都存在
  161. fileListComplete = await page.data('fileListComplete')
  162. fileListComplete.sort()
  163. expect(JSON.stringify(fileListComplete)).toEqual("[\"1.txt\",\"2.txt\",\"b\"]")
  164. fileListSuccess = await page.data('fileListSuccess')
  165. fileListSuccess.sort()
  166. expect(JSON.stringify(fileListSuccess)).toEqual("[\"1.txt\",\"2.txt\",\"b\"]")
  167. // 测试 rename
  168. await page.setData({
  169. renameFromFile: "a/2.txt",
  170. renameToFile: "a/3.txt"
  171. })
  172. const btnRenameFileButton = await page.$('#btn-rename-file')
  173. await btnRenameFileButton.tap()
  174. await isDone()
  175. await btnReadDirButton.tap()
  176. await isDone()
  177. // 1.txt 3.txt 两个文件都存在
  178. fileListComplete = await page.data('fileListComplete')
  179. fileListComplete.sort()
  180. expect(JSON.stringify(fileListComplete)).toEqual("[\"1.txt\",\"3.txt\",\"b\"]")
  181. fileListSuccess = await page.data('fileListSuccess')
  182. fileListSuccess.sort()
  183. expect(JSON.stringify(fileListSuccess)).toEqual("[\"1.txt\",\"3.txt\",\"b\"]")
  184. });
  185. if (isMP) {
  186. // 如下大量测试是对非USER_DATA_PATH的测试,后续有机会再行整理
  187. return
  188. }
  189. it('TEMP_PATH test', async () => {
  190. // 测试 TEMP_PATH
  191. let globalTempPath = await page.data('globalTempPath')
  192. let version = process.env.uniTestPlatformInfo
  193. version = parseInt(version.split(" ")[1])
  194. let testDirName = "我们经历了一场兵慌马乱的战争.1@2#3$4%5^6&7*8(9)0+-qwertyuiopasdfghjklzxcvbnm;,"
  195. if (version < 6) {
  196. // android 6 以下文件名不能包含特殊字符
  197. testDirName = "我们经历了一场兵慌马乱的战争"
  198. }
  199. await page.setData({
  200. logAble: false,
  201. recursiveVal: true,
  202. basePath: globalTempPath,
  203. copyToBasePath: globalTempPath,
  204. rmDirFile: 'a',
  205. mkdirFile: 'a',
  206. unlinkFile: 'a/' + testDirName + '/中文路径/张三/name/中文文件.mock'
  207. })
  208. // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败
  209. const btnUnLinkFileButton = await page.$('#btn-unlink-file')
  210. await btnUnLinkFileButton.tap()
  211. await isDone()
  212. // 清除文件夹
  213. const btnRmDirButton = await page.$('#btn-remove-dir')
  214. await btnRmDirButton.tap()
  215. await isDone()
  216. // 重新创建测试目录
  217. const btnMkdDirButton = await page.$('#btn-mkdir')
  218. await btnMkdDirButton.tap()
  219. await isDone()
  220. const btnReadDirButton = await page.$('#btn-read-dir')
  221. await btnReadDirButton.tap()
  222. await isDone()
  223. // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录
  224. let fileListComplete = await page.data('fileListComplete')
  225. expect(JSON.stringify(fileListComplete)).toEqual("[]")
  226. let fileListSuccess = await page.data('fileListSuccess')
  227. expect(JSON.stringify(fileListSuccess)).toEqual("[]")
  228. // 测试 创建多层级文件目录
  229. await page.setData({
  230. recursiveVal: true,
  231. 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',
  232. })
  233. await btnMkdDirButton.tap()
  234. await isDone()
  235. await btnReadDirButton.tap()
  236. await isDone()
  237. fileListComplete = await page.data('fileListComplete')
  238. expect(JSON.stringify(fileListComplete)).toEqual("[\"b\"]")
  239. fileListSuccess = await page.data('fileListSuccess')
  240. expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\"]")
  241. // 测试 创建包含中文特殊符号的目录
  242. await page.setData({
  243. recursiveVal: true,
  244. mkdirFile: 'a/' + testDirName + '/中文路径/张三/name',
  245. })
  246. await btnMkdDirButton.tap()
  247. await isDone()
  248. await btnReadDirButton.tap()
  249. await isDone()
  250. // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录
  251. fileListComplete = await page.data('fileListComplete')
  252. fileListComplete.sort()
  253. expect(JSON.stringify(fileListComplete)).toEqual("[\"b\",\"" + testDirName + "\"]")
  254. fileListSuccess = await page.data('fileListSuccess')
  255. fileListSuccess.sort()
  256. expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\",\"" + testDirName + "\"]")
  257. /**
  258. * 从资源文件中读取图片为base64,测试写入较大文件场景
  259. * 'static/test-image/logo.ico' 注意,依赖这个资源文件,不能删除
  260. */
  261. await page.setData({
  262. basePath: "/",
  263. readFile: 'static/test-image/logo.ico',
  264. readFileEncoding: 'base64'
  265. })
  266. // 获取和对比 文件内容
  267. const btnReadFileButton = await page.$('#btn-read-file')
  268. await btnReadFileButton.tap()
  269. await isDone()
  270. let readFileRet = await page.data('readFileRet')
  271. expect(readFileRet.length).toEqual(5716)
  272. let endStr = readFileRet.substring(readFileRet.length - 10)
  273. expect(endStr).toEqual("AA///AA/8=")
  274. await page.setData({
  275. basePath: globalTempPath,
  276. writeFile: 'a/' + testDirName + '/中文路径/张三/name/中文文件.mock',
  277. writeFileContent: readFileRet
  278. })
  279. const btnWriteFileButton = await page.$('#btn-write-file')
  280. await btnWriteFileButton.tap()
  281. await isDone()
  282. // 获取文件列表,判断是否写入成功,同时置空base64内容 避免影响实时查看状态
  283. await page.setData({
  284. readDir: 'a/' + testDirName + '/中文路径/张三/name',
  285. readFileRet: '',
  286. writeFileContent: ''
  287. })
  288. // 检查目录列表数量
  289. await btnReadDirButton.tap()
  290. await isDone()
  291. fileListComplete = await page.data('fileListComplete')
  292. expect(JSON.stringify(fileListComplete)).toEqual("[\"中文文件.mock\"]")
  293. fileListSuccess = await page.data('fileListSuccess')
  294. expect(JSON.stringify(fileListSuccess)).toEqual("[\"中文文件.mock\"]")
  295. // 更换文件内容 获取和对比 文件md5和sha1
  296. await page.setData({
  297. getFileInfoFile: 'a/' + testDirName + '/中文路径/张三/name/中文文件.mock',
  298. getFileInfoAlgorithm: "md5",
  299. })
  300. const btnGetFileInfoButton = await page.$('#btn-get-file-info')
  301. await btnGetFileInfoButton.tap()
  302. await isDone()
  303. let getFileInfoSize = await page.data('getFileInfoSize')
  304. expect(getFileInfoSize).toEqual(5716)
  305. let getFileInfoDigest = await page.data('getFileInfoDigest')
  306. expect(getFileInfoDigest).toEqual("5d8accb35bda875ca3726d18b020e474")
  307. // 切换为 sha1
  308. await page.setData({
  309. getFileInfoAlgorithm: "sha1"
  310. })
  311. await btnGetFileInfoButton.tap()
  312. await isDone()
  313. getFileInfoSize = await page.data('getFileInfoSize')
  314. expect(getFileInfoSize).toEqual(5716)
  315. getFileInfoDigest = await page.data('getFileInfoDigest')
  316. expect(getFileInfoDigest).toEqual("b48cf507b618974ee5b7d5449d8c1911e2d68245")
  317. // 测试不支持的摘要算法,期望返回错误
  318. await page.setData({
  319. getFileInfoAlgorithm: "sha256"
  320. })
  321. if (!isMP) {
  322. await btnGetFileInfoButton.tap()
  323. await isDone()
  324. let lastFailError = await page.data('lastFailError')
  325. expect(lastFailError.errCode).toEqual(1300022)
  326. // let lastCompleteError = await page.data('lastCompleteError')
  327. // expect(lastCompleteError.errCode).toEqual(1300022)
  328. }
  329. // rename 到一个没有提前创建过的目录,期望返回错误
  330. await page.setData({
  331. renameFromFile: "a/" + testDirName + "/中文路径/张三/name/中文文件.mock",
  332. renameToFile: "a/没有提前创建的目录/3.txt"
  333. })
  334. if (!isMP) {
  335. const btnRenameFileButton = await page.$('#btn-rename-file')
  336. await btnRenameFileButton.tap()
  337. await isDone()
  338. lastFailError = await page.data('lastFailError')
  339. expect(lastFailError.errCode).toEqual(1300002)
  340. // lastCompleteError = await page.data('lastCompleteError')
  341. // expect(lastCompleteError.errCode).toEqual(1300002)
  342. }
  343. // 非递归创建一级目录。期望成功
  344. await page.setData({
  345. recursiveVal: false,
  346. mkdirFile: 'a/提前创建的目录',
  347. })
  348. await btnMkdDirButton.tap()
  349. await isDone()
  350. await page.setData({
  351. readDir: 'a',
  352. })
  353. await btnReadDirButton.tap()
  354. await isDone()
  355. fileListComplete = await page.data('fileListComplete')
  356. fileListComplete.sort()
  357. expect(JSON.stringify(fileListComplete)).toEqual("[\"b\",\"" + testDirName +
  358. "\",\"提前创建的目录\"]")
  359. fileListSuccess = await page.data('fileListSuccess')
  360. fileListSuccess.sort()
  361. expect(JSON.stringify(fileListSuccess)).toEqual("[\"b\",\"" + testDirName +
  362. "\",\"提前创建的目录\"]")
  363. await page.setData({
  364. copyFromFile: "a/" + testDirName + "/中文路径/张三/name/中文文件.mock",
  365. copyToFile: "a/提前创建的目录/4.txt"
  366. })
  367. const btnCopyFileButton = await page.$('#btn-copy-file')
  368. await btnCopyFileButton.tap()
  369. await isDone()
  370. await page.setData({
  371. readDir: 'a/提前创建的目录',
  372. })
  373. await btnReadDirButton.tap()
  374. await isDone()
  375. fileListComplete = await page.data('fileListComplete')
  376. expect(JSON.stringify(fileListComplete)).toEqual("[\"4.txt\"]")
  377. fileListSuccess = await page.data('fileListSuccess')
  378. expect(JSON.stringify(fileListSuccess)).toEqual("[\"4.txt\"]")
  379. await page.setData({
  380. unlinkFile: 'a/提前创建的目录/4.txt',
  381. rmDirFile: 'a/提前创建的目录'
  382. })
  383. await btnUnLinkFileButton.tap()
  384. await isDone()
  385. await btnReadDirButton.tap()
  386. await isDone()
  387. fileListComplete = await page.data('fileListComplete')
  388. expect(JSON.stringify(fileListComplete)).toEqual("[]")
  389. fileListSuccess = await page.data('fileListSuccess')
  390. expect(JSON.stringify(fileListSuccess)).toEqual("[]")
  391. });
  392. it('CROSS DIR test', async () => {
  393. /**
  394. * 跨越用户目录和代码资源目录
  395. */
  396. let globalRootPath = await page.data('globalRootPath')
  397. await page.setData({
  398. recursiveVal: true,
  399. logAble: false,
  400. basePath: globalRootPath,
  401. readDir: 'a',
  402. rmDirFile: 'a',
  403. mkdirFile: 'a',
  404. accessFile: 'a/从代码目录拷贝的资源.png',
  405. unlinkFile: 'a/从代码目录拷贝的资源.png'
  406. })
  407. // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败
  408. const btnClearFileButton = await page.$('#btn-clear-file')
  409. await btnClearFileButton.tap()
  410. await isDone()
  411. // 清除文件夹
  412. const btnRmDirButton = await page.$('#btn-remove-dir')
  413. await btnRmDirButton.tap()
  414. await isDone()
  415. // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录
  416. const btnMkdDirButton = await page.$('#btn-mkdir')
  417. await btnMkdDirButton.tap()
  418. await isDone()
  419. const btnReadDirButton = await page.$('#btn-read-dir')
  420. await btnReadDirButton.tap()
  421. await isDone()
  422. let fileListComplete = await page.data('fileListComplete')
  423. expect(JSON.stringify(fileListComplete)).toEqual('[]')
  424. let fileListSuccess = await page.data('fileListSuccess')
  425. expect(JSON.stringify(fileListSuccess)).toEqual('[]')
  426. // 检查资源文件,此时不存在
  427. const btnAccessFileButton = await page.$('#btn-access-file')
  428. await btnAccessFileButton.tap()
  429. await isDone()
  430. let accessFileRet = await page.data("accessFileRet")
  431. expect(accessFileRet).toEqual('')
  432. // 准备从资源目录拷贝png
  433. await page.setData({
  434. basePath: "/",
  435. unlinkFile: 'static/test-image/logo.ico',
  436. accessFile: 'static/test-image/logo.ico',
  437. })
  438. // 检查资源文件,期望存在
  439. await btnAccessFileButton.tap()
  440. await isDone()
  441. accessFileRet = await page.data("accessFileRet")
  442. expect(accessFileRet).toEqual('access:ok')
  443. // // 尝试删除资源,期望失败
  444. const btnUnLinkFileButton = await page.$('#btn-unlink-file')
  445. if (!isIOS) {
  446. await btnUnLinkFileButton.tap()
  447. await isDone()
  448. }
  449. await btnAccessFileButton.tap()
  450. await isDone()
  451. accessFileRet = await page.data("accessFileRet")
  452. expect(accessFileRet).toEqual('access:ok')
  453. // 复制资源到 root目录
  454. await page.setData({
  455. copyToBasePath: globalRootPath,
  456. copyFromFile: "static/test-image/logo.ico",
  457. copyToFile: "a/从代码目录拷贝的资源.png"
  458. })
  459. const btnCopyFileButton = await page.$('#btn-copy-file')
  460. await btnCopyFileButton.tap()
  461. await isDone()
  462. // 检查期望 root 目录中图片文件存在
  463. await page.setData({
  464. basePath: globalRootPath,
  465. unlinkFile: 'a/从代码目录拷贝的资源.png',
  466. accessFile: 'a/从代码目录拷贝的资源.png',
  467. rmDirFile: 'a',
  468. })
  469. await btnAccessFileButton.tap()
  470. await isDone()
  471. accessFileRet = await page.data("accessFileRet")
  472. expect(accessFileRet).toEqual('access:ok')
  473. await btnUnLinkFileButton.tap()
  474. await isDone()
  475. await btnAccessFileButton.tap()
  476. await isDone()
  477. accessFileRet = await page.data("accessFileRet")
  478. expect(accessFileRet).toEqual('')
  479. // 从页面的按钮触发一次文件复制
  480. const btnCopyStaticFileButton = await page.$('#btn-copyStatic-file')
  481. await btnCopyStaticFileButton.tap()
  482. await isDone()
  483. await btnReadDirButton.tap()
  484. await isDone()
  485. fileListComplete = await page.data('fileListComplete')
  486. expect(JSON.stringify(fileListComplete)).toEqual("[\"mock.json\"]")
  487. fileListSuccess = await page.data('fileListSuccess')
  488. expect(JSON.stringify(fileListSuccess)).toEqual("[\"mock.json\"]")
  489. // 从页面的按钮触发一次文件清空
  490. await btnClearFileButton.tap()
  491. await isDone()
  492. await btnReadDirButton.tap()
  493. await isDone()
  494. fileListComplete = await page.data('fileListComplete')
  495. expect(JSON.stringify(fileListComplete)).toEqual("[]")
  496. fileListSuccess = await page.data('fileListSuccess')
  497. expect(JSON.stringify(fileListSuccess)).toEqual("[]")
  498. });
  499. it('write and read', async () => {
  500. /**
  501. * 测试writefile readfile 各个参数是否符合预期
  502. */
  503. let globalTempPath = await page.data('globalTempPath')
  504. await page.setData({
  505. recursiveVal: true,
  506. logAble: false,
  507. basePath: globalTempPath,
  508. readDir: 'd',
  509. rmDirFile: 'd',
  510. mkdirFile: 'd',
  511. writeFileContent: "我爱北京天安门,天安门前太阳升",
  512. writeFileEncoding: "utf-8",
  513. readFileEncoding: "utf-8",
  514. unlinkFile: 'd/write.bing',
  515. writeFile: 'd/write.bing',
  516. readFile: 'd/write.bing',
  517. getFileInfoFile: 'd/write.bing',
  518. getFileInfoAlgorithm: "sha1"
  519. })
  520. // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败
  521. const btnUnLinkFileButton = await page.$('#btn-unlink-file')
  522. await btnUnLinkFileButton.tap()
  523. await isDone()
  524. // 清除文件夹
  525. const btnRmDirButton = await page.$('#btn-remove-dir')
  526. await btnRmDirButton.tap()
  527. await isDone()
  528. // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录
  529. const btnMkdDirButton = await page.$('#btn-mkdir')
  530. await btnMkdDirButton.tap()
  531. await isDone()
  532. const btnReadDirButton = await page.$('#btn-read-dir')
  533. await btnReadDirButton.tap()
  534. await isDone()
  535. let fileListComplete = await page.data('fileListComplete')
  536. expect(JSON.stringify(fileListComplete)).toEqual('[]')
  537. let fileListSuccess = await page.data('fileListSuccess')
  538. expect(JSON.stringify(fileListSuccess)).toEqual('[]')
  539. // 先用utf-8 写入内容
  540. const btnWriteFileButton = await page.$('#btn-write-file')
  541. await btnWriteFileButton.tap()
  542. await isDone()
  543. const btnReadFileButton = await page.$('#btn-read-file')
  544. await btnReadFileButton.tap()
  545. await isDone()
  546. let readFileRet = await page.data('readFileRet')
  547. expect(readFileRet).toEqual("我爱北京天安门,天安门前太阳升")
  548. const btnGetFileInfoButton = await page.$('#btn-get-file-info')
  549. await btnGetFileInfoButton.tap()
  550. await isDone()
  551. let getFileInfoSize = await page.data('getFileInfoSize')
  552. expect(getFileInfoSize).toEqual(45)
  553. let getFileInfoDigest = await page.data('getFileInfoDigest')
  554. expect(getFileInfoDigest).toEqual("2ae9c7672ff6c1e7c7e6a0bb4e74a6f06b39350b")
  555. // 尝试读取base64 信息
  556. await page.setData({
  557. readFileEncoding: "base64",
  558. })
  559. await btnReadFileButton.tap()
  560. await isDone()
  561. readFileRet = await page.data('readFileRet')
  562. expect(readFileRet).toEqual("5oiR54ix5YyX5Lqs5aSp5a6J6Zeo77yM5aSp5a6J6Zeo5YmN5aSq6Ziz5Y2H")
  563. // 测试ascii,需要特别测试 ascii 写入非法字符的情况,因为微信的常量字符编码和android原生有差异。
  564. await page.setData({
  565. writeFileContent: "丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间",
  566. writeFileEncoding: "ascii",
  567. readFileEncoding: "base64",
  568. })
  569. await btnWriteFileButton.tap()
  570. await isDone()
  571. await btnGetFileInfoButton.tap()
  572. await isDone()
  573. getFileInfoSize = await page.data('getFileInfoSize')
  574. expect(getFileInfoSize).toEqual(78)
  575. getFileInfoDigest = await page.data('getFileInfoDigest')
  576. expect(getFileInfoDigest).toEqual("4ac7a65055628818341c2ad86ddc4205d8503801")
  577. await btnReadFileButton.tap()
  578. await isDone()
  579. readFileRet = await page.data('readFileRet')
  580. expect(readFileRet).toEqual(
  581. "GbAtywwibr7mDCeJDFxkxwx8AFAxAg4I4PYJH4pS7lIpAg3lKQqrGQzKFS9VdAIRMljOUrsMyFA8fImHDNgEDdzSAnceBAVxDFU8KLr0"
  582. )
  583. // 尝试写入合法ascii
  584. await page.setData({
  585. writeFileContent: "hello jack.hello marry.",
  586. writeFileEncoding: "ascii",
  587. readFileEncoding: "ascii",
  588. })
  589. await btnWriteFileButton.tap()
  590. await isDone()
  591. await btnReadFileButton.tap()
  592. await isDone()
  593. readFileRet = await page.data('readFileRet')
  594. expect(readFileRet).toEqual("hello jack.hello marry.")
  595. // 写入base64 获取 中文
  596. await page.setData({
  597. writeFileContent: "5LiZ6L6w5Lit56eL77yM5qyi6aWu6L6+5pem77yM5aSn6YaJ77yM5L2c5q2k56+H77yM5YW85oCA5a2Q55Sx44CC5piO5pyI5Yeg5pe25pyJ77yf5oqK6YWS6Zeu6Z2S5aSp44CC5LiN55+l5aSp5LiK5a6r6ZiZ77yM5LuK5aSV5piv5L2V5bm044CC5oiR5qyy5LmY6aOO5b2S5Y6777yM5Y+I5oGQ55C85qW8546J5a6H77yM6auY5aSE5LiN6IOc5a+S44CC6LW36Iie5byE5riF5b2x77yM5L2V5Ly85Zyo5Lq66Ze0",
  598. writeFileEncoding: "base64",
  599. readFileEncoding: "utf-8",
  600. })
  601. await btnWriteFileButton.tap()
  602. await isDone()
  603. await btnReadFileButton.tap()
  604. await isDone()
  605. readFileRet = await page.data('readFileRet')
  606. expect(readFileRet).toEqual(
  607. "丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间")
  608. await page.setData({
  609. readFileEncoding: "base64",
  610. })
  611. await btnReadFileButton.tap()
  612. await isDone()
  613. readFileRet = await page.data('readFileRet')
  614. expect(readFileRet).toEqual(
  615. "5LiZ6L6w5Lit56eL77yM5qyi6aWu6L6+5pem77yM5aSn6YaJ77yM5L2c5q2k56+H77yM5YW85oCA5a2Q55Sx44CC5piO5pyI5Yeg5pe25pyJ77yf5oqK6YWS6Zeu6Z2S5aSp44CC5LiN55+l5aSp5LiK5a6r6ZiZ77yM5LuK5aSV5piv5L2V5bm044CC5oiR5qyy5LmY6aOO5b2S5Y6777yM5Y+I5oGQ55C85qW8546J5a6H77yM6auY5aSE5LiN6IOc5a+S44CC6LW36Iie5byE5riF5b2x77yM5L2V5Ly85Zyo5Lq66Ze0"
  616. )
  617. });
  618. it('stat and asset test', async () => {
  619. // 测试 USER_DATA_PATH //globalTempPath
  620. let globalRootPath = await page.data('globalRootPath')
  621. await page.setData({
  622. logAble: false,
  623. recursiveVal: true,
  624. copyToBasePath: globalRootPath,
  625. basePath: globalRootPath,
  626. globalTempPath: globalRootPath,
  627. rmDirFile: 'a',
  628. mkdirFile: 'a',
  629. readDir: 'a',
  630. unlinkFile: 'a/1.txt',
  631. })
  632. // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败
  633. const btnUnLinkFileButton = await page.$('#btn-unlink-file')
  634. await btnUnLinkFileButton.tap()
  635. await isDone()
  636. await page.setData({
  637. unlinkFile: 'a/2.txt',
  638. })
  639. await btnUnLinkFileButton.tap()
  640. await isDone()
  641. await page.setData({
  642. unlinkFile: 'a/m/3.txt',
  643. })
  644. await btnUnLinkFileButton.tap()
  645. await isDone()
  646. // // 清除文件夹
  647. const btnRmDirButton = await page.$('#btn-remove-dir')
  648. await btnRmDirButton.tap()
  649. await isDone()
  650. // 重新创建测试目录
  651. const btnMkdDirButton = await page.$('#btn-mkdir')
  652. await btnMkdDirButton.tap()
  653. await isDone()
  654. const btnReadDirButton = await page.$('#btn-read-dir')
  655. await btnReadDirButton.tap()
  656. await isDone()
  657. // 期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录
  658. let fileListComplete = await page.data('fileListComplete')
  659. expect(JSON.stringify(fileListComplete)).toEqual('[]')
  660. let fileListSuccess = await page.data('fileListSuccess')
  661. expect(JSON.stringify(fileListSuccess)).toEqual('[]')
  662. // 写入一个文件
  663. await page.setData({
  664. writeFileContent: "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦",
  665. writeFileEncoding: "utf-8",
  666. writeFile: 'a/1.txt',
  667. recursiveVal: false,
  668. statFile: 'a/1.txt',
  669. })
  670. let lastFailError = await page.data('lastFailError')
  671. console.log(lastFailError)
  672. const btnWriteFileButton = await page.$('#btn-write-file')
  673. await btnWriteFileButton.tap()
  674. await isDone()
  675. let btnStatFileButton = await page.$('#btn-stat-file')
  676. await btnStatFileButton.tap()
  677. await isDone()
  678. // 读取单个文件信息
  679. let statsRet = await page.data('statsRet')
  680. expect(statsRet.length).toEqual(1)
  681. expect(statsRet[0].path).toEqual('')
  682. if (!isIOS) {
  683. expect(statsRet[0].stats.size).toEqual(69)
  684. }
  685. if (isApp) {
  686. // 写入一个文件
  687. await page.setData({
  688. statsRet: ''
  689. })
  690. btnStatFileButton = await page.$('#btn-stat-file-sync')
  691. await btnStatFileButton.tap()
  692. await isDone()
  693. // 读取单个文件信息
  694. statsRet = await page.data('statsRet')
  695. expect(statsRet.length).toEqual(1)
  696. expect(statsRet[0].path).toEqual('')
  697. if (!isIOS) {
  698. expect(statsRet[0].stats.size).toEqual(69)
  699. }
  700. }
  701. /**
  702. * 创建子目录和子目录文件,测试recursive参数
  703. */
  704. await page.setData({
  705. writeFileContent: "1234567890",
  706. writeFileEncoding: "ascii",
  707. writeFile: 'a/2.txt',
  708. basePath: globalRootPath,
  709. recursiveVal: false,
  710. statFile: 'a',
  711. mkdirFile: 'a/m',
  712. })
  713. await btnWriteFileButton.tap()
  714. await isDone()
  715. // 创建子目录
  716. await btnMkdDirButton.tap()
  717. await isDone()
  718. // 复制一份文件到 /a/m/3.txt
  719. await page.setData({
  720. // asset 只能正式版测试,这里只能模拟返回路径
  721. basePath: '/',
  722. copyFromFile: 'static/test-image/logo.ico',
  723. copyToFile: 'a/m/3.txt',
  724. })
  725. const btnCopyFileButton = await page.$('#btn-copy-file')
  726. await btnCopyFileButton.tap()
  727. await isDone()
  728. await page.setData({
  729. basePath: globalRootPath,
  730. recursiveVal: true,
  731. statFile: 'a',
  732. })
  733. await btnStatFileButton.tap()
  734. await isDone()
  735. // 读取全部文件信息
  736. statsRet = await page.data('statsRet')
  737. statsRet.sort(function(a, b) {
  738. if (a.path > b.path) {
  739. return 1
  740. } else if (a.path < b.path) {
  741. return -1
  742. }
  743. return 0
  744. })
  745. expect(statsRet.length).toEqual(5)
  746. const expectedPaths = ['/', '/m', '/1.txt', '/2.txt', '/m/3.txt']
  747. const pathsInResult = statsRet.map(item => item.path)
  748. for (const expectedPath of expectedPaths) {
  749. expect(pathsInResult).toContainEqual(expect.stringMatching(new RegExp(expectedPath)))
  750. }
  751. // 额外校验 size
  752. const findItem = (path) => statsRet.find(item => item.path.includes(path))
  753. const item2 = findItem('/2.txt')
  754. expect(item2).toBeTruthy()
  755. if (!isIOS && item2) {
  756. expect(item2.stats.size).toEqual(10)
  757. }
  758. const item3 = findItem('/m/3.txt')
  759. expect(item3).toBeTruthy()
  760. if (!isIOS && item3) {
  761. expect(item3.stats.size).toEqual(4286)
  762. }
  763. // 清理文件,避免影响其他测试用例
  764. await page.setData({
  765. unlinkFile: 'a/1.txt',
  766. })
  767. await btnUnLinkFileButton.tap()
  768. await isDone()
  769. await page.setData({
  770. unlinkFile: 'a/2.txt',
  771. })
  772. await btnUnLinkFileButton.tap()
  773. await isDone()
  774. await page.setData({
  775. unlinkFile: 'a/m/3.txt',
  776. rmDirFile: 'a',
  777. readDir: 'a',
  778. recursiveVal: true,
  779. })
  780. await btnUnLinkFileButton.tap()
  781. await isDone()
  782. await btnRmDirButton.tap()
  783. await isDone()
  784. await btnReadDirButton.tap()
  785. await isDone()
  786. lastFailError = await page.data('lastFailError')
  787. expect(lastFailError.errCode).toEqual(1300002)
  788. fileListSuccess = await page.data('fileListSuccess')
  789. expect(JSON.stringify(fileListSuccess)).toEqual('[]')
  790. });
  791. async function createFile() {
  792. // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 目录
  793. const btnMkdDirButton = await page.$('#btn-mkdir-sync')
  794. await btnMkdDirButton.tap()
  795. await isDone()
  796. // 先用utf-8 写入内容
  797. const btnWriteFileButton = await page.$('#btn-write-file-sync')
  798. await btnWriteFileButton.tap()
  799. await isDone()
  800. }
  801. async function clearDir(dir) {
  802. // 最后需要清楚所有文件避免测试失败
  803. await page.setData({
  804. rmDirFile: dir,
  805. })
  806. const btnUnLinkFileButton = await page.$('#btn-clear-file')
  807. await btnUnLinkFileButton.tap()
  808. await isDone()
  809. const btnClear = await page.$('#btn-remove-dir')
  810. await btnClear.tap()
  811. await isDone()
  812. }
  813. if (isApp) {
  814. it('appendFileTest', async () => {
  815. await page.setData({
  816. basePath: mBasePath,
  817. recursiveVal: true,
  818. logAble: false,
  819. rmDirFile: 'appendfile',
  820. mkdirFile: 'appendfile',
  821. writeFileContent: "我爱北京天安门,天安门前太阳升",
  822. appendFileContent: "再说一遍",
  823. writeFileEncoding: "utf-8",
  824. readFileEncoding: "utf-8",
  825. readFile: 'appendfile/appendfile.txt',
  826. unlinkFile: 'appendfile/appendfile.txt',
  827. writeFile: 'appendfile/appendfile.txt',
  828. })
  829. // 先清除文件,需要清除全部可能存在的历史测试文件,避免运行失败
  830. const btnUnLinkFileButton = await page.$('#btn-unlink-file')
  831. await btnUnLinkFileButton.tap()
  832. await isDone()
  833. // 清除文件夹
  834. const btnRmDirButton = await page.$('#btn-remove-dir')
  835. await btnRmDirButton.tap()
  836. await isDone()
  837. // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 /a 目录
  838. const btnMkdDirButton = await page.$('#btn-mkdir')
  839. await btnMkdDirButton.tap()
  840. await isDone()
  841. // 先用utf-8 写入内容
  842. const btnWriteFileButton = await page.$('#btn-write-file')
  843. await btnWriteFileButton.tap()
  844. await isDone()
  845. //追加内容
  846. const btnAppendFileButton = await page.$('#btn-append-file')
  847. await btnAppendFileButton.tap()
  848. await isDone()
  849. const btnReadFileButton = await page.$('#btn-read-file')
  850. await btnReadFileButton.tap()
  851. await isDone()
  852. let readFileRet = await page.data('readFileRet')
  853. expect(readFileRet).toEqual("我爱北京天安门,天安门前太阳升再说一遍")
  854. });
  855. //nlinkSyncTest mkdirSyncTest appendFileTest writeFileSyncTest readFileSyncTest rmdirSyncTest readDirSyncTest accessFileSyncTest
  856. //renameFileSync copyFileSyncTest appendFileSyncTest truncateFileTest truncateFileSyncTest
  857. it('sync test', async () => {
  858. await page.setData({
  859. basePath: mBasePath,
  860. recursiveVal: false,
  861. logAble: false,
  862. rmDirFile: 'sync',
  863. mkdirFile: 'sync',
  864. writeFileContent: "我爱北京天安门,天安门前太阳升",
  865. appendFileContent: "再说一遍",
  866. writeFileEncoding: "utf-8",
  867. readFileEncoding: "utf-8",
  868. readDir: 'sync',
  869. rmDirFile: 'sync',
  870. unlinkFile: 'sync/sync.txt',
  871. readFile: 'sync/sync.txt',
  872. writeFile: 'sync/sync.txt',
  873. accessFile: 'sync/sync.txt',
  874. renameToFile: 'sync/sync.txt',
  875. renameFromFile: 'sync/sync.txt',
  876. })
  877. await clearDir('sync')
  878. // 重新创建测试目录,期望通过 recursive = true的 文件夹删除,得到一个空的 目录
  879. const btnMkdDirButton = await page.$('#btn-mkdir-sync')
  880. await btnMkdDirButton.tap()
  881. await isDone()
  882. const btnReadDirButton = await page.$('#btn-read-dir-sync')
  883. await btnReadDirButton.tap()
  884. await isDone()
  885. const fileListSuccess = await page.data('fileListSuccess')
  886. expect(JSON.stringify(fileListSuccess)).toEqual('[]')
  887. // 先用utf-8 写入内容
  888. const btnWriteFileButton = await page.$('#btn-write-file-sync')
  889. await btnWriteFileButton.tap()
  890. await isDone()
  891. let btnAccessFileButton = await page.$('#btn-access-file-sync')
  892. await btnAccessFileButton.tap()
  893. await isDone()
  894. let accessFileRet = await page.data("accessFileRet")
  895. expect(accessFileRet).toEqual('access:ok')
  896. //重新命名文件
  897. const btnRenameFileButton = await page.$('#btn-rename-file-sync')
  898. await btnRenameFileButton.tap()
  899. await isDone()
  900. let renameFileRet = await page.data("renameFileRet")
  901. expect(renameFileRet).toEqual("rename:ok")
  902. //追加内容
  903. let btnAppendFileButton = await page.$('#btn-append-file')
  904. await btnAppendFileButton.tap()
  905. await isDone()
  906. btnAppendFileButton = await page.$('#btn-append-file-sync')
  907. await btnAppendFileButton.tap()
  908. let btnReadFileButton = await page.$('#btn-read-file-sync')
  909. await btnReadFileButton.tap()
  910. await isDone()
  911. readFileRet = await page.data('readFileRet')
  912. expect(readFileRet).toEqual("我爱北京天安门,天安门前太阳升再说一遍再说一遍")
  913. //truncateFileTest
  914. let btnTruncateFile = await page.$('#btn-truncate-file')
  915. await btnTruncateFile.tap()
  916. await isDone()
  917. btnReadFileButton = await page.$('#btn-read-file-sync')
  918. await btnReadFileButton.tap()
  919. await isDone()
  920. readFileRet = await page.data('readFileRet')
  921. expect(readFileRet).toEqual("我爱")
  922. btnTruncateFile = await page.$('#btn-truncate-file-sync')
  923. await btnTruncateFile.tap()
  924. await isDone()
  925. btnReadFileButton = await page.$('#btn-read-file-sync')
  926. await btnReadFileButton.tap()
  927. await isDone()
  928. readFileRet = await page.data('readFileRet')
  929. expect(readFileRet).toEqual("我")
  930. // 测试 copyfile
  931. await page.setData({
  932. basePath: mBasePath,
  933. copyToBasePath: mBasePath,
  934. copyFromFile: "sync/sync.txt",
  935. copyToFile: "sync/syncto.txt",
  936. accessFile: "sync/syncto.txt"
  937. })
  938. const btnCopyFileButton = await page.$('#btn-copy-file-sync')
  939. await btnCopyFileButton.tap()
  940. await isDone()
  941. btnAccessFileButton = await page.$('#btn-access-file-sync')
  942. await btnAccessFileButton.tap()
  943. await isDone()
  944. accessFileRet = await page.data("accessFileRet")
  945. expect(accessFileRet).toEqual('access:ok')
  946. await clearDir('sync')
  947. });
  948. it('removeSavedFileTest', async () => {
  949. await page.setData({
  950. logAble: false,
  951. basePath: mBasePath
  952. })
  953. await clearDir('save4')
  954. await page.setData({
  955. logAble: false,
  956. basePath: mGlobalTempPath,
  957. temFile: 'save4/saveSync.txt',
  958. mkdirFile: 'save4',
  959. writeFile: 'save4/saveSync.txt',
  960. accessFile: 'saveSync.txt'
  961. })
  962. await createFile()
  963. let btnRemoveSavedFileRet = await page.$('#btn-remove-saved-file')
  964. await btnRemoveSavedFileRet.tap()
  965. await isDone()
  966. let removeSavedFileRet = await page.data("removeSavedFileRet")
  967. expect(removeSavedFileRet).toEqual('removeSavedFile:ok')
  968. });
  969. //openFiletest openFileSynctest closeTest closeTestSync writeTest writeSyncTest
  970. it('openFiletest', async () => {
  971. await page.setData({
  972. basePath: mBasePath,
  973. logAble: false,
  974. mkdirFile: 'fd',
  975. writeFile: 'fd/1.txt',
  976. readFile: 'fd/1.txt'
  977. })
  978. await clearDir('fd')
  979. await createFile()
  980. console.log('openFiletest', '2')
  981. //openFiletest
  982. let btnOpenFile = await page.$('#btn-open-file')
  983. await btnOpenFile.tap()
  984. await isDone()
  985. let fd = await page.data("fd")
  986. expect(fd).not.toBe('');
  987. await page.setData({
  988. fd: '',
  989. })
  990. console.log('openFiletest', '3')
  991. //openFileSynctest
  992. btnOpenFile = await page.$('#btn-open-file-sync')
  993. await btnOpenFile.tap()
  994. await isDone()
  995. fd = await page.data("fd")
  996. expect(fd).not.toBe('');
  997. console.log('openFiletest', '4')
  998. });
  999. // closeTest closeTestSync
  1000. it('closeTest', async () => {
  1001. await page.setData({
  1002. basePath: mBasePath,
  1003. logAble: false,
  1004. mkdirFile: 'fd',
  1005. writeFile: 'fd/1.txt',
  1006. readFile: 'fd/1.txt'
  1007. })
  1008. await clearDir('fd')
  1009. await createFile()
  1010. //closeTest
  1011. let btnCloseFile = await page.$('#btn-close-file')
  1012. await btnCloseFile.tap()
  1013. await isDone()
  1014. let closeFileRet = await page.data("closeFileRet")
  1015. expect(closeFileRet).toEqual('close:ok')
  1016. await page.setData({
  1017. closeFileRet: '',
  1018. })
  1019. //closeTestSync
  1020. btnCloseFile = await page.$('#btn-close-file-sync')
  1021. await btnCloseFile.tap()
  1022. await isDone()
  1023. closeFileRet = await page.data("closeFileRet")
  1024. expect(closeFileRet).toEqual('close:ok')
  1025. });
  1026. // writeTest writeSyncTest
  1027. it('writeTest', async () => {
  1028. console.log('writeTest', 'start')
  1029. await page.setData({
  1030. basePath: mBasePath,
  1031. logAble: false,
  1032. mkdirFile: 'fd',
  1033. writeFile: 'fd/1.txt',
  1034. readFile: 'fd/1.txt',
  1035. writeData: '我是一只小小鸟'
  1036. })
  1037. await clearDir('fd')
  1038. await createFile()
  1039. console.log('writeTest', '1')
  1040. let btnWrite = await page.$('#btn-write')
  1041. await btnWrite.tap()
  1042. await isDone()
  1043. let bytesWritten = await page.data("bytesWritten")
  1044. let lastFailError = await page.data("lastFailError")
  1045. if (bytesWritten != 21) {
  1046. let writeData = await page.data("writeData")
  1047. console.log('writeTest', lastFailError.errCode, lastFailError.errMsg, bytesWritten,
  1048. writeData)
  1049. }
  1050. expect(bytesWritten).toEqual(21)
  1051. console.log('writeTest', '2')
  1052. //writeSyncTest
  1053. await page.setData({
  1054. writeFile: 'fd/1.txt',
  1055. readFile: 'fd/1.txt',
  1056. writeData: '我是'
  1057. })
  1058. btnWrite = await page.$('#btn-write-sync')
  1059. await btnWrite.tap()
  1060. await isDone()
  1061. bytesWritten = await page.data("bytesWritten")
  1062. expect(bytesWritten).toEqual(6)
  1063. console.log('writeTest', '3')
  1064. //fstatTest
  1065. let btnFstat = await page.$('#btn-fstat-file')
  1066. await btnFstat.tap()
  1067. await isDone()
  1068. let fstatSize = await page.data("fstatSize")
  1069. expect(fstatSize > 0).toBe(true)
  1070. console.log('writeTest', '4')
  1071. //fstatSyncTest
  1072. btnFstat = await page.$('#btn-fstat-file-sync')
  1073. await btnFstat.tap()
  1074. await isDone()
  1075. fstatSize = await page.data("fstatSize")
  1076. expect(fstatSize > 0).toBe(true)
  1077. console.log('writeTest', '5')
  1078. //ftruncateFileTest
  1079. let btnFTruncateFile = await page.$('#btn-ftruncate-file')
  1080. await btnFTruncateFile.tap()
  1081. await isDone()
  1082. let ftruncateRet = await page.data("ftruncateRet")
  1083. expect(ftruncateRet).toEqual('ftruncate:ok')
  1084. await page.setData({
  1085. ftruncate: '',
  1086. })
  1087. console.log('writeTest', '6')
  1088. //ftruncateFileSyncTest
  1089. btnFTruncateFile = await page.$('#btn-ftruncate-file-sync')
  1090. await btnFTruncateFile.tap()
  1091. await isDone()
  1092. ftruncateRet = await page.data("ftruncateRet")
  1093. expect(ftruncateRet).toEqual('ftruncate:ok')
  1094. console.log('writeTest', '7')
  1095. });
  1096. //writeTest writeSyncTest
  1097. it('ftruncateFileTest', async () => {
  1098. await page.setData({
  1099. basePath: mBasePath,
  1100. logAble: false,
  1101. mkdirFile: 'fd',
  1102. writeFile: 'fd/1.txt',
  1103. readFile: 'fd/1.txt',
  1104. writeData: '我是一只小小鸟我是'
  1105. })
  1106. await clearDir('fd')
  1107. await createFile()
  1108. console.log('ftruncateFileTest', '1')
  1109. btnWrite = await page.$('#btn-write-sync')
  1110. await btnWrite.tap()
  1111. await isDone()
  1112. bytesWritten = await page.data("bytesWritten")
  1113. expect(bytesWritten).toEqual(27)
  1114. console.log('ftruncateFileTest', '3')
  1115. //ftruncateFileTest
  1116. let btnFTruncateFile = await page.$('#btn-ftruncate-file')
  1117. await btnFTruncateFile.tap()
  1118. await isDone()
  1119. let ftruncateRet = await page.data("ftruncateRet")
  1120. expect(ftruncateRet).toEqual('ftruncate:ok')
  1121. await page.setData({
  1122. ftruncate: '',
  1123. })
  1124. console.log('ftruncateFileTest', '6')
  1125. //ftruncateFileSyncTest
  1126. btnFTruncateFile = await page.$('#btn-ftruncate-file-sync')
  1127. await btnFTruncateFile.tap()
  1128. await isDone()
  1129. ftruncateRet = await page.data("ftruncateRet")
  1130. expect(ftruncateRet).toEqual('ftruncate:ok')
  1131. console.log('ftruncateFileTest', '7')
  1132. });
  1133. //testAppendFileBuffer
  1134. it('testAppendFileBuffer', async () => {
  1135. var btnWrite = await page.$('#btn-appendfile-buffer')
  1136. await btnWrite.tap()
  1137. await isDone()
  1138. let arrayBufferRes = await page.data("arrayBufferRes")
  1139. expect(arrayBufferRes).toEqual(21)
  1140. });
  1141. it('testAppendFileBufferSync', async () => {
  1142. var btnWrite = await page.$('#btn-appendfilesync-buffer')
  1143. await btnWrite.tap()
  1144. await isDone()
  1145. let arrayBufferRes = await page.data("arrayBufferRes")
  1146. expect(arrayBufferRes).toEqual(20)
  1147. });
  1148. it('testWriteReadSyncBuffer', async () => {
  1149. var btnWrite = await page.$('#btn-writereadsync-buffer')
  1150. await btnWrite.tap()
  1151. await isDone()
  1152. let arrayBufferRes = await page.data("arrayBufferRes")
  1153. expect(arrayBufferRes).toEqual(1.11)
  1154. });
  1155. it('testWriteReadBuffer', async () => {
  1156. var btnWrite = await page.$('#btn-writeread-buffer')
  1157. await btnWrite.tap()
  1158. await isDone()
  1159. let arrayBufferRes = await page.data("arrayBufferRes")
  1160. expect(arrayBufferRes).toEqual(1.24)
  1161. });
  1162. it('testWriteReadFileSyncBuffer', async () => {
  1163. var btnWrite = await page.$('#btn-writereadfilesync-buffer')
  1164. await btnWrite.tap()
  1165. await isDone()
  1166. let arrayBufferRes = await page.data("arrayBufferRes")
  1167. expect(arrayBufferRes).toEqual(1.333)
  1168. });
  1169. it('testReadFileBuffer', async () => {
  1170. var btnWrite = await page.$('#btn-writereadfile-buffer')
  1171. await btnWrite.tap()
  1172. await isDone()
  1173. let arrayBufferRes = await page.data("arrayBufferRes")
  1174. expect(arrayBufferRes).toEqual(1.2222222)
  1175. });
  1176. it('SavedFileTest', async () => {
  1177. await page.setData({
  1178. logAble: false,
  1179. basePath: mBasePath,
  1180. writeFile: 'a/1.txt',
  1181. temFile: 'a/1.txt',
  1182. accessFile: 'a/1.txt'
  1183. })
  1184. let saveFileFileButton = await page.$('#btn-save-file')
  1185. await saveFileFileButton.tap()
  1186. await isDone()
  1187. await page.waitFor(600);
  1188. let saveFileRet = await page.data('saveFileRet')
  1189. expect(saveFileRet).toEqual('unifile://cache/uni-store/1.txt')
  1190. let saveFileFileButton1 = await page.$('#btn-save-file1')
  1191. await saveFileFileButton1.tap()
  1192. await isDone()
  1193. await page.waitFor(600);
  1194. saveFileRet = await page.data('saveFileRet')
  1195. expect(saveFileRet).toEqual('unifile://usr/local/1.txt')
  1196. let saveFileFileButton2 = await page.$('#btn-save-file2')
  1197. await saveFileFileButton2.tap()
  1198. await isDone()
  1199. await page.waitFor(600);
  1200. saveFileRet = await page.data('saveFileRet')
  1201. expect(saveFileRet).toEqual('unifile://usr/local')
  1202. let saveFileFileButton3 = await page.$('#btn-save-file3')
  1203. await saveFileFileButton3.tap()
  1204. await isDone()
  1205. await page.waitFor(600);
  1206. saveFileRet = await page.data('saveFileRet')
  1207. expect(saveFileRet).toEqual('unifile://usr/local')
  1208. });
  1209. it('getSavedFileListTest', async () => {
  1210. // await page.setData({
  1211. // logAble: false,
  1212. // basePath: mBasePath
  1213. // })
  1214. // console.log('getSavedFileListTest', 'start')
  1215. // await clearDir('')
  1216. // console.log('getSavedFileListTest', 'end')
  1217. await page.setData({
  1218. logAble: false,
  1219. basePath: mGlobalTempPath,
  1220. temFile: 'save3/2.txt',
  1221. mkdirFile: 'save3',
  1222. writeFile: 'save3/2.txt',
  1223. accessFile: '2.txt'
  1224. })
  1225. await createFile()
  1226. await page.setData({
  1227. basePath: mBasePath,
  1228. writeFile: 'save/2.txt',
  1229. })
  1230. btnSaveFile = await page.$('#btn-save-file-sync')
  1231. await btnSaveFile.tap()
  1232. await isDone()
  1233. let btnSavedFileList = await page.$('#btn-getsaved-filelist')
  1234. await btnSavedFileList.tap()
  1235. await isDone()
  1236. let getSavedFileListRet = await page.data("getSavedFileListRet")
  1237. console.log('getSavedFileListTest->' + getSavedFileListRet)
  1238. expect(getSavedFileListRet).toEqual('getSavedFileList:ok')
  1239. });
  1240. }
  1241. if (isAndroid) {
  1242. it('testReadAssetFile', async () => {
  1243. await page.setData({
  1244. basePath: 'file:///android_asset/uni-app-x',
  1245. logAble: false,
  1246. readFileRet: "",
  1247. readFile: '/version.json'
  1248. })
  1249. let btnReadFileButton = await page.$('#btn-read-file-sync')
  1250. await btnReadFileButton.tap()
  1251. await isDone()
  1252. let readFileRet = await page.data('readFileRet')
  1253. expect(readFileRet.length > 0).toBe(true)
  1254. });
  1255. }
  1256. });