mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 15:24:46 -05:00
test(ext/node): add fs open unit test from std (#19505)
This commit is contained in:
parent
2ec366f544
commit
4e01356586
2 changed files with 401 additions and 0 deletions
|
@ -20,6 +20,7 @@ util::unit_test_factory!(
|
|||
_fs_copy_test = _fs / _fs_copy_test,
|
||||
_fs_dir_test = _fs / _fs_dir_test,
|
||||
_fs_dirent_test = _fs / _fs_dirent_test,
|
||||
_fs_open_test = _fs / _fs_open_test,
|
||||
_fs_exists_test = _fs / _fs_exists_test,
|
||||
_fs_fdatasync_test = _fs / _fs_fdatasync_test,
|
||||
_fs_fstat_test = _fs / _fs_fstat_test,
|
||||
|
|
400
cli/tests/unit_node/_fs/_fs_open_test.ts
Normal file
400
cli/tests/unit_node/_fs/_fs_open_test.ts
Normal file
|
@ -0,0 +1,400 @@
|
|||
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||
import {
|
||||
O_APPEND,
|
||||
O_CREAT,
|
||||
O_EXCL,
|
||||
O_RDONLY,
|
||||
O_RDWR,
|
||||
O_SYNC,
|
||||
O_TRUNC,
|
||||
O_WRONLY,
|
||||
} from "node:constants";
|
||||
import {
|
||||
assert,
|
||||
assertEquals,
|
||||
assertThrows,
|
||||
fail,
|
||||
} from "../../../../test_util/std/testing/asserts.ts";
|
||||
import { assertCallbackErrorUncaught } from "../_test_utils.ts";
|
||||
import { open, openSync } from "node:fs";
|
||||
import { join, parse } from "node:path";
|
||||
import { closeSync, existsSync } from "node:fs";
|
||||
|
||||
const tempDir = parse(Deno.makeTempFileSync()).dir;
|
||||
|
||||
Deno.test({
|
||||
name: "ASYNC: open file",
|
||||
async fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
let fd1: number;
|
||||
await new Promise<number>((resolve, reject) => {
|
||||
open(file, (err, fd) => {
|
||||
if (err) reject(err);
|
||||
resolve(fd);
|
||||
});
|
||||
})
|
||||
.then((fd) => {
|
||||
fd1 = fd;
|
||||
assert(Deno.resources()[fd], `${fd}`);
|
||||
}, () => fail())
|
||||
.finally(() => closeSync(fd1));
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "SYNC: open file",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
const fd = openSync(file, "r");
|
||||
assert(Deno.resources()[fd]);
|
||||
closeSync(fd);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'a'",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file");
|
||||
const fd = openSync(file, "a");
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(existsSync(file), true);
|
||||
assert(Deno.resources()[fd]);
|
||||
closeSync(fd);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'ax'",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
assertThrows(
|
||||
() => {
|
||||
openSync(file, "ax");
|
||||
},
|
||||
Error,
|
||||
`EEXIST: file already exists, open '${file}'`,
|
||||
);
|
||||
Deno.removeSync(file);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'a+'",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file2");
|
||||
const fd = openSync(file, "a+");
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(existsSync(file), true);
|
||||
closeSync(fd);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'ax+'",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
assertThrows(
|
||||
() => {
|
||||
openSync(file, "ax+");
|
||||
},
|
||||
Error,
|
||||
`EEXIST: file already exists, open '${file}'`,
|
||||
);
|
||||
Deno.removeSync(file);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'as'",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file10");
|
||||
const fd = openSync(file, "as");
|
||||
assertEquals(existsSync(file), true);
|
||||
assertEquals(typeof fd, "number");
|
||||
closeSync(fd);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'as+'",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file10");
|
||||
const fd = openSync(file, "as+");
|
||||
assertEquals(existsSync(file), true);
|
||||
assertEquals(typeof fd, "number");
|
||||
closeSync(fd);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'r'",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file3");
|
||||
assertThrows(() => {
|
||||
openSync(file, "r");
|
||||
}, Error);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'r+'",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file4");
|
||||
assertThrows(() => {
|
||||
openSync(file, "r+");
|
||||
}, Error);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'w'",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
Deno.writeTextFileSync(file, "hi there");
|
||||
const fd = openSync(file, "w");
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(Deno.readTextFileSync(file), "");
|
||||
closeSync(fd);
|
||||
|
||||
const file2 = join(tempDir, "some_random_file5");
|
||||
const fd2 = openSync(file2, "w");
|
||||
assertEquals(typeof fd2, "number");
|
||||
assertEquals(existsSync(file2), true);
|
||||
closeSync(fd2);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'wx'",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
Deno.writeTextFileSync(file, "hi there");
|
||||
const fd = openSync(file, "w");
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(Deno.readTextFileSync(file), "");
|
||||
closeSync(fd);
|
||||
|
||||
const file2 = Deno.makeTempFileSync();
|
||||
assertThrows(
|
||||
() => {
|
||||
openSync(file2, "wx");
|
||||
},
|
||||
Error,
|
||||
`EEXIST: file already exists, open '${file2}'`,
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'w+'",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
Deno.writeTextFileSync(file, "hi there");
|
||||
const fd = openSync(file, "w+");
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(Deno.readTextFileSync(file), "");
|
||||
closeSync(fd);
|
||||
|
||||
const file2 = join(tempDir, "some_random_file6");
|
||||
const fd2 = openSync(file2, "w+");
|
||||
assertEquals(typeof fd2, "number");
|
||||
assertEquals(existsSync(file2), true);
|
||||
closeSync(fd2);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with string flag 'wx+'",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
assertThrows(
|
||||
() => {
|
||||
openSync(file, "wx+");
|
||||
},
|
||||
Error,
|
||||
`EEXIST: file already exists, open '${file}'`,
|
||||
);
|
||||
Deno.removeSync(file);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_APPEND | O_CREAT | O_WRONLY` ('a')",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file");
|
||||
const fd = openSync(file, O_APPEND | O_CREAT | O_WRONLY);
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(existsSync(file), true);
|
||||
assert(Deno.resources()[fd]);
|
||||
closeSync(fd);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name:
|
||||
"open with numeric flag `O_APPEND | O_CREAT | O_WRONLY | O_EXCL` ('ax')",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
assertThrows(
|
||||
() => {
|
||||
openSync(file, O_APPEND | O_CREAT | O_WRONLY | O_EXCL);
|
||||
},
|
||||
Error,
|
||||
`EEXIST: file already exists, open '${file}'`,
|
||||
);
|
||||
Deno.removeSync(file);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_APPEND | O_CREAT | O_RDWR` ('a+')",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file2");
|
||||
const fd = openSync(file, O_APPEND | O_CREAT | O_RDWR);
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(existsSync(file), true);
|
||||
closeSync(fd);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_APPEND | O_CREAT | O_RDWR | O_EXCL` ('ax+')",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
assertThrows(
|
||||
() => {
|
||||
openSync(file, O_APPEND | O_CREAT | O_RDWR | O_EXCL);
|
||||
},
|
||||
Error,
|
||||
`EEXIST: file already exists, open '${file}'`,
|
||||
);
|
||||
Deno.removeSync(file);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name:
|
||||
"open with numeric flag `O_APPEND | O_CREAT | O_WRONLY | O_SYNC` ('as')",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file10");
|
||||
const fd = openSync(file, O_APPEND | O_CREAT | O_WRONLY | O_SYNC);
|
||||
assertEquals(existsSync(file), true);
|
||||
assertEquals(typeof fd, "number");
|
||||
closeSync(fd);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_APPEND | O_CREAT | O_RDWR | O_SYNC` ('as+')",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file10");
|
||||
const fd = openSync(file, O_APPEND | O_CREAT | O_RDWR | O_SYNC);
|
||||
assertEquals(existsSync(file), true);
|
||||
assertEquals(typeof fd, "number");
|
||||
closeSync(fd);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_RDONLY` ('r')",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file3");
|
||||
assertThrows(() => {
|
||||
openSync(file, O_RDONLY);
|
||||
}, Error);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_RDWR` ('r+')",
|
||||
fn() {
|
||||
const file = join(tempDir, "some_random_file4");
|
||||
assertThrows(() => {
|
||||
openSync(file, O_RDWR);
|
||||
}, Error);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_TRUNC | O_CREAT | O_WRONLY` ('w')",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
Deno.writeTextFileSync(file, "hi there");
|
||||
const fd = openSync(file, O_TRUNC | O_CREAT | O_WRONLY);
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(Deno.readTextFileSync(file), "");
|
||||
closeSync(fd);
|
||||
|
||||
const file2 = join(tempDir, "some_random_file5");
|
||||
const fd2 = openSync(file2, O_TRUNC | O_CREAT | O_WRONLY);
|
||||
assertEquals(typeof fd2, "number");
|
||||
assertEquals(existsSync(file2), true);
|
||||
closeSync(fd2);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_TRUNC | O_CREAT | O_WRONLY | O_EXCL` ('wx')",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
Deno.writeTextFileSync(file, "hi there");
|
||||
const fd = openSync(file, "w");
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(Deno.readTextFileSync(file), "");
|
||||
closeSync(fd);
|
||||
|
||||
const file2 = Deno.makeTempFileSync();
|
||||
assertThrows(
|
||||
() => {
|
||||
openSync(file2, O_TRUNC | O_CREAT | O_WRONLY | O_EXCL);
|
||||
},
|
||||
Error,
|
||||
`EEXIST: file already exists, open '${file2}'`,
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_TRUNC | O_CREAT | O_RDWR` ('w+')",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
Deno.writeTextFileSync(file, "hi there");
|
||||
const fd = openSync(file, O_TRUNC | O_CREAT | O_RDWR);
|
||||
assertEquals(typeof fd, "number");
|
||||
assertEquals(Deno.readTextFileSync(file), "");
|
||||
closeSync(fd);
|
||||
|
||||
const file2 = join(tempDir, "some_random_file6");
|
||||
const fd2 = openSync(file2, O_TRUNC | O_CREAT | O_RDWR);
|
||||
assertEquals(typeof fd2, "number");
|
||||
assertEquals(existsSync(file2), true);
|
||||
closeSync(fd2);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "open with numeric flag `O_TRUNC | O_CREAT | O_RDWR | O_EXCL` ('wx+')",
|
||||
fn() {
|
||||
const file = Deno.makeTempFileSync();
|
||||
assertThrows(
|
||||
() => {
|
||||
openSync(file, O_TRUNC | O_CREAT | O_RDWR | O_EXCL);
|
||||
},
|
||||
Error,
|
||||
`EEXIST: file already exists, open '${file}'`,
|
||||
);
|
||||
Deno.removeSync(file);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test("[std/node/fs] open callback isn't called twice if error is thrown", async () => {
|
||||
const tempFile = await Deno.makeTempFile();
|
||||
const importUrl = new URL("node:fs", import.meta.url);
|
||||
await assertCallbackErrorUncaught({
|
||||
prelude: `import { open } from ${JSON.stringify(importUrl)}`,
|
||||
invocation: `open(${JSON.stringify(tempFile)}, `,
|
||||
async cleanup() {
|
||||
await Deno.remove(tempFile);
|
||||
},
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue