mirror of
https://github.com/denoland/deno.git
synced 2025-09-27 04:39:10 +00:00
Refactor and expand mkdir tests (#4579)
This commit is contained in:
parent
470681cd3c
commit
7a9273d9cf
2 changed files with 141 additions and 21 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue