// Flags: --expose-internals 'use strict'; const common = require('../common'); const assert = require('assert'); const { getSystemErrorName, _errnoException } = require('util'); const { internalBinding } = require('internal/test/binding'); const uv = internalBinding('uv'); const keys = Object.keys(uv); keys.forEach((key) => { if (!key.startsWith('UV_')) return; const err = _errnoException(uv[key], 'test'); const name = uv.errname(uv[key]); assert.strictEqual(getSystemErrorName(uv[key]), name); assert.strictEqual(err.code, name); assert.strictEqual(err.code, err.errno); assert.strictEqual(err.message, `test ${name}`); }); function runTest(fn) { ['test', {}, []].forEach((err) => { common.expectsError( () => fn(err), { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, message: 'The "err" argument must be of type number. ' + `Received type ${typeof err}` }); }); [0, 1, Infinity, -Infinity, NaN].forEach((err) => { common.expectsError( () => fn(err), { code: 'ERR_OUT_OF_RANGE', type: RangeError, message: 'The value of "err" is out of range. ' + 'It must be a negative integer. ' + `Received ${err}` }); }); } runTest(_errnoException); runTest(getSystemErrorName);