'use strict'; const common = require('../common'); const assert = require('assert'); const fs = require('fs'); const path = require('path'); const tmpdir = require('../common/tmpdir'); tmpdir.refresh(); async function main() { const file = path.join(tmpdir.path, 'write-invalid-encoding'); const handle = await fs.promises.open(file, 'w+'); try { for (const encoding of ['bad', 16]) { const error = { code: 'ERR_UNKNOWN_ENCODING', message: `Unknown encoding: ${encoding}`, }; assert.throws(() => fs.writeSync(handle.fd, '6162', 0, encoding), error); assert.throws( () => fs.write(handle.fd, '6162', 0, encoding, common.mustNotCall()), error); await assert.rejects(handle.write('6162', 0, encoding), error); } // Rejected writes must not change the file. assert.strictEqual((await handle.stat()).size, 0); for (const encoding of [undefined, null, '', 'utf8', 'UTF-8', 'hex']) { const expected = encoding === 'hex' ? 'ab' : '6162'; await handle.truncate(0); assert.strictEqual(fs.writeSync(handle.fd, '6162', 0, encoding), expected.length); assert.strictEqual(fs.readFileSync(file, 'utf8'), expected); await handle.truncate(0); await new Promise((resolve, reject) => { fs.write(handle.fd, '6162', 0, encoding, common.mustCall((err, written) => { if (err) return reject(err); assert.strictEqual(written, expected.length); resolve(); })); }); assert.strictEqual(fs.readFileSync(file, 'utf8'), expected); await handle.truncate(0); const { bytesWritten } = await handle.write('6162', 0, encoding); assert.strictEqual(bytesWritten, expected.length); assert.strictEqual(fs.readFileSync(file, 'utf8'), expected); } } finally { await handle.close(); } } main().then(common.mustCall());