summaryrefslogtreecommitdiff
path: root/test/parallel/test-fs-fchmod.js
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2018-03-19 14:17:50 +0100
committerRuben Bridgewater <ruben@bridgewater.de>2018-03-25 01:45:40 +0100
commitacc3c770e7717673ee87fa37076fc50fcb91e4ea (patch)
tree278e9535d850eb1ae97d0dfd2bfefca3408d3a77 /test/parallel/test-fs-fchmod.js
parent058e7fb8e66cafae700c5cb437d08572150fa69f (diff)
downloadnode-new-acc3c770e7717673ee87fa37076fc50fcb91e4ea.tar.gz
fs: fix error handling
Right now there are multiple cases where the validated entry would not be returned or a wrong error is thrown. This fixes both cases. PR-URL: https://github.com/nodejs/node/pull/19445 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'test/parallel/test-fs-fchmod.js')
-rw-r--r--test/parallel/test-fs-fchmod.js87
1 files changed, 54 insertions, 33 deletions
diff --git a/test/parallel/test-fs-fchmod.js b/test/parallel/test-fs-fchmod.js
index 22e6a490c9..edf5cc32ea 100644
--- a/test/parallel/test-fs-fchmod.js
+++ b/test/parallel/test-fs-fchmod.js
@@ -1,45 +1,66 @@
'use strict';
const common = require('../common');
+const assert = require('assert');
const fs = require('fs');
// This test ensures that input for fchmod is valid, testing for valid
// inputs for fd and mode
// Check input type
-['', false, null, undefined, {}, [], Infinity, -1].forEach((i) => {
- common.expectsError(
- () => fs.fchmod(i),
- {
- code: 'ERR_INVALID_ARG_TYPE',
- type: TypeError,
- message: 'The "fd" argument must be of type integer'
- }
- );
- common.expectsError(
- () => fs.fchmodSync(i),
- {
- code: 'ERR_INVALID_ARG_TYPE',
- type: TypeError,
- message: 'The "fd" argument must be of type integer'
- }
- );
+[false, null, undefined, {}, [], ''].forEach((input) => {
+ const errObj = {
+ code: 'ERR_INVALID_ARG_TYPE',
+ name: 'TypeError [ERR_INVALID_ARG_TYPE]',
+ message: 'The "fd" argument must be of type number. Received type ' +
+ typeof input
+ };
+ assert.throws(() => fs.fchmod(input), errObj);
+ assert.throws(() => fs.fchmodSync(input), errObj);
+ errObj.message = errObj.message.replace('fd', 'mode');
+ assert.throws(() => fs.fchmod(1, input), errObj);
+ assert.throws(() => fs.fchmodSync(1, input), errObj);
+});
+
+[-1, 2 ** 32].forEach((input) => {
+ const errObj = {
+ code: 'ERR_OUT_OF_RANGE',
+ name: 'RangeError [ERR_OUT_OF_RANGE]',
+ message: 'The value of "fd" is out of range. It must be >= 0 && < ' +
+ `${2 ** 32}. Received ${input}`
+ };
+ assert.throws(() => fs.fchmod(input), errObj);
+ assert.throws(() => fs.fchmodSync(input), errObj);
+ errObj.message = errObj.message.replace('fd', 'mode');
+ assert.throws(() => fs.fchmod(1, input), errObj);
+ assert.throws(() => fs.fchmodSync(1, input), errObj);
+});
- common.expectsError(
- () => fs.fchmod(1, i),
- {
- code: 'ERR_INVALID_ARG_TYPE',
- type: TypeError,
- message: 'The "mode" argument must be of type integer'
- }
- );
- common.expectsError(
- () => fs.fchmodSync(1, i),
- {
- code: 'ERR_INVALID_ARG_TYPE',
- type: TypeError,
- message: 'The "mode" argument must be of type integer'
- }
- );
+[NaN, Infinity].forEach((input) => {
+ const errObj = {
+ code: 'ERR_OUT_OF_RANGE',
+ name: 'RangeError [ERR_OUT_OF_RANGE]',
+ message: 'The value of "fd" is out of range. It must be an integer. ' +
+ `Received ${input}`
+ };
+ assert.throws(() => fs.fchmod(input), errObj);
+ assert.throws(() => fs.fchmodSync(input), errObj);
+ errObj.message = errObj.message.replace('fd', 'mode');
+ assert.throws(() => fs.fchmod(1, input), errObj);
+ assert.throws(() => fs.fchmodSync(1, input), errObj);
+});
+
+[1.5].forEach((input) => {
+ const errObj = {
+ code: 'ERR_OUT_OF_RANGE',
+ name: 'RangeError [ERR_OUT_OF_RANGE]',
+ message: 'The value of "fd" is out of range. It must be an integer. ' +
+ `Received ${input}`
+ };
+ assert.throws(() => fs.fchmod(input), errObj);
+ assert.throws(() => fs.fchmodSync(input), errObj);
+ errObj.message = errObj.message.replace('fd', 'mode');
+ assert.throws(() => fs.fchmod(1, input), errObj);
+ assert.throws(() => fs.fchmodSync(1, input), errObj);
});
// Check for mode values range