1'use strict'; 2const common = require('../common'); 3 4// These tests make sure that the `options` object passed to these functions are 5// never altered. 6// 7// Refer: https://github.com/nodejs/node/issues/7655 8 9const assert = require('assert'); 10const fs = require('fs'); 11const path = require('path'); 12 13const errHandler = (e) => assert.ifError(e); 14const options = Object.freeze({}); 15const tmpdir = require('../common/tmpdir'); 16tmpdir.refresh(); 17 18fs.readFile(__filename, options, common.mustCall(errHandler)); 19fs.readFileSync(__filename, options); 20 21fs.readdir(__dirname, options, common.mustCall(errHandler)); 22fs.readdirSync(__dirname, options); 23 24if (common.canCreateSymLink()) { 25 const sourceFile = path.resolve(tmpdir.path, 'test-readlink'); 26 const linkFile = path.resolve(tmpdir.path, 'test-readlink-link'); 27 28 fs.writeFileSync(sourceFile, ''); 29 fs.symlinkSync(sourceFile, linkFile); 30 31 fs.readlink(linkFile, options, common.mustCall(errHandler)); 32 fs.readlinkSync(linkFile, options); 33} 34 35{ 36 const fileName = path.resolve(tmpdir.path, 'writeFile'); 37 fs.writeFileSync(fileName, 'ABCD', options); 38 fs.writeFile(fileName, 'ABCD', options, common.mustCall(errHandler)); 39} 40 41{ 42 const fileName = path.resolve(tmpdir.path, 'appendFile'); 43 fs.appendFileSync(fileName, 'ABCD', options); 44 fs.appendFile(fileName, 'ABCD', options, common.mustCall(errHandler)); 45} 46 47if (!common.isIBMi) { // IBMi does not support fs.watch() 48 const watch = fs.watch(__filename, options, common.mustNotCall()); 49 watch.close(); 50} 51 52{ 53 fs.watchFile(__filename, options, common.mustNotCall()); 54 fs.unwatchFile(__filename); 55} 56 57{ 58 fs.realpathSync(__filename, options); 59 fs.realpath(__filename, options, common.mustCall(errHandler)); 60} 61 62{ 63 const tempFileName = path.resolve(tmpdir.path, 'mkdtemp-'); 64 fs.mkdtempSync(tempFileName, options); 65 fs.mkdtemp(tempFileName, options, common.mustCall(errHandler)); 66} 67 68{ 69 const fileName = path.resolve(tmpdir.path, 'streams'); 70 fs.WriteStream(fileName, options).once('open', common.mustCall(() => { 71 fs.ReadStream(fileName, options).destroy(); 72 })).end(); 73} 74