blob: 17670d86e2b7fe2c5607d0b61a9b84238242d680 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
var tests = [
{
name: "Reflect.Set",
body: function () {
var receiver = {};
var fn = function () { };
Object.defineProperty(receiver, 'p', { set: fn });
assert.isFalse(Reflect.set({}, 'p', 42, receiver), "If the receiver object already has an accessor property then [[Set]] will return false");
assert.isFalse(Reflect.set({ p: 43 }, 'p', 42, receiver), "For existing accessor property on receiver [[Set]] returns false even when an own descriptor exists on the target");
}
},
{
name: "Reflect.construct",
body: function () {
var o = {};
var internPrototype;
function fn() {
assert.areEqual(new.target, Array, "The new.target for the invocation should be passed in as Array");
this.o = o;
internPrototype = Object.getPrototypeOf(this);
}
var result = Reflect.construct(fn, [], Array);
assert.areEqual(Object.getPrototypeOf(result), Array.prototype, "Internal proto of the result object should be set according the newTarget");
assert.areEqual(internPrototype, Array.prototype, "This object of the result is created from newTarget parameter and the internal proto is set from it");
assert.areEqual(result.o, o, "Property set to this object during object construction should be retained");
class A1 {
constructor() {
assert.areEqual(new.target, Array, "The new.target for the base class should be passed in as Array");
assert.isTrue(this instanceof Array, "The internal proto of the base class's this should be set to the newTarget's prototype");
}
}
var result = Reflect.construct(A1, [], Array);
class A2 {}
class B2 extends A2 {
constructor() {
assert.areEqual(new.target, Array, "The new.target for the derived class should be passed in as Array");
super(); /* Initialize this */
assert.isTrue(this instanceof Array, "The internal proto of the derived class's this should be set to the newTarget's prototype");
}
}
var result = Reflect.construct(B2, [], Array);
class A3 {}
class B3 extends A3 {
constructor() {
assert.areEqual(new.target, B3, "The new.target for the derived class should be the same as the newTarget passed in to the construct call");
super();
assert.isTrue(this instanceof A3, "This should be properly initialized with the right base class");
assert.isTrue(this instanceof B3, "This should be properly instantiated using the derived class object");
}
}
var result = Reflect.construct(B3, [], B3);
}
}
];
testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });