mirror of https://github.com/lukechilds/node.git
Browse Source
inherits is used in lib and tests but its functionality itself is not tested yet. PR-URL: https://github.com/nodejs/node/pull/3507 Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>process-exit-stdio-flushing
Michaël Zasso
9 years ago
2 changed files with 46 additions and 7 deletions
@ -0,0 +1,46 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
require('../common'); |
||||
|
const assert = require('assert'); |
||||
|
const inherits = require('util').inherits; |
||||
|
|
||||
|
// super constructor
|
||||
|
function A() { |
||||
|
this._a = 'a'; |
||||
|
} |
||||
|
A.prototype.a = function() { return this._a; }; |
||||
|
|
||||
|
// one level of inheritance
|
||||
|
function B(value) { |
||||
|
A.call(this); |
||||
|
this._b = value; |
||||
|
} |
||||
|
inherits(B, A); |
||||
|
B.prototype.b = function() { return this._b; }; |
||||
|
|
||||
|
assert.strictEqual(B.super_, A); |
||||
|
|
||||
|
const b = new B('b'); |
||||
|
assert.strictEqual(b.a(), 'a'); |
||||
|
assert.strictEqual(b.b(), 'b'); |
||||
|
assert.strictEqual(b.constructor, B); |
||||
|
|
||||
|
// two levels of inheritance
|
||||
|
function C() { |
||||
|
B.call(this, 'b'); |
||||
|
this._c = 'c'; |
||||
|
} |
||||
|
inherits(C, B); |
||||
|
C.prototype.c = function() { return this._c; }; |
||||
|
C.prototype.getValue = function() { return this.a() + this.b() + this.c(); }; |
||||
|
|
||||
|
assert.strictEqual(C.super_, B); |
||||
|
|
||||
|
const c = new C(); |
||||
|
assert.strictEqual(c.getValue(), 'abc'); |
||||
|
assert.strictEqual(c.constructor, C); |
||||
|
|
||||
|
// should throw with invalid arguments
|
||||
|
assert.throws(function() { inherits(A, {}); }, TypeError); |
||||
|
assert.throws(function() { inherits(A, null); }, TypeError); |
||||
|
assert.throws(function() { inherits(null, A); }, TypeError); |
Loading…
Reference in new issue