// SPDX-License-Identifier: LGPL-3.0-or-later import assert from 'node:assert/strict'; import { suite, test } from 'node:test'; import { fs } from '../common.js'; const path: string = 'truncate-file.txt', size = 1024 * 16, data = new Uint8Array(size).fill('x'.charCodeAt(0)); suite('Truncating', () => { test('Sync path functions', () => { fs.writeFileSync(path, data); assert.equal(fs.statSync(path).size, size); fs.truncateSync(path, 1024); assert.equal(fs.statSync(path).size, 1024); fs.truncateSync(path); assert.equal(fs.statSync(path).size, 0); fs.writeFileSync(path, data); assert.equal(fs.statSync(path).size, size); }); test('FD functions', () => { const fd = fs.openSync(path, 'r+'); fs.ftruncateSync(fd, 1024); assert.equal(fs.fstatSync(fd).size, 1024); fs.ftruncateSync(fd); assert.equal(fs.fstatSync(fd).size, 0); fs.closeSync(fd); }); const statSize = async (path: string) => (await fs.promises.stat(path)).size; test('Async path functions', async () => { await fs.promises.writeFile(path, data); assert.equal(await statSize(path), 1024 * 16); await fs.promises.truncate(path, 1024); assert.equal(await statSize(path), 1024); await fs.promises.truncate(path); assert.equal(await statSize(path), 0); await fs.promises.writeFile(path, data); assert.equal(await statSize(path), size); }); test('FileHandle', async () => { const handle = await fs.promises.open(path, 'w'); await handle.truncate(1024); await handle.sync(); assert.equal(await statSize(path), 1024); await handle.truncate(); await handle.sync(); assert.equal(await statSize(path), 0); await handle.close(); }); });