blob: e8c0de05cd3377d82c2a160e6ca4e6b567513258 (
plain)
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
|
// First, let's test the trivial. A chain of three works.
class base {
constructor() { }
testChain() {
this.baseCalled = true;
}
}
class middle extends base {
constructor() { super(); }
testChain() {
this.middleCalled = true;
super.testChain();
}
}
class derived extends middle {
constructor() { super(); }
testChain() {
super.testChain();
assertEq(this.middleCalled, true);
assertEq(this.baseCalled, true);
}
}
new derived().testChain();
// Super even chains in a wellbehaved fashion with normal functions.
function bootlegMiddle() { }
bootlegMiddle.prototype = middle.prototype;
new class extends bootlegMiddle {
constructor() { super(); }
testChain() {
super.testChain();
assertEq(this.middleCalled, true);
assertEq(this.baseCalled, true);
}
}().testChain();
// Now let's try out some "long" chains
base.prototype.x = "yeehaw";
let chain = class extends base { constructor() { super(); } }
const CHAIN_LENGTH = 100;
for (let i = 0; i < CHAIN_LENGTH; i++)
chain = class extends chain { constructor() { super(); } }
// Now we poke the chain
let inst = new chain();
inst.testChain();
assertEq(inst.baseCalled, true);
assertEq(inst.x, "yeehaw");
if (typeof reportCompare === 'function')
reportCompare(0,0,"OK");
|