Skip to content

Commit 907ce8d

Browse files
edsadrjasnell
authored andcommitted
test: refactor test-fs-error-messages.js
* group tests by error type * improve error validation for all messages * use assert.throws instead of try and catch * use arrow functions * add missing test for readdir * add missing test for readFileSync * remove unnecessary variables PR-URL: #11096 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Italo A. Casas <[email protected]>
1 parent 42e73ae commit 907ce8d

File tree

1 file changed

+118
-164
lines changed

1 file changed

+118
-164
lines changed

test/parallel/test-fs-error-messages.js

+118-164
Original file line numberDiff line numberDiff line change
@@ -9,202 +9,156 @@ const existingFile2 = path.join(common.fixturesDir, 'create-file.js');
99
const existingDir = path.join(common.fixturesDir, 'empty');
1010
const existingDir2 = path.join(common.fixturesDir, 'keys');
1111

12-
// ASYNC_CALL
12+
// Test all operations failing with ENOENT errors
13+
function testEnoentError(file, endMessage, syscal, err) {
14+
const sufix = (endMessage) ? endMessage : '';
1315

14-
fs.stat(fn, function(err) {
16+
assert(err instanceof Error);
1517
assert.strictEqual(fn, err.path);
16-
assert.ok(0 <= err.message.indexOf(fn));
17-
});
18+
assert.strictEqual(
19+
err.message,
20+
`ENOENT: no such file or directory, ${syscal} '${file}'${sufix}`
21+
);
1822

19-
fs.lstat(fn, function(err) {
20-
assert.ok(0 <= err.message.indexOf(fn));
21-
});
23+
return true;
24+
}
2225

23-
fs.readlink(fn, function(err) {
24-
assert.ok(0 <= err.message.indexOf(fn));
25-
});
26+
// Test all operations failing with EEXIST errors
27+
function testEexistError(source, dest, syscal, err) {
28+
const sufix = (dest) ? ` -> '${dest}'` : '';
2629

27-
fs.link(fn, 'foo', function(err) {
28-
assert.ok(0 <= err.message.indexOf(fn));
29-
});
30+
assert(err instanceof Error);
31+
assert.strictEqual(source, err.path);
32+
assert.strictEqual(
33+
err.message,
34+
`EEXIST: file already exists, ${syscal} '${source}'${sufix}`
35+
);
3036

31-
fs.link(existingFile, existingFile2, function(err) {
32-
assert.ok(0 <= err.message.indexOf(existingFile));
33-
assert.ok(0 <= err.message.indexOf(existingFile2));
34-
});
37+
return true;
38+
}
3539

36-
fs.symlink(existingFile, existingFile2, function(err) {
37-
assert.ok(0 <= err.message.indexOf(existingFile));
38-
assert.ok(0 <= err.message.indexOf(existingFile2));
39-
});
40+
// Test all operations failing with ENOTEMPTY errors
41+
function testEnoemptyError(source, dest, err) {
42+
assert(err instanceof Error);
43+
assert.strictEqual(source, err.path);
44+
assert.strictEqual(
45+
err.message,
46+
`ENOTEMPTY: directory not empty, rename '${source}' ` +
47+
`-> '${dest}'`
48+
);
49+
50+
return true;
51+
}
4052

41-
fs.unlink(fn, function(err) {
42-
assert.ok(0 <= err.message.indexOf(fn));
43-
});
53+
// Test all operations failing with ENOTDIR errors
54+
function testEnotdirError(dir, err) {
55+
assert(err instanceof Error);
56+
assert.strictEqual(dir, err.path);
57+
assert.strictEqual(
58+
err.message,
59+
`ENOTDIR: not a directory, rmdir '${dir}'`
60+
);
4461

45-
fs.rename(fn, 'foo', function(err) {
46-
assert.ok(0 <= err.message.indexOf(fn));
47-
});
62+
return true;
63+
}
4864

