summaryrefslogtreecommitdiff
path: root/js/remove_test.ts
diff options
context:
space:
mode:
authorKevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com>2018-09-10 20:40:03 -0700
committerRyan Dahl <ry@tinyclouds.org>2018-09-12 10:24:17 -0400
commit1ffae651655746b95dd40207d91ba7c360b90c40 (patch)
tree4e37fafa7f712fc25b59f67de1faeb9b7190dafa /js/remove_test.ts
parent7c50c11f40556240a3693662e2cbae6da3090b89 (diff)
Add remove(), removeAll().
and removeSync(), removeAllSync().
Diffstat (limited to 'js/remove_test.ts')
-rw-r--r--js/remove_test.ts336
1 files changed, 336 insertions, 0 deletions
diff --git a/js/remove_test.ts b/js/remove_test.ts
new file mode 100644
index 000000000..eb31f1ba3
--- /dev/null
+++ b/js/remove_test.ts
@@ -0,0 +1,336 @@
+// Copyright 2018 the Deno authors. All rights reserved. MIT license.
+import { testPerm, assert, assertEqual } from "./test_util.ts";
+import * as deno from "deno";
+
+// SYNC
+
+testPerm({ write: true }, function removeSyncDirSuccess() {
+ // REMOVE EMPTY DIRECTORY
+ const path = deno.makeTempDirSync() + "/dir/subdir";
+ deno.mkdirSync(path);
+ const pathInfo = deno.statSync(path);
+ assert(pathInfo.isDirectory()); // check exist first
+ deno.removeSync(path); // remove
+ // We then check again after remove
+ let err;
+ try {
+ deno.statSync(path);
+ } catch (e) {
+ err = e;
+ }
+ // Directory is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: true }, function removeSyncFileSuccess() {
+ // REMOVE FILE
+ const enc = new TextEncoder();
+ const data = enc.encode("Hello");
+ const filename = deno.makeTempDirSync() + "/test.txt";
+ deno.writeFileSync(filename, data, 0o666);
+ const fileInfo = deno.statSync(filename);
+ assert(fileInfo.isFile()); // check exist first
+ deno.removeSync(filename); // remove
+ // We then check again after remove
+ let err;
+ try {
+ deno.statSync(filename);
+ } catch (e) {
+ err = e;
+ }
+ // File is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: true }, function removeSyncFail() {
+ // NON-EMPTY DIRECTORY
+ const path = deno.makeTempDirSync() + "/dir/subdir";
+ const subPath = path + "/subsubdir";
+ deno.mkdirSync(path);
+ deno.mkdirSync(subPath);
+ const pathInfo = deno.statSync(path);
+ assert(pathInfo.isDirectory()); // check exist first
+ const subPathInfo = deno.statSync(subPath);
+ assert(subPathInfo.isDirectory()); // check exist first
+ let err;
+ try {
+ // Should not be able to recursively remove
+ deno.removeSync(path);
+ } catch (e) {
+ err = e;
+ }
+ // TODO(ry) Is Other really the error we should get here? What would Go do?
+ assertEqual(err.kind, deno.ErrorKind.Other);
+ assertEqual(err.name, "Other");
+ // NON-EXISTENT DIRECTORY/FILE
+ try {
+ // Non-existent
+ deno.removeSync("/baddir");
+ } catch (e) {
+ err = e;
+ }
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: false }, function removeSyncPerm() {
+ let err;
+ try {
+ deno.removeSync("/baddir");
+ } catch (e) {
+ err = e;
+ }
+ assertEqual(err.kind, deno.ErrorKind.PermissionDenied);
+ assertEqual(err.name, "PermissionDenied");
+});
+
+testPerm({ write: true }, function removeAllSyncDirSuccess() {
+ // REMOVE EMPTY DIRECTORY
+ let path = deno.makeTempDirSync() + "/dir/subdir";
+ deno.mkdirSync(path);
+ let pathInfo = deno.statSync(path);
+ assert(pathInfo.isDirectory()); // check exist first
+ deno.removeAllSync(path); // remove
+ // We then check again after remove
+ let err;
+ try {
+ deno.statSync(path);
+ } catch (e) {
+ err = e;
+ }
+ // Directory is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+ // REMOVE NON-EMPTY DIRECTORY
+ path = deno.makeTempDirSync() + "/dir/subdir";
+ const subPath = path + "/subsubdir";
+ deno.mkdirSync(path);
+ deno.mkdirSync(subPath);
+ pathInfo = deno.statSync(path);
+ assert(pathInfo.isDirectory()); // check exist first
+ const subPathInfo = deno.statSync(subPath);
+ assert(subPathInfo.isDirectory()); // check exist first
+ deno.removeAllSync(path); // remove
+ // We then check parent directory again after remove
+ try {
+ deno.statSync(path);
+ } catch (e) {
+ err = e;
+ }
+ // Directory is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: true }, function removeAllSyncFileSuccess() {
+ // REMOVE FILE
+ const enc = new TextEncoder();
+ const data = enc.encode("Hello");
+ const filename = deno.makeTempDirSync() + "/test.txt";
+ deno.writeFileSync(filename, data, 0o666);
+ const fileInfo = deno.statSync(filename);
+ assert(fileInfo.isFile()); // check exist first
+ deno.removeAllSync(filename); // remove
+ // We then check again after remove
+ let err;
+ try {
+ deno.statSync(filename);
+ } catch (e) {
+ err = e;
+ }
+ // File is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: true }, function removeAllSyncFail() {
+ // NON-EXISTENT DIRECTORY/FILE
+ let err;
+ try {
+ // Non-existent
+ deno.removeAllSync("/baddir");
+ } catch (e) {
+ err = e;
+ }
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: false }, function removeAllSyncPerm() {
+ let err;
+ try {
+ deno.removeAllSync("/baddir");
+ } catch (e) {
+ err = e;
+ }
+ assertEqual(err.kind, deno.ErrorKind.PermissionDenied);
+ assertEqual(err.name, "PermissionDenied");
+});
+
+// ASYNC
+
+testPerm({ write: true }, async function removeDirSuccess() {
+ // REMOVE EMPTY DIRECTORY
+ const path = deno.makeTempDirSync() + "/dir/subdir";
+ deno.mkdirSync(path);
+ const pathInfo = deno.statSync(path);
+ assert(pathInfo.isDirectory()); // check exist first
+ await deno.remove(path); // remove
+ // We then check again after remove
+ let err;
+ try {
+ deno.statSync(path);
+ } catch (e) {
+ err = e;
+ }
+ // Directory is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: true }, async function removeFileSuccess() {
+ // REMOVE FILE
+ const enc = new TextEncoder();
+ const data = enc.encode("Hello");
+ const filename = deno.makeTempDirSync() + "/test.txt";
+ deno.writeFileSync(filename, data, 0o666);
+ const fileInfo = deno.statSync(filename);
+ assert(fileInfo.isFile()); // check exist first
+ await deno.remove(filename); // remove
+ // We then check again after remove
+ let err;
+ try {
+ deno.statSync(filename);
+ } catch (e) {
+ err = e;
+ }
+ // File is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: true }, async function removeFail() {
+ // NON-EMPTY DIRECTORY
+ const path = deno.makeTempDirSync() + "/dir/subdir";
+ const subPath = path + "/subsubdir";
+ deno.mkdirSync(path);
+ deno.mkdirSync(subPath);
+ const pathInfo = deno.statSync(path);
+ assert(pathInfo.isDirectory()); // check exist first
+ const subPathInfo = deno.statSync(subPath);
+ assert(subPathInfo.isDirectory()); // check exist first
+ let err;
+ try {
+ // Should not be able to recursively remove
+ await deno.remove(path);
+ } catch (e) {
+ err = e;
+ }
+ assertEqual(err.kind, deno.ErrorKind.Other);
+ assertEqual(err.name, "Other");
+ // NON-EXISTENT DIRECTORY/FILE
+ try {
+ // Non-existent
+ await deno.remove("/baddir");
+ } catch (e) {
+ err = e;
+ }
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: false }, async function removePerm() {
+ let err;
+ try {
+ await deno.remove("/baddir");
+ } catch (e) {
+ err = e;
+ }
+ assertEqual(err.kind, deno.ErrorKind.PermissionDenied);
+ assertEqual(err.name, "PermissionDenied");
+});
+
+testPerm({ write: true }, async function removeAllDirSuccess() {
+ // REMOVE EMPTY DIRECTORY
+ let path = deno.makeTempDirSync() + "/dir/subdir";
+ deno.mkdirSync(path);
+ let pathInfo = deno.statSync(path);
+ assert(pathInfo.isDirectory()); // check exist first
+ await deno.removeAll(path); // remove
+ // We then check again after remove
+ let err;
+ try {
+ deno.statSync(path);
+ } catch (e) {
+ err = e;
+ }
+ // Directory is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+ // REMOVE NON-EMPTY DIRECTORY
+ path = deno.makeTempDirSync() + "/dir/subdir";
+ const subPath = path + "/subsubdir";
+ deno.mkdirSync(path);
+ deno.mkdirSync(subPath);
+ pathInfo = deno.statSync(path);
+ assert(pathInfo.isDirectory()); // check exist first
+ const subPathInfo = deno.statSync(subPath);
+ assert(subPathInfo.isDirectory()); // check exist first
+ await deno.removeAll(path); // remove
+ // We then check parent directory again after remove
+ try {
+ deno.statSync(path);
+ } catch (e) {
+ err = e;
+ }
+ // Directory is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: true }, async function removeAllFileSuccess() {
+ // REMOVE FILE
+ const enc = new TextEncoder();
+ const data = enc.encode("Hello");
+ const filename = deno.makeTempDirSync() + "/test.txt";
+ deno.writeFileSync(filename, data, 0o666);
+ const fileInfo = deno.statSync(filename);
+ assert(fileInfo.isFile()); // check exist first
+ await deno.removeAll(filename); // remove
+ // We then check again after remove
+ let err;
+ try {
+ deno.statSync(filename);
+ } catch (e) {
+ err = e;
+ }
+ // File is gone
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: true }, async function removeAllFail() {
+ // NON-EXISTENT DIRECTORY/FILE
+ let err;
+ try {
+ // Non-existent
+ await deno.removeAll("/baddir");
+ } catch (e) {
+ err = e;
+ }
+ assertEqual(err.kind, deno.ErrorKind.NotFound);
+ assertEqual(err.name, "NotFound");
+});
+
+testPerm({ write: false }, async function removeAllPerm() {
+ let err;
+ try {
+ await deno.removeAll("/baddir");
+ } catch (e) {
+ err = e;
+ }
+ assertEqual(err.kind, deno.ErrorKind.PermissionDenied);
+ assertEqual(err.name, "PermissionDenied");
+});