diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2018-03-19 14:17:50 +0100 |
---|---|---|
committer | Ruben Bridgewater <ruben@bridgewater.de> | 2018-03-25 01:45:40 +0100 |
commit | acc3c770e7717673ee87fa37076fc50fcb91e4ea (patch) | |
tree | 278e9535d850eb1ae97d0dfd2bfefca3408d3a77 /test/parallel/test-fs-fchmod.js | |
parent | 058e7fb8e66cafae700c5cb437d08572150fa69f (diff) | |
download | node-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.js | 87 |
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 |