deno.land / std@0.166.0 / node / _fs / _fs_open_test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402// Copyright 2018-2022 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 "./_fs_constants.ts";import { assert, assertEquals, assertThrows, fail,} from "../../testing/asserts.ts";import { assertCallbackErrorUncaught } from "../_test_utils.ts";import { open, openSync } from "./_fs_open.ts";import { join, parse } from "../../path/mod.ts";import { existsSync } from "../../fs/exists.ts";import { closeSync } from "./_fs_close.ts";
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); 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("./_fs_open.ts", import.meta.url); await assertCallbackErrorUncaught({ prelude: `import { open } from ${JSON.stringify(importUrl)}`, invocation: `open(${JSON.stringify(tempFile)}, `, async cleanup() { await Deno.remove(tempFile); }, });});
Version Info