From 60cd7695ef2c3769aeaf9391a2dddc6c31a9e2f5 Mon Sep 17 00:00:00 2001 From: Ross Weir <29697678+ross-weir@users.noreply.github.com> Date: Tue, 27 Oct 2020 23:21:32 +1100 Subject: [PATCH] fix(cli): handle URL paths in Deno.mkdir() (#8140) --- cli/rt/30_fs.js | 2 +- cli/tests/unit/mkdir_test.ts | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/cli/rt/30_fs.js b/cli/rt/30_fs.js index 7faa2c392e..7c7d81c3b6 100644 --- a/cli/rt/30_fs.js +++ b/cli/rt/30_fs.js @@ -77,7 +77,7 @@ } function mkdirArgs(path, options) { - const args = { path, recursive: false }; + const args = { path: pathFromURL(path), recursive: false }; if (options != null) { if (typeof options.recursive == "boolean") { args.recursive = options.recursive; diff --git a/cli/tests/unit/mkdir_test.ts b/cli/tests/unit/mkdir_test.ts index 9ab6dc4d2b..f2fe168e6d 100644 --- a/cli/tests/unit/mkdir_test.ts +++ b/cli/tests/unit/mkdir_test.ts @@ -4,6 +4,7 @@ import { assertEquals, assertThrows, assertThrowsAsync, + pathToAbsoluteFileUrl, unitTest, } from "./test_util.ts"; @@ -197,3 +198,33 @@ unitTest( } }, ); + +unitTest( + { perms: { read: true, write: true } }, + function mkdirSyncRelativeUrlPath(): void { + const testDir = Deno.makeTempDirSync(); + const nestedDir = testDir + "/nested"; + // Add trailing slash so base path is treated as a directory. pathToAbsoluteFileUrl removes trailing slashes. + const path = new URL("../dir", pathToAbsoluteFileUrl(nestedDir) + "/"); + + Deno.mkdirSync(nestedDir); + Deno.mkdirSync(path); + + assertDirectory(testDir + "/dir"); + }, +); + +unitTest( + { perms: { read: true, write: true } }, + async function mkdirRelativeUrlPath(): Promise { + const testDir = Deno.makeTempDirSync(); + const nestedDir = testDir + "/nested"; + // Add trailing slash so base path is treated as a directory. pathToAbsoluteFileUrl removes trailing slashes. + const path = new URL("../dir", pathToAbsoluteFileUrl(nestedDir) + "/"); + + await Deno.mkdir(nestedDir); + await Deno.mkdir(path); + + assertDirectory(testDir + "/dir"); + }, +);