* Add new.target transform * Catch new.target under only an arrow function * More unsupported reflect.construct cases * Fix node 4 test * Do not transform Methods * More tests * Properly setup function inheritance test * Tests tests tests * Fix ES6 class's new.target * Remove expected output thats supposed to throw.
41 lines
766 B
JavaScript
41 lines
766 B
JavaScript
const targets = [];
|
|
function Foo() {
|
|
targets.push(new.target);
|
|
}
|
|
|
|
function Bar() {
|
|
Foo.call(this);
|
|
}
|
|
Bar.prototype = Object.create(Foo.prototype, {
|
|
constructor: {
|
|
value: Bar,
|
|
writable: true,
|
|
configurable: true,
|
|
}
|
|
});
|
|
|
|
function Baz() {}
|
|
|
|
Reflect.construct(Foo, []);
|
|
Reflect.construct(Foo, [], Bar);
|
|
Reflect.construct(Bar, []);
|
|
Reflect.construct(Bar, [], Baz);
|
|
Reflect.construct(Foo, [], Baz);
|
|
|
|
assert.equal(targets[0], Foo);
|
|
|
|
assert.equal(targets[1], Bar);
|
|
|
|
assert.throws(() => {
|
|
// Wish we could support this...
|
|
// Then again, this is what a transformed class does.
|
|
assert.equal(targets[2], undefined);
|
|
});
|
|
|
|
assert.equal(targets[3], undefined);
|
|
|
|
assert.throws(() => {
|
|
// Wish we could support this...
|
|
assert.equal(targets[4], Baz);
|
|
});
|