diff options
author | Yoshiya Hinosawa <stibium121@gmail.com> | 2024-04-08 12:47:34 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-08 12:47:34 +0900 |
commit | 2670c1d580320ed01d3a7add27bc5db2a23ac80b (patch) | |
tree | 0bad7c76feaaa06c88cc42cafb8d7689a8e0f199 /tests/unit_node/fs_test.ts | |
parent | 49f6e2e79e66fe2c456e8745e86cfd148a748c9d (diff) |
fix(ext/node): out-of-order writes of fs.createWriteStream (#23244)
This PR follows this fix (https://github.com/nodejs/node/pull/52005) in
Node.js.
Stream's construct callback happens one tick earlier by this change, and
it prevents the reordering of the first few chunks in
`node:stream.Writable`
closes #20284
Diffstat (limited to 'tests/unit_node/fs_test.ts')
-rw-r--r-- | tests/unit_node/fs_test.ts | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/unit_node/fs_test.ts b/tests/unit_node/fs_test.ts index caa266ef2..e62a246fa 100644 --- a/tests/unit_node/fs_test.ts +++ b/tests/unit_node/fs_test.ts @@ -5,6 +5,7 @@ import { join } from "node:path"; import { tmpdir } from "node:os"; import { constants, + createWriteStream, existsSync, mkdtempSync, promises, @@ -14,6 +15,7 @@ import { writeFileSync, } from "node:fs"; import { constants as fsPromiseConstants, cp } from "node:fs/promises"; +import process from "node:process"; import { pathToAbsoluteFileUrl } from "../unit/test_util.ts"; Deno.test( @@ -121,3 +123,36 @@ Deno.test( assert(dataRead === "Hello"); }, ); + +// TODO(kt3k): Delete this test case, and instead enable the compat case +// `test/parallel/test-fs-writestream-open-write.js`, when we update +// `tests/node_compat/runner/suite`. +Deno.test("[node/fs createWriteStream", async () => { + const { promise, resolve, reject } = Promise.withResolvers<void>(); + const tempDir = await Deno.makeTempDir(); + const file = join(tempDir, "file.txt"); + try { + const w = createWriteStream(file); + + w.on("open", () => { + w.write("hello, "); + + process.nextTick(() => { + w.write("world"); + w.end(); + }); + }); + + w.on("close", async () => { + try { + assertEquals(await Deno.readTextFile(file), "hello, world"); + resolve(); + } catch (e) { + reject(e); + } + }); + await promise; + } finally { + await Deno.remove(tempDir, { recursive: true }); + } +}); |