You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.3 KiB

'use strict';
const common = require('../common');
const assert = require('assert');
const fs = require('fs');
const path = require('path');
common.refreshTmpDir();
const fds = [];
const filename = path.resolve(common.tmpDir, 'truncate-file.txt');
fs.writeFileSync(filename, 'hello world', 'utf8');
const fd = fs.openSync(filename, 'r+');
fds.push(fd);
fs.truncate(fd, 5, common.mustCall(function(err) {
assert.ifError(err);
assert.equal(fs.readFileSync(filename, 'utf8'), 'hello');
}));
{
// test partial truncation of a file
const fileName = path.resolve(common.tmpDir, 'truncate-file-1.txt');
console.log(fileName);
fs.writeFileSync(fileName, 'hello world', 'utf8');
const fd = fs.openSync(fileName, 'r+');
fds.push(fd);
fs.truncate(fd, 5, common.mustCall(function(err) {
assert.ifError(err);
assert.strictEqual(fs.readFileSync(fileName, 'utf8'), 'hello');
}));
}
{
// make sure numbers as strings are not treated as fds with sync version
const fileName = path.resolve(common.tmpDir, 'truncate-file-2.txt');
console.log(fileName);
fs.writeFileSync(fileName, 'One');
const fd = fs.openSync(fileName, 'r');
fds.push(fd);
const fdFileName = path.resolve(common.tmpDir, '' + fd);
fs.writeFileSync(fdFileName, 'Two');
assert.strictEqual(fs.readFileSync(fileName).toString(), 'One');
assert.strictEqual(fs.readFileSync(fdFileName).toString(), 'Two');
fs.truncateSync(fdFileName);
assert.strictEqual(fs.readFileSync(fileName).toString(), 'One');
assert.strictEqual(fs.readFileSync(fdFileName).toString(), '');
}
{
// make sure numbers as strings are not treated as fds with async version
const fileName = path.resolve(common.tmpDir, 'truncate-file-3.txt');
console.log(fileName);
fs.writeFileSync(fileName, 'One');
const fd = fs.openSync(fileName, 'r');
fds.push(fd);
const fdFileName = path.resolve(common.tmpDir, '' + fd);
fs.writeFileSync(fdFileName, 'Two');
assert.strictEqual(fs.readFileSync(fileName).toString(), 'One');
assert.strictEqual(fs.readFileSync(fdFileName).toString(), 'Two');
fs.truncate(fdFileName, common.mustCall(function(err) {
assert.ifError(err);
assert.strictEqual(fs.readFileSync(fileName).toString(), 'One');
assert.strictEqual(fs.readFileSync(fdFileName).toString(), '');
}));
}
process.on('exit', () => fds.forEach((fd) => fs.closeSync(fd)));