From 96bc15dfa237b506c4f2d8bf1c041f25000e9878 Mon Sep 17 00:00:00 2001 From: Farsen976 Date: Thu, 16 Mar 2023 04:16:03 +0100 Subject: [PATCH] fix(ext/node): implement "ascii" encoding for node:fs writeFile() (#18097) --- cli/tests/unit_node/fs_test.ts | 48 ++++++++++++++++++++++++++++ ext/node/polyfills/_fs/_fs_common.ts | 4 +-- 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 cli/tests/unit_node/fs_test.ts diff --git a/cli/tests/unit_node/fs_test.ts b/cli/tests/unit_node/fs_test.ts new file mode 100644 index 0000000000..3e9ad44802 --- /dev/null +++ b/cli/tests/unit_node/fs_test.ts @@ -0,0 +1,48 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. + +import { + assert, + assertThrows, +} from "../../../test_util/std/testing/asserts.ts"; +import { join } from "node:path"; +import { tmpdir } from "node:os"; +import { mkdtempSync, readFileSync, writeFileSync } from "node:fs"; + +Deno.test( + "[node/fs writeFileSync] write file without option", + () => { + const data = "Hello"; + const filename = mkdtempSync(join(tmpdir(), "foo-")) + "/test.txt"; + + writeFileSync(filename, data); + const dataRead = readFileSync(filename, "utf8"); + + assert(dataRead === "Hello"); + }, +); + +Deno.test( + "[node/fs writeFileSync] write file with option ASCII", + () => { + const data = "Hello"; + const filename = mkdtempSync(join(tmpdir(), "foo-")) + "/test.txt"; + + writeFileSync(filename, data, { encoding: "ascii" }); + const dataRead = readFileSync(filename, "utf8"); + + assert(dataRead === "Hello"); + }, +); + +Deno.test( + "[node/fs writeFileSync] write file throws error when encoding is not implemented", + () => { + const data = "Hello"; + const filename = mkdtempSync(join(tmpdir(), "foo-")) + "/test.txt"; + + assertThrows( + () => writeFileSync(filename, data, { encoding: "utf16le" }), + 'The value "utf16le" is invalid for option "encoding"', + ); + }, +); diff --git a/ext/node/polyfills/_fs/_fs_common.ts b/ext/node/polyfills/_fs/_fs_common.ts index c704cd9754..19f0d7d176 100644 --- a/ext/node/polyfills/_fs/_fs_common.ts +++ b/ext/node/polyfills/_fs/_fs_common.ts @@ -74,7 +74,7 @@ export function checkEncoding(encoding: Encodings | null): Encodings | null { if (!encoding) return null; encoding = encoding.toLowerCase() as Encodings; - if (["utf8", "hex", "base64"].includes(encoding)) return encoding; + if (["utf8", "hex", "base64", "ascii"].includes(encoding)) return encoding; if (encoding === "utf-8") { return "utf8"; @@ -85,7 +85,7 @@ export function checkEncoding(encoding: Encodings | null): Encodings | null { // node -e "require('fs').readFile('../world.txt', 'buffer', console.log)" } - const notImplementedEncodings = ["utf16le", "latin1", "ascii", "ucs2"]; + const notImplementedEncodings = ["utf16le", "latin1", "ucs2"]; if (notImplementedEncodings.includes(encoding as string)) { notImplemented(`"${encoding}" encoding`);