Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

test: add common.mustCall function

Verifies that the callback gets invoked <n> times during the lifetime of the
test script.
  • Loading branch information...
commit d0e6c3f5a644e4f84e80e9081d28570bf7477391 1 parent 7bd84de
@bnoordhuis bnoordhuis authored
Showing with 39 additions and 4 deletions.
  1. +39 −4 test/common.js
View
43 test/common.js
@@ -141,8 +141,43 @@ process.on('exit', function() {
});
-// This function allows one two run an HTTP test agaist both HTTPS and
-// normal HTTP modules. This ensures they fit the same API.
-exports.httpTest = function httpTest(cb) {
-};
+var mustCallChecks = [];
+
+
+function runCallChecks() {
+ var failed = mustCallChecks.filter(function(context) {
+ return context.actual !== context.expected;
+ });
+
+ failed.forEach(function(context) {
+ console.log('Mismatched %s function calls. Expected %d, actual %d.',
+ context.name,
+ context.expected,
+ context.actual);
+ console.log(context.stack.split('\n').slice(2).join('\n'));
+ });
+
+ if (failed.length) process.exit(1);
+}
+
+exports.mustCall = function(fn, expected) {
+ if (typeof expected !== 'number') expected = 1;
+
+ var context = {
+ expected: expected,
+ actual: 0,
+ stack: (new Error).stack,
+ name: fn.name || '<anonymous>'
+ };
+
+ // add the exit listener only once to avoid listener leak warnings
+ if (mustCallChecks.length === 0) process.on('exit', runCallChecks);
+
+ mustCallChecks.push(context);
+
+ return function() {
+ context.actual++;
+ return fn.apply(this, arguments);
+ };
+};
Please sign in to comment.
Something went wrong with that request. Please try again.