summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/dts/lib.deno.ns.d.ts8
-rw-r--r--cli/tests/unit/symlink_test.ts43
-rw-r--r--runtime/js/30_fs.js12
3 files changed, 56 insertions, 7 deletions
diff --git a/cli/dts/lib.deno.ns.d.ts b/cli/dts/lib.deno.ns.d.ts
index 34f8c2ad5..3db07ba65 100644
--- a/cli/dts/lib.deno.ns.d.ts
+++ b/cli/dts/lib.deno.ns.d.ts
@@ -2379,8 +2379,8 @@ declare namespace Deno {
*
* Requires `allow-write` permission. */
export function symlinkSync(
- oldpath: string,
- newpath: string,
+ oldpath: string | URL,
+ newpath: string | URL,
options?: SymlinkOptions,
): void;
@@ -2396,8 +2396,8 @@ declare namespace Deno {
*
* Requires `allow-write` permission. */
export function symlink(
- oldpath: string,
- newpath: string,
+ oldpath: string | URL,
+ newpath: string | URL,
options?: SymlinkOptions,
): Promise<void>;
diff --git a/cli/tests/unit/symlink_test.ts b/cli/tests/unit/symlink_test.ts
index 19e83660b..eef993d17 100644
--- a/cli/tests/unit/symlink_test.ts
+++ b/cli/tests/unit/symlink_test.ts
@@ -1,5 +1,10 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-import { assert, assertThrows, unitTest } from "./test_util.ts";
+import {
+ assert,
+ assertThrows,
+ pathToAbsoluteFileUrl,
+ unitTest,
+} from "./test_util.ts";
unitTest(
{ perms: { read: true, write: true } },
@@ -16,6 +21,24 @@ unitTest(
},
);
+unitTest(
+ { perms: { read: true, write: true } },
+ function symlinkSyncURL(): void {
+ const testDir = Deno.makeTempDirSync();
+ const oldname = testDir + "/oldname";
+ const newname = testDir + "/newname";
+ Deno.mkdirSync(oldname);
+ Deno.symlinkSync(
+ pathToAbsoluteFileUrl(oldname),
+ pathToAbsoluteFileUrl(newname),
+ );
+ const newNameInfoLStat = Deno.lstatSync(newname);
+ const newNameInfoStat = Deno.statSync(newname);
+ assert(newNameInfoLStat.isSymlink);
+ assert(newNameInfoStat.isDirectory);
+ },
+);
+
unitTest(function symlinkSyncPerm(): void {
assertThrows(() => {
Deno.symlinkSync("oldbaddir", "newbaddir");
@@ -36,3 +59,21 @@ unitTest(
assert(newNameInfoStat.isDirectory, "NOT DIRECTORY");
},
);
+
+unitTest(
+ { perms: { read: true, write: true } },
+ async function symlinkURL(): Promise<void> {
+ const testDir = Deno.makeTempDirSync();
+ const oldname = testDir + "/oldname";
+ const newname = testDir + "/newname";
+ Deno.mkdirSync(oldname);
+ await Deno.symlink(
+ pathToAbsoluteFileUrl(oldname),
+ pathToAbsoluteFileUrl(newname),
+ );
+ const newNameInfoLStat = Deno.lstatSync(newname);
+ const newNameInfoStat = Deno.statSync(newname);
+ assert(newNameInfoLStat.isSymlink, "NOT SYMLINK");
+ assert(newNameInfoStat.isDirectory, "NOT DIRECTORY");
+ },
+);
diff --git a/runtime/js/30_fs.js b/runtime/js/30_fs.js
index c9daddacb..84e1c6819 100644
--- a/runtime/js/30_fs.js
+++ b/runtime/js/30_fs.js
@@ -344,7 +344,11 @@
newpath,
options,
) {
- core.opSync("op_symlink_sync", { oldpath, newpath, options });
+ core.opSync("op_symlink_sync", {
+ oldpath: pathFromURL(oldpath),
+ newpath: pathFromURL(newpath),
+ options,
+ });
}
async function symlink(
@@ -352,7 +356,11 @@
newpath,
options,
) {
- await core.opAsync("op_symlink_async", { oldpath, newpath, options });
+ await core.opAsync("op_symlink_async", {
+ oldpath: pathFromURL(oldpath),
+ newpath: pathFromURL(newpath),
+ options,
+ });
}
function fdatasyncSync(rid) {