summaryrefslogtreecommitdiff
path: root/tests/unit/make_temp_test.ts
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-02-10 13:22:13 -0700
committerGitHub <noreply@github.com>2024-02-10 20:22:13 +0000
commitf5e46c9bf2f50d66a953fa133161fc829cecff06 (patch)
tree8faf2f5831c1c7b11d842cd9908d141082c869a5 /tests/unit/make_temp_test.ts
parentd2477f780630a812bfd65e3987b70c0d309385bb (diff)
chore: move cli/tests/ -> tests/ (#22369)
This looks like a massive PR, but it's only a move from cli/tests -> tests, and updates of relative paths for files. This is the first step towards aggregate all of the integration test files under tests/, which will lead to a set of integration tests that can run without the CLI binary being built. While we could leave these tests under `cli`, it would require us to keep a more complex directory structure for the various test runners. In addition, we have a lot of complexity to ignore various test files in the `cli` project itself (cargo publish exclusion rules, autotests = false, etc). And finally, the `tests/` folder will eventually house the `test_ffi`, `test_napi` and other testing code, reducing the size of the root repo directory. For easier review, the extremely large and noisy "move" is in the first commit (with no changes -- just a move), while the remainder of the changes to actual files is in the second commit.
Diffstat (limited to 'tests/unit/make_temp_test.ts')
-rw-r--r--tests/unit/make_temp_test.ts157
1 files changed, 157 insertions, 0 deletions
diff --git a/tests/unit/make_temp_test.ts b/tests/unit/make_temp_test.ts
new file mode 100644
index 000000000..cbbae8dfe
--- /dev/null
+++ b/tests/unit/make_temp_test.ts
@@ -0,0 +1,157 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+import {
+ assert,
+ assertEquals,
+ assertRejects,
+ assertThrows,
+} from "./test_util.ts";
+
+Deno.test({ permissions: { write: true } }, function makeTempDirSyncSuccess() {
+ const dir1 = Deno.makeTempDirSync({ prefix: "hello", suffix: "world" });
+ const dir2 = Deno.makeTempDirSync({ prefix: "hello", suffix: "world" });
+ // Check that both dirs are different.
+ assert(dir1 !== dir2);
+ for (const dir of [dir1, dir2]) {
+ // Check that the prefix and suffix are applied.
+ const lastPart = dir.replace(/^.*[\\\/]/, "");
+ assert(lastPart.startsWith("hello"));
+ assert(lastPart.endsWith("world"));
+ }
+ // Check that the `dir` option works.
+ const dir3 = Deno.makeTempDirSync({ dir: dir1 });
+ assert(dir3.startsWith(dir1));
+ assert(/^[\\\/]/.test(dir3.slice(dir1.length)));
+ // Check that creating a temp dir inside a nonexisting directory fails.
+ assertThrows(() => {
+ Deno.makeTempDirSync({ dir: "/baddir" });
+ }, Deno.errors.NotFound);
+});
+
+Deno.test(
+ { permissions: { read: true, write: true } },
+ function makeTempDirSyncMode() {
+ const path = Deno.makeTempDirSync();
+ const pathInfo = Deno.statSync(path);
+ if (Deno.build.os !== "windows") {
+ assertEquals(pathInfo.mode! & 0o777, 0o700 & ~Deno.umask());
+ }
+ },
+);
+
+Deno.test({ permissions: { write: false } }, function makeTempDirSyncPerm() {
+ // makeTempDirSync should require write permissions (for now).
+ assertThrows(() => {
+ Deno.makeTempDirSync({ dir: "/baddir" });
+ }, Deno.errors.PermissionDenied);
+});
+
+Deno.test(
+ { permissions: { write: true } },
+ async function makeTempDirSuccess() {
+ const dir1 = await Deno.makeTempDir({ prefix: "hello", suffix: "world" });
+ const dir2 = await Deno.makeTempDir({ prefix: "hello", suffix: "world" });
+ // Check that both dirs are different.
+ assert(dir1 !== dir2);
+ for (const dir of [dir1, dir2]) {
+ // Check that the prefix and suffix are applied.
+ const lastPart = dir.replace(/^.*[\\\/]/, "");
+ assert(lastPart.startsWith("hello"));
+ assert(lastPart.endsWith("world"));
+ }
+ // Check that the `dir` option works.
+ const dir3 = await Deno.makeTempDir({ dir: dir1 });
+ assert(dir3.startsWith(dir1));
+ assert(/^[\\\/]/.test(dir3.slice(dir1.length)));
+ // Check that creating a temp dir inside a nonexisting directory fails.
+ await assertRejects(async () => {
+ await Deno.makeTempDir({ dir: "/baddir" });
+ }, Deno.errors.NotFound);
+ },
+);
+
+Deno.test(
+ { permissions: { read: true, write: true } },
+ async function makeTempDirMode() {
+ const path = await Deno.makeTempDir();
+ const pathInfo = Deno.statSync(path);
+ if (Deno.build.os !== "windows") {
+ assertEquals(pathInfo.mode! & 0o777, 0o700 & ~Deno.umask());
+ }
+ },
+);
+
+Deno.test({ permissions: { write: true } }, function makeTempFileSyncSuccess() {
+ const file1 = Deno.makeTempFileSync({ prefix: "hello", suffix: "world" });
+ const file2 = Deno.makeTempFileSync({ prefix: "hello", suffix: "world" });
+ // Check that both dirs are different.
+ assert(file1 !== file2);
+ for (const dir of [file1, file2]) {
+ // Check that the prefix and suffix are applied.
+ const lastPart = dir.replace(/^.*[\\\/]/, "");
+ assert(lastPart.startsWith("hello"));
+ assert(lastPart.endsWith("world"));
+ }
+ // Check that the `dir` option works.
+ const dir = Deno.makeTempDirSync({ prefix: "tempdir" });
+ const file3 = Deno.makeTempFileSync({ dir });
+ assert(file3.startsWith(dir));
+ assert(/^[\\\/]/.test(file3.slice(dir.length)));
+ // Check that creating a temp file inside a nonexisting directory fails.
+ assertThrows(() => {
+ Deno.makeTempFileSync({ dir: "/baddir" });
+ }, Deno.errors.NotFound);
+});
+
+Deno.test(
+ { permissions: { read: true, write: true } },
+ function makeTempFileSyncMode() {
+ const path = Deno.makeTempFileSync();
+ const pathInfo = Deno.statSync(path);
+ if (Deno.build.os !== "windows") {
+ assertEquals(pathInfo.mode! & 0o777, 0o600 & ~Deno.umask());
+ }
+ },
+);
+
+Deno.test({ permissions: { write: false } }, function makeTempFileSyncPerm() {
+ // makeTempFileSync should require write permissions (for now).
+ assertThrows(() => {
+ Deno.makeTempFileSync({ dir: "/baddir" });
+ }, Deno.errors.PermissionDenied);
+});
+
+Deno.test(
+ { permissions: { write: true } },
+ async function makeTempFileSuccess() {
+ const file1 = await Deno.makeTempFile({ prefix: "hello", suffix: "world" });
+ const file2 = await Deno.makeTempFile({ prefix: "hello", suffix: "world" });
+ // Check that both dirs are different.
+ assert(file1 !== file2);
+ for (const dir of [file1, file2]) {
+ // Check that the prefix and suffix are applied.
+ const lastPart = dir.replace(/^.*[\\\/]/, "");
+ assert(lastPart.startsWith("hello"));
+ assert(lastPart.endsWith("world"));
+ }
+ // Check that the `dir` option works.
+ const dir = Deno.makeTempDirSync({ prefix: "tempdir" });
+ const file3 = await Deno.makeTempFile({ dir });
+ assert(file3.startsWith(dir));
+ assert(/^[\\\/]/.test(file3.slice(dir.length)));
+ // Check that creating a temp file inside a nonexisting directory fails.
+ await assertRejects(async () => {
+ await Deno.makeTempFile({ dir: "/baddir" });
+ }, Deno.errors.NotFound);
+ },
+);
+
+Deno.test(
+ { permissions: { read: true, write: true } },
+ async function makeTempFileMode() {
+ const path = await Deno.makeTempFile();
+ const pathInfo = Deno.statSync(path);
+ if (Deno.build.os !== "windows") {
+ assertEquals(pathInfo.mode! & 0o777, 0o600 & ~Deno.umask());
+ }
+ },
+);