diff options
author | Casper Beyer <caspervonb@pm.me> | 2021-06-03 22:14:37 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-03 16:14:37 +0200 |
commit | dc69b03339cc75af1daa70700d1283fa33c22c3b (patch) | |
tree | f7df713b978809938bdf9dd42d90805a89bea380 | |
parent | 844a1317ec63e5ed5019e36a52dc3e7d3abfab8b (diff) |
feat(runtime): support URL overloads for Deno.rename/Deno.renameSync (#10512)
-rw-r--r-- | cli/dts/lib.deno.ns.d.ts | 10 | ||||
-rw-r--r-- | cli/tests/unit/rename_test.ts | 40 | ||||
-rw-r--r-- | runtime/js/30_fs.js | 10 |
3 files changed, 55 insertions, 5 deletions
diff --git a/cli/dts/lib.deno.ns.d.ts b/cli/dts/lib.deno.ns.d.ts index c8b4b60a0..34f8c2ad5 100644 --- a/cli/dts/lib.deno.ns.d.ts +++ b/cli/dts/lib.deno.ns.d.ts @@ -1322,7 +1322,10 @@ declare namespace Deno { * they are. It's always an error to rename anything to a non-empty directory. * * Requires `allow-read` and `allow-write` permissions. */ - export function renameSync(oldpath: string, newpath: string): void; + export function renameSync( + oldpath: string | URL, + newpath: string | URL, + ): void; /** Renames (moves) `oldpath` to `newpath`. Paths may be files or directories. * If `newpath` already exists and is not a directory, `rename()` replaces it. @@ -1339,7 +1342,10 @@ declare namespace Deno { * they are. It's always an error to rename anything to a non-empty directory. * * Requires `allow-read` and `allow-write` permission. */ - export function rename(oldpath: string, newpath: string): Promise<void>; + export function rename( + oldpath: string | URL, + newpath: string | URL, + ): Promise<void>; /** Synchronously reads and returns the entire contents of a file as utf8 * encoded string. Reading a directory throws an error. diff --git a/cli/tests/unit/rename_test.ts b/cli/tests/unit/rename_test.ts index 09633aed7..711b63aa7 100644 --- a/cli/tests/unit/rename_test.ts +++ b/cli/tests/unit/rename_test.ts @@ -1,5 +1,11 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { assert, assertEquals, assertThrows, unitTest } from "./test_util.ts"; +import { + assert, + assertEquals, + assertThrows, + pathToAbsoluteFileUrl, + unitTest, +} from "./test_util.ts"; function assertMissing(path: string): void { let caughtErr = false; @@ -41,6 +47,22 @@ unitTest( ); unitTest( + { perms: { read: true, write: true } }, + function renameSyncWithURL(): void { + const testDir = Deno.makeTempDirSync(); + const oldpath = testDir + "/oldpath"; + const newpath = testDir + "/newpath"; + Deno.mkdirSync(oldpath); + Deno.renameSync( + pathToAbsoluteFileUrl(oldpath), + pathToAbsoluteFileUrl(newpath), + ); + assertDirectory(newpath); + assertMissing(oldpath); + }, +); + +unitTest( { perms: { read: false, write: true } }, function renameSyncReadPerm(): void { assertThrows(() => { @@ -75,6 +97,22 @@ unitTest( }, ); +unitTest( + { perms: { read: true, write: true } }, + async function renameWithURL(): Promise<void> { + const testDir = Deno.makeTempDirSync(); + const oldpath = testDir + "/oldpath"; + const newpath = testDir + "/newpath"; + Deno.mkdirSync(oldpath); + await Deno.rename( + pathToAbsoluteFileUrl(oldpath), + pathToAbsoluteFileUrl(newpath), + ); + assertDirectory(newpath); + assertMissing(oldpath); + }, +); + function readFileString(filename: string): string { const dataRead = Deno.readFileSync(filename); const dec = new TextDecoder("utf-8"); diff --git a/runtime/js/30_fs.js b/runtime/js/30_fs.js index 11e9b32ef..c9daddacb 100644 --- a/runtime/js/30_fs.js +++ b/runtime/js/30_fs.js @@ -156,11 +156,17 @@ } function renameSync(oldpath, newpath) { - core.opSync("op_rename_sync", { oldpath, newpath }); + core.opSync("op_rename_sync", { + oldpath: pathFromURL(oldpath), + newpath: pathFromURL(newpath), + }); } async function rename(oldpath, newpath) { - await core.opAsync("op_rename_async", { oldpath, newpath }); + await core.opAsync("op_rename_async", { + oldpath: pathFromURL(oldpath), + newpath: pathFromURL(newpath), + }); } function parseFileInfo(response) { |