summaryrefslogtreecommitdiff
path: root/cli/js/tests/mkdir_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/js/tests/mkdir_test.ts')
-rw-r--r--cli/js/tests/mkdir_test.ts155
1 files changed, 137 insertions, 18 deletions
diff --git a/cli/js/tests/mkdir_test.ts b/cli/js/tests/mkdir_test.ts
index d1b7aa49b..5823d6e38 100644
--- a/cli/js/tests/mkdir_test.ts
+++ b/cli/js/tests/mkdir_test.ts
@@ -1,13 +1,20 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-import { unitTest, assert, assertEquals } from "./test_util.ts";
+import { unitTest, assert, assertEquals, assertThrows } from "./test_util.ts";
+
+function assertDirectory(path: string, mode?: number): void {
+ const info = Deno.lstatSync(path);
+ assert(info.isDirectory());
+ if (Deno.build.os !== "win" && mode !== undefined) {
+ assertEquals(info.mode! & 0o777, mode & ~Deno.umask());
+ }
+}
unitTest(
{ perms: { read: true, write: true } },
function mkdirSyncSuccess(): void {
const path = Deno.makeTempDirSync() + "/dir";
Deno.mkdirSync(path);
- const pathInfo = Deno.statSync(path);
- assert(pathInfo.isDirectory());
+ assertDirectory(path);
}
);
@@ -16,10 +23,7 @@ unitTest(
function mkdirSyncMode(): void {
const path = Deno.makeTempDirSync() + "/dir";
Deno.mkdirSync(path, { mode: 0o737 });
- const pathInfo = Deno.statSync(path);
- if (Deno.build.os !== "win") {
- assertEquals(pathInfo.mode! & 0o777, 0o737 & ~Deno.umask());
- }
+ assertDirectory(path, 0o737);
}
);
@@ -39,8 +43,7 @@ unitTest(
async function mkdirSuccess(): Promise<void> {
const path = Deno.makeTempDirSync() + "/dir";
await Deno.mkdir(path);
- const pathInfo = Deno.statSync(path);
- assert(pathInfo.isDirectory());
+ assertDirectory(path);
}
);
@@ -49,14 +52,11 @@ unitTest(
async function mkdirMode(): Promise<void> {
const path = Deno.makeTempDirSync() + "/dir";
await Deno.mkdir(path, { mode: 0o737 });
- const pathInfo = Deno.statSync(path);
- if (Deno.build.os !== "win") {
- assertEquals(pathInfo.mode! & 0o777, 0o737 & ~Deno.umask());
- }
+ assertDirectory(path, 0o737);
}
);
-unitTest({ perms: { write: true } }, function mkdirErrIfExists(): void {
+unitTest({ perms: { write: true } }, function mkdirErrSyncIfExists(): void {
let err;
try {
Deno.mkdirSync(".");
@@ -66,13 +66,24 @@ unitTest({ perms: { write: true } }, function mkdirErrIfExists(): void {
assert(err instanceof Deno.errors.AlreadyExists);
});
+unitTest({ perms: { write: true } }, async function mkdirErrIfExists(): Promise<
+ void
+> {
+ let err;
+ try {
+ await Deno.mkdir(".");
+ } catch (e) {
+ err = e;
+ }
+ assert(err instanceof Deno.errors.AlreadyExists);
+});
+
unitTest(
{ perms: { read: true, write: true } },
function mkdirSyncRecursive(): void {
const path = Deno.makeTempDirSync() + "/nested/directory";
Deno.mkdirSync(path, { recursive: true });
- const pathInfo = Deno.statSync(path);
- assert(pathInfo.isDirectory());
+ assertDirectory(path);
}
);
@@ -81,7 +92,115 @@ unitTest(
async function mkdirRecursive(): Promise<void> {
const path = Deno.makeTempDirSync() + "/nested/directory";
await Deno.mkdir(path, { recursive: true });
- const pathInfo = Deno.statSync(path);
- assert(pathInfo.isDirectory());
+ assertDirectory(path);
+ }
+);
+
+unitTest(
+ { perms: { read: true, write: true } },
+ function mkdirSyncRecursiveMode(): void {
+ const nested = Deno.makeTempDirSync() + "/nested";
+ const path = nested + "/dir";
+ Deno.mkdirSync(path, { mode: 0o737, recursive: true });
+ assertDirectory(path, 0o737);
+ assertDirectory(nested, 0o737);
+ }
+);
+
+unitTest(
+ { perms: { read: true, write: true } },
+ async function mkdirRecursiveMode(): Promise<void> {
+ const nested = Deno.makeTempDirSync() + "/nested";
+ const path = nested + "/dir";
+ await Deno.mkdir(path, { mode: 0o737, recursive: true });
+ assertDirectory(path, 0o737);
+ assertDirectory(nested, 0o737);
+ }
+);
+
+unitTest(
+ { perms: { read: true, write: true } },
+ function mkdirSyncRecursiveIfExists(): void {
+ const path = Deno.makeTempDirSync() + "/dir";
+ Deno.mkdirSync(path, { mode: 0o737 });
+ Deno.mkdirSync(path, { recursive: true });
+ Deno.mkdirSync(path, { recursive: true, mode: 0o731 });
+ assertDirectory(path, 0o737);
+ if (Deno.build.os != "win") {
+ const pathLink = path + "Link";
+ Deno.symlinkSync(path, pathLink);
+ Deno.mkdirSync(pathLink, { recursive: true });
+ Deno.mkdirSync(pathLink, { recursive: true, mode: 0o731 });
+ assertDirectory(path, 0o737);
+ }
+ }
+);
+
+unitTest(
+ { perms: { read: true, write: true } },
+ async function mkdirRecursiveIfExists(): Promise<void> {
+ const path = Deno.makeTempDirSync() + "/dir";
+ await Deno.mkdir(path, { mode: 0o737 });
+ await Deno.mkdir(path, { recursive: true });
+ await Deno.mkdir(path, { recursive: true, mode: 0o731 });
+ assertDirectory(path, 0o737);
+ if (Deno.build.os != "win") {
+ const pathLink = path + "Link";
+ Deno.symlinkSync(path, pathLink);
+ await Deno.mkdir(pathLink, { recursive: true });
+ await Deno.mkdir(pathLink, { recursive: true, mode: 0o731 });
+ assertDirectory(path, 0o737);
+ }
+ }
+);
+
+unitTest(
+ { perms: { read: true, write: true } },
+ function mkdirSyncErrors(): void {
+ const testDir = Deno.makeTempDirSync();
+ const emptydir = testDir + "/empty";
+ const fulldir = testDir + "/dir";
+ const file = fulldir + "/file";
+ Deno.mkdirSync(emptydir);
+ Deno.mkdirSync(fulldir);
+ Deno.createSync(file).close();
+
+ assertThrows((): void => {
+ Deno.mkdirSync(emptydir, { recursive: false });
+ }, Deno.errors.AlreadyExists);
+ assertThrows((): void => {
+ Deno.mkdirSync(fulldir, { recursive: false });
+ }, Deno.errors.AlreadyExists);
+ assertThrows((): void => {
+ Deno.mkdirSync(file, { recursive: false });
+ }, Deno.errors.AlreadyExists);
+ assertThrows((): void => {
+ Deno.mkdirSync(file, { recursive: true });
+ }, Deno.errors.AlreadyExists);
+
+ if (Deno.build.os !== "win") {
+ const fileLink = testDir + "/fileLink";
+ const dirLink = testDir + "/dirLink";
+ const danglingLink = testDir + "/danglingLink";
+ Deno.symlinkSync(file, fileLink);
+ Deno.symlinkSync(emptydir, dirLink);
+ Deno.symlinkSync(testDir + "/nonexistent", danglingLink);
+
+ assertThrows((): void => {
+ Deno.mkdirSync(dirLink, { recursive: false });
+ }, Deno.errors.AlreadyExists);
+ assertThrows((): void => {
+ Deno.mkdirSync(fileLink, { recursive: false });
+ }, Deno.errors.AlreadyExists);
+ assertThrows((): void => {
+ Deno.mkdirSync(fileLink, { recursive: true });
+ }, Deno.errors.AlreadyExists);
+ assertThrows((): void => {
+ Deno.mkdirSync(danglingLink, { recursive: false });
+ }, Deno.errors.AlreadyExists);
+ assertThrows((): void => {
+ Deno.mkdirSync(danglingLink, { recursive: true });
+ }, Deno.errors.AlreadyExists);
+ }
}
);