Skip to content

Commit

Permalink
More tests
Browse files Browse the repository at this point in the history
  • Loading branch information
leobalter committed Jun 3, 2019
1 parent 9b2be0c commit d6505e9
Show file tree
Hide file tree
Showing 29 changed files with 729 additions and 17 deletions.
2 changes: 1 addition & 1 deletion test/built-ins/FinalizationGroup/constructor.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ description: >

assert.sameValue(
typeof FinalizationGroup, 'function',
'typeof FinalizationGroup is "function"'
'typeof FinalizationGroup is function'
);
30 changes: 30 additions & 0 deletions test/built-ins/FinalizationGroup/instance-extensible.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright (C) 2019 Leo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-finalization-group-target
description: Instances of FinalizationGroup are extensible
info: |
FinalizationGroup ( cleanupCallback )
...
3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget, "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
...
9. Return finalizationGroup.
OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
...
2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
3. Return ObjectCreate(proto, internalSlotsList).
ObjectCreate ( proto [ , internalSlotsList ] )
4. Set obj.[[Prototype]] to proto.
5. Set obj.[[Extensible]] to true.
6. Return obj.
features: [FinalizationGroup, Reflect]
---*/

var fg = new FinalizationGroup(function() {});
assert.sameValue(Object.isExtensible(fg), true);
2 changes: 1 addition & 1 deletion test/built-ins/FinalizationGroup/length.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ includes: [propertyHelper.js]
features: [FinalizationGroup]
---*/

