@zenfs/core
Version:
A filesystem, anywhere
119 lines (83 loc) • 3.37 kB
text/typescript
// SPDX-License-Identifier: LGPL-3.0-or-later
import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
import { join } from 'node:path/posix';
import { suite, test } from 'node:test';
import { fs } from '../common.js';
import { data as dataPath } from '../setup.js';
const fileName = 'write.txt';
const utf8example = readFileSync(join(dataPath, 'utf8.txt'), 'utf8');
suite('Writes', () => {
test('Using FileHandle and UTF-8', async () => {
const expected = 'ümlaut.';
const handle = await fs.promises.open(fileName, 'w', 0o644);
await handle.write('', 0, 'utf8');
const { bytesWritten } = await handle.write(expected, 0, 'utf8');
assert.equal(bytesWritten, Buffer.from(expected).length);
await handle.close();
const data = await fs.promises.readFile(fileName, 'utf8');
assert.equal(data, expected);
await fs.promises.unlink(fileName);
});
test('Using FileHandle with buffer', async () => {
const expected = Buffer.from('hello');
const handle = await fs.promises.open(fileName, 'w', 0o644);
const written = await handle.write(expected, 0, expected.length, null);
assert.equal(expected.length, written.bytesWritten);
await handle.close();
assert.deepEqual(await fs.promises.readFile(fileName), expected);
await fs.promises.unlink(fileName);
});
test('Using sync path functions', () => {
const fd = fs.openSync(fileName, 'w');
let written = fs.writeSync(fd, '');
assert.equal(written, 0);
fs.writeSync(fd, 'foo');
const data = Buffer.from('bár');
written = fs.writeSync(fd, data, 0, data.length);
assert.equal(written, 4);
fs.closeSync(fd);
assert.equal(fs.readFileSync(fileName, 'utf8'), 'foobár');
});
test('Using promises API', async () => {
const filename = 'test.txt';
await fs.promises.writeFile(filename, utf8example);
const data = await fs.promises.readFile(filename);
assert.equal(data.length, Buffer.from(utf8example).length);
await fs.promises.unlink(filename);
});
test('Using promises API with buffer', async () => {
const filename = 'test2.txt';
const expected = Buffer.from(utf8example, 'utf8');
await fs.promises.writeFile(filename, expected);
const actual = await fs.promises.readFile(filename);
assert.equal(actual.length, expected.length);
await fs.promises.unlink(filename);
});
test('Promises API with base64 data', async () => {
const data = readFileSync(join(dataPath, 'image.jpg'), 'base64');
const buffer = Buffer.from(data, 'base64');
const filePath = 'test.jpg';
await fs.promises.writeFile(filePath, buffer);
const read = await fs.promises.readFile(filePath, 'base64');
assert.equal(read, data);
});
test('Using sync path functions with custom mode', () => {
const file = 'testWriteFileSync.txt';
const mode = 0o755;
fs.writeFileSync(file, '123', { mode });
const content = fs.readFileSync(file, 'utf8');
assert.equal(content, '123');
assert.equal(fs.statSync(file).mode & 0o777, mode);
fs.unlinkSync(file);
});
test('Appending to a file synchronously with custom mode', () => {
const file = 'testAppendFileSync.txt';
const mode = 0o755;
fs.appendFileSync(file, 'abc', { mode });
const content = fs.readFileSync(file, { encoding: 'utf8' });
assert.equal(content, 'abc');
assert.equal(fs.statSync(file).mode & 0o777, mode);
fs.unlinkSync(file);
});
});