1'use strict'; 2 3require('../common'); 4const assert = require('assert'); 5const fs = require('fs'); 6 7function testFd(input, errObj) { 8 assert.throws(() => fs.fchown(input), errObj); 9 assert.throws(() => fs.fchownSync(input), errObj); 10} 11 12function testUid(input, errObj) { 13 assert.throws(() => fs.fchown(1, input), errObj); 14 assert.throws(() => fs.fchownSync(1, input), errObj); 15} 16 17function testGid(input, errObj) { 18 assert.throws(() => fs.fchown(1, 1, input), errObj); 19 assert.throws(() => fs.fchownSync(1, 1, input), errObj); 20} 21 22['', false, null, undefined, {}, []].forEach((input) => { 23 const errObj = { 24 code: 'ERR_INVALID_ARG_TYPE', 25 name: 'TypeError', 26 message: /fd|uid|gid/ 27 }; 28 testFd(input, errObj); 29 testUid(input, errObj); 30 testGid(input, errObj); 31}); 32 33[Infinity, NaN].forEach((input) => { 34 const errObj = { 35 code: 'ERR_OUT_OF_RANGE', 36 name: 'RangeError', 37 message: 'The value of "fd" is out of range. It must be an integer. ' + 38 `Received ${input}` 39 }; 40 testFd(input, errObj); 41 errObj.message = errObj.message.replace('fd', 'uid'); 42 testUid(input, errObj); 43 errObj.message = errObj.message.replace('uid', 'gid'); 44 testGid(input, errObj); 45}); 46 47[-2, 2 ** 32].forEach((input) => { 48 const errObj = { 49 code: 'ERR_OUT_OF_RANGE', 50 name: 'RangeError', 51 message: 'The value of "fd" is out of range. It must be ' + 52 `>= 0 && <= 2147483647. Received ${input}` 53 }; 54 testFd(input, errObj); 55 errObj.message = 'The value of "uid" is out of range. It must be >= -1 && ' + 56 `<= 4294967295. Received ${input}`; 57 testUid(input, errObj); 58 errObj.message = errObj.message.replace('uid', 'gid'); 59 testGid(input, errObj); 60}); 61