'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)));