// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. import { assert, assertRejects, assertThrows, pathToAbsoluteFileUrl, unitTest, } from "./test_util.ts"; unitTest( { permissions: { read: true, write: true } }, function symlinkSyncSuccess() { const testDir = Deno.makeTempDirSync(); const oldname = testDir + "/oldname"; const newname = testDir + "/newname"; Deno.mkdirSync(oldname); Deno.symlinkSync(oldname, newname); const newNameInfoLStat = Deno.lstatSync(newname); const newNameInfoStat = Deno.statSync(newname); assert(newNameInfoLStat.isSymlink); assert(newNameInfoStat.isDirectory); }, ); unitTest( { permissions: { read: true, write: true } }, function symlinkSyncURL() { 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() { assertThrows(() => { Deno.symlinkSync("oldbaddir", "newbaddir"); }, Deno.errors.PermissionDenied); }); unitTest( { permissions: { read: true, write: true } }, function symlinkSyncAlreadyExist() { const existingFile = Deno.makeTempFileSync(); const existingFile2 = Deno.makeTempFileSync(); assertThrows( () => { Deno.symlinkSync(existingFile, existingFile2); }, Deno.errors.AlreadyExists, `symlink '${existingFile}' -> '${existingFile2}'`, ); }, ); unitTest( { permissions: { read: true, write: true } }, async function symlinkSuccess() { const testDir = Deno.makeTempDirSync(); const oldname = testDir + "/oldname"; const newname = testDir + "/newname"; Deno.mkdirSync(oldname); await Deno.symlink(oldname, newname); const newNameInfoLStat = Deno.lstatSync(newname); const newNameInfoStat = Deno.statSync(newname); assert(newNameInfoLStat.isSymlink, "NOT SYMLINK"); assert(newNameInfoStat.isDirectory, "NOT DIRECTORY"); }, ); unitTest( { permissions: { read: true, write: true } }, async function symlinkURL() { 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"); }, ); unitTest( { permissions: { read: true, write: true } }, async function symlinkAlreadyExist() { const existingFile = Deno.makeTempFileSync(); const existingFile2 = Deno.makeTempFileSync(); await assertRejects( async () => { await Deno.symlink(existingFile, existingFile2); }, Deno.errors.AlreadyExists, `symlink '${existingFile}' -> '${existingFile2}'`, ); }, );