| 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"); |