From e6d6a4111ca2d67488a58f33a552067c88c8270f Mon Sep 17 00:00:00 2001 From: Luca Maraschi Date: Thu, 30 Mar 2017 23:06:47 +0200 Subject: [PATCH] test: extended test to makeCallback cb type check makeCallback and makeStatsCallback are both tested intedependently. PR-URL: https://github.com/nodejs/node/pull/12140 Backport-PR-URL: https://github.com/nodejs/node/pull/13785 Fixes: https://github.com/nodejs/node/issues/12136 Reviewed-By: Luigi Pinca Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Michael Dawson --- test/parallel/test-fs-make-callback.js | 36 +++++++++++----------- test/parallel/test-fs-makeStatsCallback.js | 27 ++++++++++++++++ 2 files changed, 45 insertions(+), 18 deletions(-) create mode 100644 test/parallel/test-fs-makeStatsCallback.js diff --git a/test/parallel/test-fs-make-callback.js b/test/parallel/test-fs-make-callback.js index 2dc9874a546574..034b22f789104b 100644 --- a/test/parallel/test-fs-make-callback.js +++ b/test/parallel/test-fs-make-callback.js @@ -1,28 +1,28 @@ 'use strict'; -require('../common'); +const common = require('../common'); const assert = require('assert'); const fs = require('fs'); +const cbTypeError = /^TypeError: "callback" argument must be a function$/; +const callbackThrowValues = [null, true, false, 0, 1, 'foo', /foo/, [], {}]; -function test(cb) { +const { sep } = require('path'); + +common.refreshTmpDir(); + +function testMakeCallback(cb) { return function() { - // fs.stat() calls makeCallback() on its second argument - fs.stat(__filename, cb); + // fs.mkdtemp() calls makeCallback() on its third argument + fs.mkdtemp(`${common.tmpDir}${sep}`, {}, cb); }; } -// Verify the case where a callback function is provided -assert.doesNotThrow(test(function() {})); +// Passing undefined/nothing calls rethrow() internally +assert.doesNotThrow(testMakeCallback()); -// Passing undefined calls rethrow() internally, which is fine -assert.doesNotThrow(test(undefined)); +function invalidCallbackThrowsTests() { + callbackThrowValues.forEach((value) => { + assert.throws(testMakeCallback(value), cbTypeError); + }); +} -// Anything else should throw -assert.throws(test(null)); -assert.throws(test(true)); -assert.throws(test(false)); -assert.throws(test(1)); -assert.throws(test(0)); -assert.throws(test('foo')); -assert.throws(test(/foo/)); -assert.throws(test([])); -assert.throws(test({})); +invalidCallbackThrowsTests(); diff --git a/test/parallel/test-fs-makeStatsCallback.js b/test/parallel/test-fs-makeStatsCallback.js new file mode 100644 index 00000000000000..67e6b18dd3d4f7 --- /dev/null +++ b/test/parallel/test-fs-makeStatsCallback.js @@ -0,0 +1,27 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs'); +const cbTypeError = /^TypeError: "callback" argument must be a function$/; +const callbackThrowValues = [null, true, false, 0, 1, 'foo', /foo/, [], {}]; + +function testMakeStatsCallback(cb) { + return function() { + // fs.stat() calls makeStatsCallback() on its second argument + fs.stat(__filename, cb); + }; +} + +// Verify the case where a callback function is provided +assert.doesNotThrow(testMakeStatsCallback(common.noop)); + +// Passing undefined/nothing calls rethrow() internally +assert.doesNotThrow(testMakeStatsCallback()); + +function invalidCallbackThrowsTests() { + callbackThrowValues.forEach((value) => { + assert.throws(testMakeStatsCallback(value), cbTypeError); + }); +} + +invalidCallbackThrowsTests();