mirror of
https://github.com/denoland/deno.git
synced 2024-12-27 17:49:08 -05:00
feat: add emptyDir for fs modules (#263)
This commit is contained in:
parent
142a1c6cf8
commit
64d6bfca56
3 changed files with 170 additions and 0 deletions
52
fs/empty_dir.ts
Normal file
52
fs/empty_dir.ts
Normal file
|
@ -0,0 +1,52 @@
|
|||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||
/**
|
||||
* Ensures that a directory is empty.
|
||||
* Deletes directory contents if the directory is not empty.
|
||||
* If the directory does not exist, it is created.
|
||||
* The directory itself is not deleted.
|
||||
* @export
|
||||
* @param {string} dir
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
export async function emptyDir(dir: string): Promise<void> {
|
||||
let items: Deno.FileInfo[] = [];
|
||||
try {
|
||||
items = await Deno.readDir(dir);
|
||||
} catch {
|
||||
// if not exist. then create it
|
||||
await Deno.mkdir(dir, true);
|
||||
return;
|
||||
}
|
||||
while (items.length) {
|
||||
const item = items.shift();
|
||||
if (item && item.path) {
|
||||
await Deno.remove(item.path, { recursive: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that a directory is empty.
|
||||
* Deletes directory contents if the directory is not empty.
|
||||
* If the directory does not exist, it is created.
|
||||
* The directory itself is not deleted.
|
||||
* @export
|
||||
* @param {string} dir
|
||||
* @returns {void}
|
||||
*/
|
||||
export function emptyDirSync(dir: string): void {
|
||||
let items: Deno.FileInfo[] = [];
|
||||
try {
|
||||
items = Deno.readDirSync(dir);
|
||||
} catch {
|
||||
// if not exist. then create it
|
||||
Deno.mkdirSync(dir, true);
|
||||
return;
|
||||
}
|
||||
while (items.length) {
|
||||
const item = items.shift();
|
||||
if (item && item.path) {
|
||||
Deno.removeSync(item.path, { recursive: true });
|
||||
}
|
||||
}
|
||||
}
|
117
fs/empty_dir_test.ts
Normal file
117
fs/empty_dir_test.ts
Normal file
|
@ -0,0 +1,117 @@
|
|||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||
import { test } from "../testing/mod.ts";
|
||||
import { assertEquals, assertThrowsAsync } from "../testing/asserts.ts";
|
||||
import { emptyDir, emptyDirSync } from "./empty_dir.ts";
|
||||
import * as path from "./path/mod.ts";
|
||||
|
||||
const testdataDir = path.resolve("fs", "testdata");
|
||||
|
||||
test(async function emptyDirIfItNotExist() {
|
||||
const testDir = path.join(testdataDir, "empty_dir_test_1");
|
||||
const testNestDir = path.join(testDir, "nest");
|
||||
// empty a dir which not exist. then it will create new one
|
||||
await emptyDir(testNestDir);
|
||||
|
||||
try {
|
||||
// check the dir
|
||||
const stat = await Deno.stat(testNestDir);
|
||||
assertEquals(stat.isDirectory(), true);
|
||||
} finally {
|
||||
// remove the test dir
|
||||
Deno.remove(testDir, { recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
test(function emptyDirSyncIfItNotExist() {
|
||||
const testDir = path.join(testdataDir, "empty_dir_test_2");
|
||||
const testNestDir = path.join(testDir, "nest");
|
||||
// empty a dir which not exist. then it will create new one
|
||||
emptyDirSync(testNestDir);
|
||||
|
||||
try {
|
||||
// check the dir
|
||||
const stat = Deno.statSync(testNestDir);
|
||||
assertEquals(stat.isDirectory(), true);
|
||||
} finally {
|
||||
// remove the test dir
|
||||
Deno.remove(testDir, { recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
test(async function emptyDirIfItExist() {
|
||||
const testDir = path.join(testdataDir, "empty_dir_test_3");
|
||||
const testNestDir = path.join(testDir, "nest");
|
||||
// create test dir
|
||||
await emptyDir(testNestDir);
|
||||
const testDirFile = path.join(testNestDir, "test.ts");
|
||||
// create test file in test dir
|
||||
await Deno.writeFile(testDirFile, new Uint8Array());
|
||||
|
||||
// before empty: make sure file/directory exist
|
||||
const beforeFileStat = await Deno.stat(testDirFile);
|
||||
assertEquals(beforeFileStat.isFile(), true);
|
||||
|
||||
const beforeDirStat = await Deno.stat(testNestDir);
|
||||
assertEquals(beforeDirStat.isDirectory(), true);
|
||||
|
||||
await emptyDir(testDir);
|
||||
|
||||
// after empty: file/directory have already remove
|
||||
try {
|
||||
// test dir still there
|
||||
const stat = await Deno.stat(testDir);
|
||||
assertEquals(stat.isDirectory(), true);
|
||||
|
||||
// nest directory have been remove
|
||||
assertThrowsAsync(async () => {
|
||||
await Deno.stat(testNestDir);
|
||||
});
|
||||
|
||||
// test file have been remove
|
||||
assertThrowsAsync(async () => {
|
||||
await Deno.stat(testDirFile);
|
||||
});
|
||||
} finally {
|
||||
// remote test dir
|
||||
await Deno.remove(testDir, { recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
test(function emptyDirSyncIfItExist() {
|
||||
const testDir = path.join(testdataDir, "empty_dir_test_4");
|
||||
const testNestDir = path.join(testDir, "nest");
|
||||
// create test dir
|
||||
emptyDirSync(testNestDir);
|
||||
const testDirFile = path.join(testNestDir, "test.ts");
|
||||
// create test file in test dir
|
||||
Deno.writeFileSync(testDirFile, new Uint8Array());
|
||||
|
||||
// before empty: make sure file/directory exist
|
||||
const beforeFileStat = Deno.statSync(testDirFile);
|
||||
assertEquals(beforeFileStat.isFile(), true);
|
||||
|
||||
const beforeDirStat = Deno.statSync(testNestDir);
|
||||
assertEquals(beforeDirStat.isDirectory(), true);
|
||||
|
||||
emptyDirSync(testDir);
|
||||
|
||||
// after empty: file/directory have already remove
|
||||
try {
|
||||
// test dir still there
|
||||
const stat = Deno.statSync(testDir);
|
||||
assertEquals(stat.isDirectory(), true);
|
||||
|
||||
// nest directory have been remove
|
||||
assertThrowsAsync(async () => {
|
||||
Deno.statSync(testNestDir);
|
||||
});
|
||||
|
||||
// test file have been remove
|
||||
assertThrowsAsync(async () => {
|
||||
Deno.statSync(testDirFile);
|
||||
});
|
||||
} finally {
|
||||
// remote test dir
|
||||
Deno.removeSync(testDir, { recursive: true });
|
||||
}
|
||||
});
|
1
test.ts
1
test.ts
|
@ -15,6 +15,7 @@ import "./fs/walk_test.ts";
|
|||
import "./fs/globrex_test.ts";
|
||||
import "./fs/glob_test.ts";
|
||||
import "./fs/exists_test.ts";
|
||||
import "./fs/empty_dir_test.ts";
|
||||
import "./io/test.ts";
|
||||
import "./http/server_test.ts";
|
||||
import "./http/file_server_test.ts";
|
||||
|
|
Loading…
Reference in a new issue