blob: b66f9be170196623f95a5b9b6ed0619745081d97 [file] [log] [blame]
function testBase(base) {
class instance extends base {
constructor(inst, one) {
super(inst, one);
}
}
let inst = new instance(instance, 1);
assertEq(Object.getPrototypeOf(inst), instance.prototype);
assertEq(inst.calledBase, true);
class defaultInstance extends base { }
let defInst = new defaultInstance(defaultInstance, 1);
assertEq(Object.getPrototypeOf(defInst), defaultInstance.prototype);
assertEq(defInst.calledBase, true);
}
class base {
// Base class must be [[Construct]]ed, as you cannot [[Call]] a class
// constructor
constructor(nt, one) {
assertEq(new.target, nt);
// Check argument ordering
assertEq(one, 1);
this.calledBase = true;
}
}
testBase(base);
testBase(class extends base {
constructor(nt, one) {
// Every step of the way, new.target and args should be right
assertEq(new.target, nt);
assertEq(one, 1);
super(nt, one);
}
});
function baseFunc(nt, one) {
assertEq(new.target, nt);
assertEq(one, 1);
this.calledBase = true;
}
testBase(baseFunc);
let handler = {};
let p = new Proxy(baseFunc, handler);
testBase(p);
handler.construct = (target, args, nt) => Reflect.construct(target, args, nt);
testBase(p);
if (typeof reportCompare === 'function')
reportCompare(0,0,"OK");