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 fs = require('fs');
10const path = require('path');
11
12const options = common.mustNotMutateObjectDeep({});
13const tmpdir = require('../common/tmpdir');
14tmpdir.refresh();
15
16fs.readFile(__filename, options, common.mustSucceed());
17fs.readFileSync(__filename, options);
18
19fs.readdir(__dirname, options, common.mustSucceed());
20fs.readdirSync(__dirname, options);
21
22if (common.canCreateSymLink()) {
23  const sourceFile = path.resolve(tmpdir.path, 'test-readlink');
24  const linkFile = path.resolve(tmpdir.path, 'test-readlink-link');
25
26  fs.writeFileSync(sourceFile, '');
27  fs.symlinkSync(sourceFile, linkFile);
28
29  fs.readlink(linkFile, options, common.mustSucceed());
30  fs.readlinkSync(linkFile, options);
31}
32
33{
34  const fileName = path.resolve(tmpdir.path, 'writeFile');
35  fs.writeFileSync(fileName, 'ABCD', options);
36  fs.writeFile(fileName, 'ABCD', options, common.mustSucceed());
37}
38
39{
40  const fileName = path.resolve(tmpdir.path, 'appendFile');
41  fs.appendFileSync(fileName, 'ABCD', options);
42  fs.appendFile(fileName, 'ABCD', options, common.mustSucceed());
43}
44
45if (!common.isIBMi) { // IBMi does not support fs.watch()
46  const watch = fs.watch(__filename, options, common.mustNotCall());
47  watch.close();
48}
49
50{
51  fs.watchFile(__filename, options, common.mustNotCall());
52  fs.unwatchFile(__filename);
53}
54
55{
56  fs.realpathSync(__filename, options);
57  fs.realpath(__filename, options, common.mustSucceed());
58}
59
60{
61  const tempFileName = path.resolve(tmpdir.path, 'mkdtemp-');
62  fs.mkdtempSync(tempFileName, options);
63  fs.mkdtemp(tempFileName, options, common.mustSucceed());
64}
65
66{
67  const fileName = path.resolve(tmpdir.path, 'streams');
68  fs.WriteStream(fileName, options).once('open', common.mustCall(() => {
69    fs.ReadStream(fileName, options).destroy();
70  })).end();
71}
72