summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCasper Beyer <caspervonb@pm.me>2021-06-03 22:14:37 +0800
committerGitHub <noreply@github.com>2021-06-03 16:14:37 +0200
commitdc69b03339cc75af1daa70700d1283fa33c22c3b (patch)
treef7df713b978809938bdf9dd42d90805a89bea380
parent844a1317ec63e5ed5019e36a52dc3e7d3abfab8b (diff)
feat(runtime): support URL overloads for Deno.rename/Deno.renameSync (#10512)
-rw-r--r--cli/dts/lib.deno.ns.d.ts10
-rw-r--r--cli/tests/unit/rename_test.ts40
-rw-r--r--runtime/js/30_fs.js10
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) {