deno.land / std@0.166.0 / node / _tools / test / parallel / test-fs-write.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213// deno-fmt-ignore-file// deno-lint-ignore-file
// Copyright Joyent and Node contributors. All rights reserved. MIT license.// Taken from Node 16.13.0// This file is automatically generated by "node/_tools/setup.ts". Do not modify this file manually
// Copyright Joyent, Inc. and other Node contributors.//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the// "Software"), to deal in the Software without restriction, including// without limitation the rights to use, copy, modify, merge, publish,// distribute, sublicense, and/or sell copies of the Software, and to permit// persons to whom the Software is furnished to do so, subject to the// following conditions://// The above copyright notice and this permission notice shall be included// in all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE// USE OR OTHER DEALINGS IN THE SOFTWARE.
// Flags: --expose_externalize_string'use strict';const common = require('../common');const assert = require('assert');const path = require('path');const fs = require('fs');const tmpdir = require('../common/tmpdir');
tmpdir.refresh();
const fn = path.join(tmpdir.path, 'write.txt');const fn2 = path.join(tmpdir.path, 'write2.txt');const fn3 = path.join(tmpdir.path, 'write3.txt');const fn4 = path.join(tmpdir.path, 'write4.txt');const fn5 = path.join(tmpdir.path, 'write5.txt');const expected = 'ümlaut.';const constants = fs.constants;
const { externalizeString, isOneByteString } = global;
// Account for extra globals exposed by --expose_externalize_string.common.allowGlobals(externalizeString, isOneByteString, global.x);
{ const expected = 'ümlaut sechzig'; // Must be a unique string. externalizeString(expected); assert.strictEqual(isOneByteString(expected), true); const fd = fs.openSync(fn, 'w'); fs.writeSync(fd, expected, 0, 'latin1'); fs.closeSync(fd); assert.strictEqual(fs.readFileSync(fn, 'latin1'), expected);}
{ const expected = 'ümlaut neunzig'; // Must be a unique string. externalizeString(expected); assert.strictEqual(isOneByteString(expected), true); const fd = fs.openSync(fn, 'w'); fs.writeSync(fd, expected, 0, 'utf8'); fs.closeSync(fd); assert.strictEqual(fs.readFileSync(fn, 'utf8'), expected);}
{ const expected = 'Zhōngwén 1'; // Must be a unique string. externalizeString(expected); assert.strictEqual(isOneByteString(expected), false); const fd = fs.openSync(fn, 'w'); fs.writeSync(fd, expected, 0, 'ucs2'); fs.closeSync(fd); assert.strictEqual(fs.readFileSync(fn, 'ucs2'), expected);}
{ const expected = 'Zhōngwén 2'; // Must be a unique string. externalizeString(expected); assert.strictEqual(isOneByteString(expected), false); const fd = fs.openSync(fn, 'w'); fs.writeSync(fd, expected, 0, 'utf8'); fs.closeSync(fd); assert.strictEqual(fs.readFileSync(fn, 'utf8'), expected);}
fs.open(fn, 'w', 0o644, common.mustSucceed((fd) => { const done = common.mustSucceed((written) => { assert.strictEqual(written, Buffer.byteLength(expected)); fs.closeSync(fd); const found = fs.readFileSync(fn, 'utf8'); fs.unlinkSync(fn); assert.strictEqual(found, expected); });
const written = common.mustSucceed((written) => { assert.strictEqual(written, 0); fs.write(fd, expected, 0, 'utf8', done); });
fs.write(fd, '', 0, 'utf8', written);}));
// TODO(kt3k): Enable this test when fs.open supports number for `flags`// paramter./*const args = constants.O_CREAT | constants.O_WRONLY | constants.O_TRUNC;fs.open(fn2, args, 0o644, common.mustSucceed((fd) => { const done = common.mustSucceed((written) => { assert.strictEqual(written, Buffer.byteLength(expected)); fs.closeSync(fd); const found = fs.readFileSync(fn2, 'utf8'); fs.unlinkSync(fn2); assert.strictEqual(found, expected); });
const written = common.mustSucceed((written) => { assert.strictEqual(written, 0); fs.write(fd, expected, 0, 'utf8', done); });
fs.write(fd, '', 0, 'utf8', written);}));*/
fs.open(fn3, 'w', 0o644, common.mustSucceed((fd) => { const done = common.mustSucceed((written) => { assert.strictEqual(written, Buffer.byteLength(expected)); fs.closeSync(fd); });
fs.write(fd, expected, done);}));
fs.open(fn4, 'w', 0o644, common.mustSucceed((fd) => { const done = common.mustSucceed((written) => { assert.strictEqual(written, Buffer.byteLength(expected)); fs.closeSync(fd); });
const data = { toString() { return expected; } }; fs.write(fd, data, done);}));
[false, 'test', {}, [], null, undefined].forEach((i) => { assert.throws( () => fs.write(i, common.mustNotCall()), { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError' } ); assert.throws( () => fs.writeSync(i), { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError' } );});
[false, 5, {}, [], null, undefined].forEach((data) => { assert.throws( () => fs.write(1, data, common.mustNotCall()), { code: 'ERR_INVALID_ARG_TYPE', message: /"buffer"/ } ); assert.throws( () => fs.writeSync(1, data), { code: 'ERR_INVALID_ARG_TYPE', message: /"buffer"/ } );});
{ // Regression test for https://github.com/nodejs/node/issues/38168 const fd = fs.openSync(fn5, 'w');
assert.throws( () => fs.writeSync(fd, 'abc', 0, 'hex'), { code: 'ERR_INVALID_ARG_VALUE', message: /'encoding' is invalid for data of length 3/ } );
assert.throws( () => fs.writeSync(fd, 'abc', 0, 'hex', common.mustNotCall()), { code: 'ERR_INVALID_ARG_VALUE', message: /'encoding' is invalid for data of length 3/ } );
assert.strictEqual(fs.writeSync(fd, 'abcd', 0, 'hex'), 2);
fs.write(fd, 'abcd', 0, 'hex', common.mustSucceed((written) => { assert.strictEqual(written, 2); fs.closeSync(fd); }));}
Version Info