verifyProperty(FinalizationGroup, "length", {
verifyProperty(FinalizationGroup, 'length', {
value: 1,
writable: false,
enumerable: false,
Expand Down
4 changes: 2 additions & 2 deletions test/built-ins/FinalizationGroup/name.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ includes: [propertyHelper.js]
features: [FinalizationGroup]
---*/

verifyProperty(FinalizationGroup, "name", {
value: "FinalizationGroup",
verifyProperty(FinalizationGroup, 'name', {
value: 'FinalizationGroup',
writable: false,
enumerable: false,
configurable: true
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// Copyright (C) 2019 Leo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-finalization-group-target
description: >
[[Prototype]] defaults to %FinalizationGroupPrototype% if NewTarget.prototype is not an object.
info: |
FinalizationGroup ( cleanupCallback )
...
3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget, "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
...
9. Return finalizationGroup.
OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
...
2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
3. Return ObjectCreate(proto, internalSlotsList).
GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
3. Let proto be ? Get(constructor, 'prototype').
4. If Type(proto) is not Object, then
a. Let realm be ? GetFunctionRealm(constructor).
b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
5. Return proto.
features: [FinalizationGroup, Reflect.construct, Symbol]
---*/

var fg;
function newTarget() {}
function fn() {}

newTarget.prototype = undefined;
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is undefined');

newTarget.prototype = null;
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is null');

newTarget.prototype = true;
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is a Boolean');

newTarget.prototype = '';
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is a String');

newTarget.prototype = Symbol();
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is a Symbol');

newTarget.prototype = 1;
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype, 'newTarget.prototype is a Number');
2 changes: 1 addition & 1 deletion test/built-ins/FinalizationGroup/prop-desc.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ includes: [propertyHelper.js]
features: [FinalizationGroup]
---*/

verifyProperty(this, "FinalizationGroup", {
verifyProperty(this, 'FinalizationGroup', {
enumerable: false,
writable: true,
configurable: true
Expand Down
59 changes: 59 additions & 0 deletions test/built-ins/FinalizationGroup/proto-from-ctor-realm.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Copyright (C) 2019 Leo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-finalization-group-target
description: Default [[Prototype]] value derived from realm of the newTarget
info: |
FinalizationGroup ( cleanupCallback )
...
3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget, "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
...
9. Return finalizationGroup.
OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
...
2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
3. Return ObjectCreate(proto, internalSlotsList).
GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
3. Let proto be ? Get(constructor, 'prototype').
4. If Type(proto) is not Object, then
a. Let realm be ? GetFunctionRealm(constructor).
b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
5. Return proto.
features: [FinalizationGroup, cross-realm, Reflect]
---*/

var other = $262.createRealm().global;
var newTarget = new other.Function();
function fn() {}
var fg;

newTarget.prototype = undefined;
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is undefined');

newTarget.prototype = null;
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is null');

newTarget.prototype = true;
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is a Boolean');

newTarget.prototype = '';
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is a String');

newTarget.prototype = Symbol();
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is a Symbol');

newTarget.prototype = 1;
fg = Reflect.construct(FinalizationGroup, [fn], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), other.FinalizationGroup.prototype, 'newTarget.prototype is a Number');

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright (C) 2019 Leo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-finalization-group-target
description: >
Return abrupt from getting the NewTarget prototype
info: |
FinalizationGroup ( cleanupCallback )
...
3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget, "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
...
9. Return finalizationGroup.
OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
...
2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
3. Return ObjectCreate(proto, internalSlotsList).
GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
3. Let proto be ? Get(constructor, 'prototype').
features: [FinalizationGroup, Reflect.construct]
---*/

var calls = 0;
var newTarget = function() {}.bind(null);
Object.defineProperty(newTarget, 'prototype', {
get: function() {
calls += 1;
throw new Test262Error();
}
});

assert.throws(Test262Error, function() {
Reflect.construct(FinalizationGroup, [{}], newTarget);
});

assert.sameValue(calls, 1);
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Copyright (C) 2019 Leo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-finalization-group-target
description: >
The [[Prototype]] internal slot is computed from NewTarget.
info: |
FinalizationGroup ( cleanupCallback )
...
3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget, "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
...
9. Return finalizationGroup.
OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
...
2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
3. Return ObjectCreate(proto, internalSlotsList).
GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
3. Let proto be ? Get(constructor, 'prototype').
4. If Type(proto) is not Object, then
a. Let realm be ? GetFunctionRealm(constructor).
b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
5. Return proto.
features: [FinalizationGroup, Reflect.construct]
---*/

var fg;

fg = Reflect.construct(FinalizationGroup, [function() {}], Object);
assert.sameValue(Object.getPrototypeOf(fg), Object.prototype, 'NewTarget is built-in Object constructor');

var newTarget = function() {}.bind(null);
Object.defineProperty(newTarget, 'prototype', {
get: function() {
return Array.prototype;
}
});
fg = Reflect.construct(FinalizationGroup, [function() {}], newTarget);
assert.sameValue(Object.getPrototypeOf(fg), Array.prototype, 'NewTarget is BoundFunction with accessor');
33 changes: 33 additions & 0 deletions test/built-ins/FinalizationGroup/prototype-from-newtarget.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright (C) 2019 Leo Balter. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-finalization-group-target
description: >
The [[Prototype]] internal slot is computed from NewTarget.
info: |
FinalizationGroup ( cleanupCallback )
...
3. Let finalizationGroup be ? OrdinaryCreateFromConstructor(NewTarget, "%FinalizationGroupPrototype%", « [[Realm]], [[CleanupCallback]], [[Cells]], [[IsFinalizationGroupCleanupJobActive]] »).
...
9. Return finalizationGroup.
OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
...
2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
3. Return ObjectCreate(proto, internalSlotsList).
GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
3. Let proto be ? Get(constructor, 'prototype').
4. If Type(proto) is not Object, then
a. Let realm be ? GetFunctionRealm(constructor).
b. Set proto to realm's intrinsic object named intrinsicDefaultProto.
5. Return proto.
features: [FinalizationGroup]
---*/

var fg = new FinalizationGroup(function() {});
assert.sameValue(Object.getPrototypeOf(fg), FinalizationGroup.prototype);
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: >
`Symbol.toStringTag` property descriptor
info: |
The initial value of the @@toStringTag property is the String value
"FinalizationGroup".
'FinalizationGroup'.
This property has the attributes { [[Writable]]: false, [[Enumerable]]:
false, [[Configurable]]: true }.
Expand All @@ -16,7 +16,7 @@ features: [FinalizationGroup, Symbol, Symbol.toStringTag]
---*/

verifyProperty(FinalizationGroup.prototype, Symbol.toStringTag, {
value: "FinalizationGroup",
value: 'FinalizationGroup',
writable: false,
enumerable: false,
configurable: true
Expand Down
2 changes: 1 addition & 1 deletion test/built-ins/FinalizationGroup/prototype/constructor.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ includes: [propertyHelper.js]
features: [FinalizationGroup]
---*/

verifyProperty(FinalizationGroup.prototype, "constructor", {
verifyProperty(FinalizationGroup.prototype, 'constructor', {
value: FinalizationGroup,
writable: true,
enumerable: false,
Expand Down
2 changes: 1 addition & 1 deletion test/built-ins/FinalizationGroup/prototype/prop-desc.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ features: [FinalizationGroup]
includes: [propertyHelper.js]
---*/

verifyProperty(FinalizationGroup, "prototype", {
verifyProperty(FinalizationGroup, 'prototype', {
writable: false,
enumerable: false,
configurable: false
Expand Down
Loading

0 comments on commit d6505e9

Please sign in to comment.