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