// this test makes sure that various things get enoent, instead of // some other kind of throw. var g = require('../') var NODE_VERSION_MAJOR_WITH_BIGINT = 10 var NODE_VERSION_MINOR_WITH_BIGINT = 5 var NODE_VERSION_PATCH_WITH_BIGINT = 0 var nodeVersion = process.versions.node.split('.') var nodeVersionMajor = Number.parseInt(nodeVersion[0], 10) var nodeVersionMinor = Number.parseInt(nodeVersion[1], 10) var nodeVersionPatch = Number.parseInt(nodeVersion[2], 10) function nodeSupportsBigInt () { if (nodeVersionMajor > NODE_VERSION_MAJOR_WITH_BIGINT) { return true } else if (nodeVersionMajor === NODE_VERSION_MAJOR_WITH_BIGINT) { if (nodeVersionMinor > NODE_VERSION_MINOR_WITH_BIGINT) { return true } else if (nodeVersionMinor === NODE_VERSION_MINOR_WITH_BIGINT) { if (nodeVersionPatch >= NODE_VERSION_PATCH_WITH_BIGINT) { return true } } } return false } var t = require('tap') var file = 'this file does not exist even a little bit' var methods = [ ['open', 'r'], ['readFile'], ['stat'], ['lstat'], ['utimes', new Date(), new Date()], ['readdir'] ] // any version > v6 can do readdir(path, options, cb) if (process.version.match(/^v([6-9]|[1-9][0-9])\./)) { methods.push(['readdir', {}]) } // any version > v10.5 can do stat(path, options, cb) if (nodeSupportsBigInt()) { methods.push(['stat', {}]) methods.push(['lstat', {}]) } t.plan(methods.length) methods.forEach(function (method) { t.test(method[0], runTest(method)) }) function runTest (args) { return function (t) { var method = args.shift() args.unshift(file) var methodSync = method + 'Sync' t.type(g[methodSync], 'function') t.throws(function () { g[methodSync].apply(g, args) }, { code: 'ENOENT' }) // add the callback args.push(verify(t)) t.type(g[method], 'function') t.doesNotThrow(function () { g[method].apply(g, args) }) }} function verify (t) { return function (er) { t.type(er, Error) t.equal(er.code, 'ENOENT') t.end() }}