| Index: test/mjsunit/harmony/reflect-construct.js
|
| diff --git a/test/mjsunit/harmony/reflect-construct.js b/test/mjsunit/harmony/reflect-construct.js
|
| index 8e43b19a34269e3687ad9bc7f43cf1bb5239e535..14f04b1a3ed16dc8efb54c48059fc6cce8ace746 100644
|
| --- a/test/mjsunit/harmony/reflect-construct.js
|
| +++ b/test/mjsunit/harmony/reflect-construct.js
|
| @@ -284,3 +284,94 @@
|
| assertTrue(o.__proto__ === g.prototype);
|
| assertTrue(o.__proto__ !== f.prototype);
|
| })();
|
| +
|
| +(function () {
|
| + var realm1 = Realm.create();
|
| + var realm2 = Realm.create();
|
| +
|
| + var well_known_intrinsic_constructors = [
|
| + "Array",
|
| + "ArrayBuffer",
|
| + "Boolean",
|
| + ["DataView", [new ArrayBuffer()]],
|
| + "Date",
|
| + // "Error",
|
| + // "EvalError",
|
| + "Float32Array",
|
| + "Float64Array",
|
| + "Function",
|
| + "((function*(){}).constructor)", // GeneratorFunction
|
| + "Int8Array",
|
| + "Int16Array",
|
| + "Int32Array",
|
| + "Map",
|
| + "Number",
|
| + "Object",
|
| + // "Promise",
|
| + // "RangeError",
|
| + // "ReferenceError",
|
| + "RegExp",
|
| + "Set",
|
| + "String",
|
| + // "SyntaxError",
|
| + // %TypedArray%?
|
| + // "TypeError",
|
| + "Uint8Array",
|
| + "Uint8ClampedArray",
|
| + "Uint16Array",
|
| + "Uint32Array",
|
| + // "URIError",
|
| + "WeakMap",
|
| + "WeakSet"
|
| + ];
|
| +
|
| + function getname(v) {
|
| + return typeof v === "string" ? v : v[0];
|
| + }
|
| +
|
| + function getargs(v) {
|
| + return typeof v === "string" ? [] : v[1];
|
| + }
|
| +
|
| + function test_intrinsic_prototype(name) {
|
| + var own = Realm.eval(realm1, name);
|
| +
|
| + // Ensure that constructor.prototype is non-writable, non-configurable.
|
| + var desc = Object.getOwnPropertyDescriptor(own, "prototype");
|
| + assertFalse(desc.configurable, name);
|
| + assertFalse(desc.writable, name);
|
| + }
|
| +
|
| + for (var intrinsic of well_known_intrinsic_constructors) {
|
| + test_intrinsic_prototype(getname(intrinsic));
|
| + }
|
| +
|
| + function function_with_non_instance_prototype(realm) {
|
| + var f = Realm.eval(realm, "(function(){})");
|
| + f.prototype = 1;
|
| + return f;
|
| + }
|
| +
|
| + function test_intrinsic_default(realm, name, args, convert) {
|
| + var own = Realm.eval(realm1, name);
|
| + var other = Realm.eval(realm, name);
|
| + var o = Reflect.construct(
|
| + convert(own), args, function_with_non_instance_prototype(realm));
|
| +
|
| + // Ensure the intrisicDefaultProto is fetched from the correct realm.
|
| + assertTrue(realm == realm1 || o.__proto__ !== own.prototype, [...arguments]);
|
| + assertTrue(o.__proto__ === other.prototype, [...arguments]);
|
| + }
|
| +
|
| + function test_all(test, convert) {
|
| + for (var intrinsic of well_known_intrinsic_constructors) {
|
| + for (var realm of [realm1, realm2]) {
|
| + test(realm, getname(intrinsic), getargs(intrinsic), convert);
|
| + }
|
| + }
|
| + }
|
| +
|
| + test_all(test_intrinsic_default, (v)=>v);
|
| + test_all(test_intrinsic_default,
|
| + (v)=>{ "use strict"; return class extends v {}});
|
| +})();
|
|
|