diff options
Diffstat (limited to 'cli/js/chmod_test.ts')
-rw-r--r-- | cli/js/chmod_test.ts | 193 |
1 files changed, 102 insertions, 91 deletions
diff --git a/cli/js/chmod_test.ts b/cli/js/chmod_test.ts index d6ff64316..9edc7afee 100644 --- a/cli/js/chmod_test.ts +++ b/cli/js/chmod_test.ts @@ -1,58 +1,62 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -import { testPerm, assert, assertEquals } from "./test_util.ts"; +import { unitTest, assert, assertEquals } from "./test_util.ts"; const isNotWindows = Deno.build.os !== "win"; -testPerm({ read: true, write: true }, function chmodSyncSuccess(): void { - const enc = new TextEncoder(); - const data = enc.encode("Hello"); - const tempDir = Deno.makeTempDirSync(); - const filename = tempDir + "/test.txt"; - Deno.writeFileSync(filename, data, { perm: 0o666 }); +unitTest( + { perms: { read: true, write: true } }, + function chmodSyncSuccess(): void { + const enc = new TextEncoder(); + const data = enc.encode("Hello"); + const tempDir = Deno.makeTempDirSync(); + const filename = tempDir + "/test.txt"; + Deno.writeFileSync(filename, data, { perm: 0o666 }); - // On windows no effect, but should not crash - Deno.chmodSync(filename, 0o777); - - // Check success when not on windows - if (isNotWindows) { - const fileInfo = Deno.statSync(filename); - assert(fileInfo.mode); - assertEquals(fileInfo.mode & 0o777, 0o777); - } -}); + // On windows no effect, but should not crash + Deno.chmodSync(filename, 0o777); -// Check symlink when not on windows -if (isNotWindows) { - testPerm( - { read: true, write: true }, - function chmodSyncSymlinkSuccess(): void { - const enc = new TextEncoder(); - const data = enc.encode("Hello"); - const tempDir = Deno.makeTempDirSync(); - - const filename = tempDir + "/test.txt"; - Deno.writeFileSync(filename, data, { perm: 0o666 }); - const symlinkName = tempDir + "/test_symlink.txt"; - Deno.symlinkSync(filename, symlinkName); - - let symlinkInfo = Deno.lstatSync(symlinkName); - assert(symlinkInfo.mode); - const symlinkMode = symlinkInfo.mode & 0o777; // platform dependent - - Deno.chmodSync(symlinkName, 0o777); - - // Change actual file mode, not symlink + // Check success when not on windows + if (isNotWindows) { const fileInfo = Deno.statSync(filename); assert(fileInfo.mode); assertEquals(fileInfo.mode & 0o777, 0o777); - symlinkInfo = Deno.lstatSync(symlinkName); - assert(symlinkInfo.mode); - assertEquals(symlinkInfo.mode & 0o777, symlinkMode); } - ); -} + } +); -testPerm({ write: true }, function chmodSyncFailure(): void { +// Check symlink when not on windows +unitTest( + { + skip: Deno.build.os === "win", + perms: { read: true, write: true } + }, + function chmodSyncSymlinkSuccess(): void { + const enc = new TextEncoder(); + const data = enc.encode("Hello"); + const tempDir = Deno.makeTempDirSync(); + + const filename = tempDir + "/test.txt"; + Deno.writeFileSync(filename, data, { perm: 0o666 }); + const symlinkName = tempDir + "/test_symlink.txt"; + Deno.symlinkSync(filename, symlinkName); + + let symlinkInfo = Deno.lstatSync(symlinkName); + assert(symlinkInfo.mode); + const symlinkMode = symlinkInfo.mode & 0o777; // platform dependent + + Deno.chmodSync(symlinkName, 0o777); + + // Change actual file mode, not symlink + const fileInfo = Deno.statSync(filename); + assert(fileInfo.mode); + assertEquals(fileInfo.mode & 0o777, 0o777); + symlinkInfo = Deno.lstatSync(symlinkName); + assert(symlinkInfo.mode); + assertEquals(symlinkInfo.mode & 0o777, symlinkMode); + } +); + +unitTest({ perms: { write: true } }, function chmodSyncFailure(): void { let err; try { const filename = "/badfile.txt"; @@ -63,7 +67,7 @@ testPerm({ write: true }, function chmodSyncFailure(): void { assert(err instanceof Deno.errors.NotFound); }); -testPerm({ write: false }, function chmodSyncPerm(): void { +unitTest({ perms: { write: false } }, function chmodSyncPerm(): void { let err; try { Deno.chmodSync("/somefile.txt", 0o777); @@ -74,58 +78,63 @@ testPerm({ write: false }, function chmodSyncPerm(): void { assertEquals(err.name, "PermissionDenied"); }); -testPerm({ read: true, write: true }, async function chmodSuccess(): Promise< - void -> { - const enc = new TextEncoder(); - const data = enc.encode("Hello"); - const tempDir = Deno.makeTempDirSync(); - const filename = tempDir + "/test.txt"; - Deno.writeFileSync(filename, data, { perm: 0o666 }); - - // On windows no effect, but should not crash - await Deno.chmod(filename, 0o777); +unitTest( + { perms: { read: true, write: true } }, + async function chmodSuccess(): Promise<void> { + const enc = new TextEncoder(); + const data = enc.encode("Hello"); + const tempDir = Deno.makeTempDirSync(); + const filename = tempDir + "/test.txt"; + Deno.writeFileSync(filename, data, { perm: 0o666 }); - // Check success when not on windows - if (isNotWindows) { - const fileInfo = Deno.statSync(filename); - assert(fileInfo.mode); - assertEquals(fileInfo.mode & 0o777, 0o777); - } -}); + // On windows no effect, but should not crash + await Deno.chmod(filename, 0o777); -// Check symlink when not on windows -if (isNotWindows) { - testPerm( - { read: true, write: true }, - async function chmodSymlinkSuccess(): Promise<void> { - const enc = new TextEncoder(); - const data = enc.encode("Hello"); - const tempDir = Deno.makeTempDirSync(); - - const filename = tempDir + "/test.txt"; - Deno.writeFileSync(filename, data, { perm: 0o666 }); - const symlinkName = tempDir + "/test_symlink.txt"; - Deno.symlinkSync(filename, symlinkName); - - let symlinkInfo = Deno.lstatSync(symlinkName); - assert(symlinkInfo.mode); - const symlinkMode = symlinkInfo.mode & 0o777; // platform dependent - - await Deno.chmod(symlinkName, 0o777); - - // Just change actual file mode, not symlink + // Check success when not on windows + if (isNotWindows) { const fileInfo = Deno.statSync(filename); assert(fileInfo.mode); assertEquals(fileInfo.mode & 0o777, 0o777); - symlinkInfo = Deno.lstatSync(symlinkName); - assert(symlinkInfo.mode); - assertEquals(symlinkInfo.mode & 0o777, symlinkMode); } - ); -} + } +); + +// Check symlink when not on windows + +unitTest( + { + skip: Deno.build.os === "win", + perms: { read: true, write: true } + }, + async function chmodSymlinkSuccess(): Promise<void> { + const enc = new TextEncoder(); + const data = enc.encode("Hello"); + const tempDir = Deno.makeTempDirSync(); + + const filename = tempDir + "/test.txt"; + Deno.writeFileSync(filename, data, { perm: 0o666 }); + const symlinkName = tempDir + "/test_symlink.txt"; + Deno.symlinkSync(filename, symlinkName); + + let symlinkInfo = Deno.lstatSync(symlinkName); + assert(symlinkInfo.mode); + const symlinkMode = symlinkInfo.mode & 0o777; // platform dependent -testPerm({ write: true }, async function chmodFailure(): Promise<void> { + await Deno.chmod(symlinkName, 0o777); + + // Just change actual file mode, not symlink + const fileInfo = Deno.statSync(filename); + assert(fileInfo.mode); + assertEquals(fileInfo.mode & 0o777, 0o777); + symlinkInfo = Deno.lstatSync(symlinkName); + assert(symlinkInfo.mode); + assertEquals(symlinkInfo.mode & 0o777, symlinkMode); + } +); + +unitTest({ perms: { write: true } }, async function chmodFailure(): Promise< + void +> { let err; try { const filename = "/badfile.txt"; @@ -136,7 +145,9 @@ testPerm({ write: true }, async function chmodFailure(): Promise<void> { assert(err instanceof Deno.errors.NotFound); }); -testPerm({ write: false }, async function chmodPerm(): Promise<void> { +unitTest({ perms: { write: false } }, async function chmodPerm(): Promise< + void +> { let err; try { await Deno.chmod("/somefile.txt", 0o777); |