49-
fs.rename(existingDir, existingDir2, function(err) {
50-
assert.ok(0 <= err.message.indexOf(existingDir));
51-
assert.ok(0 <= err.message.indexOf(existingDir2));
52-
});
65+
// Generating ENOENTS errors
66+
fs.stat(fn, (err) => testEnoentError(fn, '', 'stat', err));
67+
fs.lstat(fn, (err) => testEnoentError(fn, '', 'lstat', err));
68+
fs.readlink(fn, (err) => testEnoentError(fn, '', 'readlink', err));
69+
fs.link(fn, 'foo', (err) => testEnoentError(fn, ' -> \'foo\'', 'link', err));
70+
fs.unlink(fn, (err) => testEnoentError(fn, '', 'unlink', err));
71+
fs.rmdir(fn, (err) => testEnoentError(fn, '', 'rmdir', err));
72+
fs.chmod(fn, 0o666, (err) => testEnoentError(fn, '', 'chmod', err));
73+
fs.open(fn, 'r', 0o666, (err) => testEnoentError(fn, '', 'open', err));
74+
fs.readFile(fn, (err) => testEnoentError(fn, '', 'open', err));
75+
fs.readdir(fn, (err) => testEnoentError(fn, '', 'scandir', err));
5376

54-
fs.rmdir(fn, function(err) {
55-
assert.ok(0 <= err.message.indexOf(fn));
77+
fs.rename(fn, 'foo', (err) => {
78+
testEnoentError(fn, ' -> \'foo\'', 'rename', err);
5679
});
5780

58-
fs.mkdir(existingFile, 0o666, function(err) {
59-
assert.ok(0 <= err.message.indexOf(existingFile));
60-
});
81+
assert.throws(() => {
82+
fs.statSync(fn);
83+
}, (err) => testEnoentError(fn, '', 'stat', err));
6184

62-
fs.rmdir(existingFile, function(err) {
63-
assert.ok(0 <= err.message.indexOf(existingFile));
64-
});
85+
assert.throws(() => {
86+
fs.lstatSync(fn);
87+
}, (err) => testEnoentError(fn, '', 'lstat', err));
6588

66-
fs.chmod(fn, 0o666, function(err) {
67-
assert.ok(0 <= err.message.indexOf(fn));
68-
});
89+
assert.throws(() => {
90+
fs.readlinkSync(fn);
91+
}, (err) => testEnoentError(fn, '', 'readlink', err));
6992

70-
fs.open(fn, 'r', 0o666, function(err) {
71-
assert.ok(0 <= err.message.indexOf(fn));
72-
});
93+
assert.throws(() => {
94+
fs.linkSync(fn, 'foo');
95+
}, (err) => testEnoentError(fn, ' -> \'foo\'', 'link', err));
7396

74-
fs.readFile(fn, function(err) {
75-
assert.ok(0 <= err.message.indexOf(fn));
76-
});
97+
assert.throws(() => {
98+
fs.unlinkSync(fn);
99+
}, (err) => testEnoentError(fn, '', 'unlink', err));
77100

78-
// Sync
101+
assert.throws(() => {
102+
fs.rmdirSync(fn);
103+
}, (err) => testEnoentError(fn, '', 'rmdir', err));
79104

80-
const errors = [];
81-
let expected = 0;
105+
assert.throws(() => {
106+
fs.chmodSync(fn, 0o666);
107+
}, (err) => testEnoentError(fn, '', 'chmod', err));
82108

83-
try {
84-
++expected;
85-
fs.statSync(fn);
86-
} catch (err) {
87-
errors.push('stat');
88-
assert.ok(0 <= err.message.indexOf(fn));
89-
}
109+
assert.throws(() => {
110+
fs.openSync(fn, 'r');
111+
}, (err) => testEnoentError(fn, '', 'open', err));
90112

91-
try {
92-
++expected;
93-
fs.mkdirSync(existingFile, 0o666);
94-
} catch (err) {
95-
errors.push('mkdir');
96-
assert.ok(0 <= err.message.indexOf(existingFile));
97-
}
113+
assert.throws(() => {
114+
fs.readFileSync(fn);
115+
}, (err) => testEnoentError(fn, '', 'open', err));
98116

99-
try {
100-
++expected;
101-
fs.chmodSync(fn, 0o666);
102-
} catch (err) {
103-
errors.push('chmod');
104-
assert.ok(0 <= err.message.indexOf(fn));
105-
}
117+
assert.throws(() => {
118+
fs.readdirSync(fn);
119+
}, (err) => testEnoentError(fn, '', 'scandir', err));
106120

107-
try {
108-
++expected;
109-
fs.lstatSync(fn);
110-
} catch (err) {
111-
errors.push('lstat');
112-
assert.ok(0 <= err.message.indexOf(fn));
113-
}
121+
assert.throws(() => {
122+
fs.renameSync(fn, 'foo');
123+
}, (err) => testEnoentError(fn, ' -> \'foo\'', 'rename', err));
114124

115-
try {
116-
++expected;
117-
fs.readlinkSync(fn);
118-
} catch (err) {
119-
errors.push('readlink');
120-
assert.ok(0 <= err.message.indexOf(fn));
121-
}
125+
// Generating EEXIST errors
126+
fs.link(existingFile, existingFile2, (err) => {
127+
testEexistError(existingFile, existingFile2, 'link', err);
128+
});
122129

123-
try {
124-
++expected;
125-
fs.linkSync(fn, 'foo');
126-
} catch (err) {
127-
errors.push('link');
128-
assert.ok(0 <= err.message.indexOf(fn));
129-
}
130+
fs.symlink(existingFile, existingFile2, (err) => {
131+
testEexistError(existingFile, existingFile2, 'symlink', err);
132+
});
130133

131-
try {
132-
++expected;
134+
fs.mkdir(existingFile, 0o666, (err) => {
135+
testEexistError(existingFile, null, 'mkdir', err);
136+
});
137+
138+
assert.throws(() => {
133139
fs.linkSync(existingFile, existingFile2);
134-
} catch (err) {
135-
errors.push('link');
136-
assert.ok(0 <= err.message.indexOf(existingFile));
137-
assert.ok(0 <= err.message.indexOf(existingFile2));
138-
}
140+
}, (err) => testEexistError(existingFile, existingFile2, 'link', err));
139141

140-
try {
141-
++expected;
142+
assert.throws(() => {
142143
fs.symlinkSync(existingFile, existingFile2);
143-
} catch (err) {
144-
errors.push('symlink');
145-
assert.ok(0 <= err.message.indexOf(existingFile));
146-
assert.ok(0 <= err.message.indexOf(existingFile2));
147-
}
144+
}, (err) => testEexistError(existingFile, existingFile2, 'symlink', err));
148145

149-
try {
150-
++expected;
151-
fs.unlinkSync(fn);
152-
} catch (err) {
153-
errors.push('unlink');
154-
assert.ok(0 <= err.message.indexOf(fn));
155-
}
156-
157-
try {
158-
++expected;
159-
fs.rmdirSync(fn);
160-
} catch (err) {
161-
errors.push('rmdir');
162-
assert.ok(0 <= err.message.indexOf(fn));
163-
}
164-
165-
try {
166-
++expected;
167-
fs.rmdirSync(existingFile);
168-
} catch (err) {
169-
errors.push('rmdir');
170-
assert.ok(0 <= err.message.indexOf(existingFile));
171-
}
172-
173-
try {
174-
++expected;
175-
fs.openSync(fn, 'r');
176-
} catch (err) {
177-
errors.push('opens');
178-
assert.ok(0 <= err.message.indexOf(fn));
179-
}
146+
assert.throws(() => {
147+
fs.mkdirSync(existingFile, 0o666);
148+
}, (err) => testEexistError(existingFile, null, 'mkdir', err));
180149

181-
try {
182-
++expected;
183-
fs.renameSync(fn, 'foo');
184-
} catch (err) {
185-
errors.push('rename');
186-
assert.ok(0 <= err.message.indexOf(fn));
187-
}
150+
// Generating ENOTEMPTY errors
151+
fs.rename(existingDir, existingDir2, (err) => {
152+
testEnoemptyError(existingDir, existingDir2, err);
153+
});
188154

189-
try {
190-
++expected;
155+
assert.throws(() => {
191156
fs.renameSync(existingDir, existingDir2);
192-
} catch (err) {
193-
errors.push('rename');
194-
assert.ok(0 <= err.message.indexOf(existingDir));
195-
assert.ok(0 <= err.message.indexOf(existingDir2));
196-
}
157+
}, (err) => testEnoemptyError(existingDir, existingDir2, err));
197158

198-
try {
199-
++expected;
200-
fs.readdirSync(fn);
201-
} catch (err) {
202-
errors.push('readdir');
203-
assert.ok(0 <= err.message.indexOf(fn));
204-
}
159+
// Generating ENOTDIR errors
160+
fs.rmdir(existingFile, (err) => testEnotdirError(existingFile, err));
205161

206-
process.on('exit', function() {
207-
assert.strictEqual(expected, errors.length,
208-
'Test fs sync exceptions raised, got ' + errors.length +
209-
' expected ' + expected);
210-
});
162+
assert.throws(() => {
163+
fs.rmdirSync(existingFile);
164+
}, (err) => testEnotdirError(existingFile, err));

0 commit comments

Comments
 (0)