diff options
author | Axetroy <axetroy.dev@gmail.com> | 2019-12-18 18:12:36 +0800 |
---|---|---|
committer | Ry Dahl <ry@tinyclouds.org> | 2019-12-18 05:12:36 -0500 |
commit | bb24fb74ffe0bb35649e0adbb1473458c8abf71f (patch) | |
tree | 4eaf1b19f5e505b2cad2ea2cda5ad28cb2104f35 /std/fs/empty_dir_test.ts | |
parent | 3115781e4316653ab3619e3d94bdbce01fca4ec2 (diff) |
fix permission errors are swallowed by fs.emptyDir (#3501)
Diffstat (limited to 'std/fs/empty_dir_test.ts')
-rw-r--r-- | std/fs/empty_dir_test.ts | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/std/fs/empty_dir_test.ts b/std/fs/empty_dir_test.ts index ac5b13476..d25461ce3 100644 --- a/std/fs/empty_dir_test.ts +++ b/std/fs/empty_dir_test.ts @@ -123,3 +123,116 @@ test(function emptyDirSyncIfItExist(): void { Deno.removeSync(testDir, { recursive: true }); } }); + +test(async function emptyDirPermission(): Promise<void> { + interface Scenes { + read: boolean; // --allow-read + write: boolean; // --allow-write + async: boolean; + output: string; + } + + const testfolder = path.join(testdataDir, "testfolder"); + + await Deno.mkdir(testfolder); + + await Deno.writeFile( + path.join(testfolder, "child.txt"), + new TextEncoder().encode("hello world") + ); + + const scenes: Scenes[] = [ + // 1 + { + read: false, + write: false, + async: true, + output: "run again with the --allow-read flag" + }, + { + read: false, + write: false, + async: false, + output: "run again with the --allow-read flag" + }, + // 2 + { + read: true, + write: false, + async: true, + output: "run again with the --allow-write flag" + }, + { + read: true, + write: false, + async: false, + output: "run again with the --allow-write flag" + }, + // 3 + { + read: false, + write: true, + async: true, + output: "run again with the --allow-read flag" + }, + { + read: false, + write: true, + async: false, + output: "run again with the --allow-read flag" + }, + // 4 + { + read: true, + write: true, + async: true, + output: "success" + }, + { + read: true, + write: true, + async: false, + output: "success" + } + ]; + + try { + for (const s of scenes) { + console.log( + `test ${s.async ? "emptyDir" : "emptyDirSync"}("testdata/testfolder") ${ + s.read ? "with" : "without" + } --allow-read & ${s.write ? "with" : "without"} --allow-write` + ); + + const args = [Deno.execPath(), "run"]; + + if (s.read) { + args.push("--allow-read"); + } + + if (s.write) { + args.push("--allow-write"); + } + + args.push( + path.join(testdataDir, s.async ? "empty_dir.ts" : "empty_dir_sync.ts") + ); + args.push("testfolder"); + + const { stdout } = Deno.run({ + stdout: "piped", + cwd: testdataDir, + args: args + }); + + const output = await Deno.readAll(stdout); + + assertEquals(new TextDecoder().decode(output), s.output); + } + } catch (err) { + await Deno.remove(testfolder, { recursive: true }); + throw err; + } + + // done +}); |