deno.land / std@0.166.0 / node / _tools / test / parallel / test-util-inherits.js

test-util-inherits.js
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// deno-fmt-ignore-file// deno-lint-ignore-file
// Copyright Joyent and Node contributors. All rights reserved. MIT license.// Taken from Node 18.12.0// This file is automatically generated by "node/_tools/setup.ts". Do not modify this file manually
'use strict';
require('../common');const assert = require('assert');const { inherits } = require('util');
// Super constructorfunction A() { this._a = 'a';}A.prototype.a = function() { return this._a; };
// One level of inheritancefunction B(value) { A.call(this); this._b = value;}inherits(B, A);B.prototype.b = function() { return this._b; };
assert.deepStrictEqual( Object.getOwnPropertyDescriptor(B, 'super_'), { value: A, enumerable: false, configurable: true, writable: true });
const b = new B('b');assert.strictEqual(b.a(), 'a');assert.strictEqual(b.b(), 'b');assert.strictEqual(b.constructor, B);
// Two levels of inheritancefunction 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);
// Inherits can be called after setting prototype propertiesfunction D() { C.call(this); this._d = 'd';}
D.prototype.d = function() { return this._d; };inherits(D, C);
assert.strictEqual(D.super_, C);
const d = new D();assert.strictEqual(d.c(), 'c');assert.strictEqual(d.d(), 'd');assert.strictEqual(d.constructor, D);
// ES6 classes can inherit from a constructor functionclass E { constructor() { D.call(this); this._e = 'e'; } e() { return this._e; }}inherits(E, D);
assert.strictEqual(E.super_, D);
const e = new E();assert.strictEqual(e.getValue(), 'abc');assert.strictEqual(e.d(), 'd');assert.strictEqual(e.e(), 'e');assert.strictEqual(e.constructor, E);
// Should throw with invalid argumentsassert.throws(() => { inherits(A, {});}, { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError', message: 'The "superCtor.prototype" property must be of type object. ' + 'Received undefined'});
assert.throws(() => { inherits(A, null);}, { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError', message: 'The "superCtor" argument must be of type function. ' + 'Received null'});
assert.throws(() => { inherits(null, A);}, { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError', message: 'The "ctor" argument must be of type function. Received null'});
std

Version Info

Tagged at
a year ago