diff options
Diffstat (limited to 'js')
-rw-r--r-- | js/deno.ts | 1 | ||||
-rw-r--r-- | js/os.ts | 26 | ||||
-rw-r--r-- | js/os_test.ts | 38 |
3 files changed, 65 insertions, 0 deletions
diff --git a/js/deno.ts b/js/deno.ts index d121b3183..0eca6f0ac 100644 --- a/js/deno.ts +++ b/js/deno.ts @@ -8,6 +8,7 @@ export { makeTempDirSync, mkdirSync, readFileSync, + renameSync, statSync, lStatSync, writeFileSync @@ -336,3 +336,29 @@ export function writeFileSync( const msg = fbs.WriteFileSync.endWriteFileSync(builder); send(builder, fbs.Any.WriteFileSync, msg); } + +/** + * Renames (moves) oldpath to newpath. + * import { renameSync } from "deno"; + * const oldpath = 'from/path'; + * const newpath = 'to/path'; + * + * renameSync(oldpath, newpath); + */ +export function renameSync(oldpath: string, newpath: string): void { + /* Ideally we could write: + const res = send({ + command: fbs.Command.RENAME_SYNC, + renameOldPath: oldpath, + renameNewPath: newpath + }); + */ + const builder = new flatbuffers.Builder(); + const _oldpath = builder.createString(oldpath); + const _newpath = builder.createString(newpath); + fbs.RenameSync.startRenameSync(builder); + fbs.RenameSync.addOldpath(builder, _oldpath); + fbs.RenameSync.addNewpath(builder, _newpath); + const msg = fbs.RenameSync.endRenameSync(builder); + send(builder, fbs.Any.RenameSync, msg); +} diff --git a/js/os_test.ts b/js/os_test.ts index 8142956eb..2954b377c 100644 --- a/js/os_test.ts +++ b/js/os_test.ts @@ -204,3 +204,41 @@ testPerm({ write: false }, function mkdDirSyncPerm() { assertEqual(err.name, "deno.PermissionDenied"); }); +testPerm({ write: true }, function renameSync() { + const testDir = deno.makeTempDirSync() + "/test-rename"; + const oldpath = testDir + "/oldpath" + const newpath = testDir + "/newpath" + deno.mkdirSync(oldpath); + deno.renameSync(oldpath, newpath); + const newPathInfo = deno.statSync(newpath); + assert(newPathInfo.isDirectory()); + + let caughtErr = false; + let oldPathInfo; + + try { + oldPathInfo = deno.statSync(oldpath); + } catch (err) { + caughtErr = true; + // TODO assert(err instanceof deno.NotFound). + assert(err); + assertEqual(err.name, "deno.NotFound"); + } + + assert(caughtErr); + assertEqual(oldPathInfo, undefined); +}); + +test(function renameSyncPerm() { + let err; + try { + const oldpath = "/oldbaddir"; + const newpath = "/newbaddir"; + deno.renameSync(oldpath, newpath); + } catch (err_) { + err = err_; + } + // TODO assert(err instanceof deno.PermissionDenied). + assert(err); + assertEqual(err.name, "deno.PermissionDenied"); +}); |