* @param {function} ctor Constructor function which needs to inherit the
* prototype.
* @param {function} superCtor Constructor function to inherit prototype from.
+ * @throws {TypeError} Will error if either constructor is null, or if
+ * the super constructor lacks a prototype.
*/
exports.inherits = function(ctor, superCtor) {
+
+ if (ctor === undefined || ctor === null)
+ throw new TypeError('The constructor to `inherits` must not be ' +
+ 'null or undefined.');
+
+ if (superCtor === undefined || superCtor === null)
+ throw new TypeError('The super constructor to `inherits` must not ' +
+ 'be null or undefined.');
+
+ if (superCtor.prototype === undefined)
+ throw new TypeError('The super constructor to `inherits` must ' +
+ 'have a prototype.');
+
ctor.super_ = superCtor;
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
assert.deepEqual(util._extend({a:1}, false), {a:1});
assert.deepEqual(util._extend({a:1}, {b:2}), {a:1, b:2});
assert.deepEqual(util._extend({a:1, b:2}, {b:3}), {a:1, b:3});
+
+// inherits
+var ctor = function() {};
+assert.throws(function() { util.inherits(ctor, {}) }, TypeError);
+assert.throws(function() { util.inherits(ctor, null) }, TypeError);
+assert.throws(function() { util.inherits(null, ctor) }, TypeError);
+assert.doesNotThrow(function() { util.inherits(ctor, ctor) }, TypeError);