Skip to content

Commit

Permalink
Merge pull request #855 from anba/fix-async-sab-class-tests
Browse files Browse the repository at this point in the history
Change tests for `extends null` and Intl legacy constructor semantics

Ref tc39/ecma262#781
Ref tc39/ecma402#84
  • Loading branch information
leobalter committed Mar 1, 2017
2 parents a266cfa + 878d382 commit 4546006
Show file tree
Hide file tree
Showing 14 changed files with 99 additions and 97 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ testWithTypedArrayConstructors(function(TA) {
compareArray(
new TA([1, 2, 3, 4, 5]).copyWithin(0, 1, -Infinity),
[1, 2, 3, 4, 5]
)
),
'[1, 2, 3, 4, 5].copyWithin(0, 1, -Infinity) -> [1, 2, 3, 4, 5]'
);

Expand All @@ -57,7 +57,7 @@ testWithTypedArrayConstructors(function(TA) {
compareArray(
new TA([1, 2, 3, 4, 5]).copyWithin(0, -2, -Infinity),
[1, 2, 3, 4, 5]
)
),
'[1, 2, 3, 4, 5].copyWithin(0, -2, -Infinity) -> [1, 2, 3, 4, 5]'
);

Expand All @@ -73,7 +73,7 @@ testWithTypedArrayConstructors(function(TA) {
compareArray(
new TA([1, 2, 3, 4, 5]).copyWithin(0, -9, -Infinity),
[1, 2, 3, 4, 5]
)
),
'[1, 2, 3, 4, 5].copyWithin(0, -9, -Infinity) -> [1, 2, 3, 4, 5]'
);

Expand All @@ -89,7 +89,7 @@ testWithTypedArrayConstructors(function(TA) {
compareArray(
new TA([1, 2, 3, 4, 5]).copyWithin(-3, -2, -Infinity),
[1, 2, 3, 4, 5]
)
),
'[1, 2, 3, 4, 5].copyWithin(-3, -2, -Infinity) -> [1, 2, 3, 4, 5]'
);

Expand All @@ -105,7 +105,7 @@ testWithTypedArrayConstructors(function(TA) {
compareArray(
new TA([1, 2, 3, 4, 5]).copyWithin(-7, -8, -Infinity),
[1, 2, 3, 4, 5]
)
),
'[1, 2, 3, 4, 5].copyWithin(-7, -8, -Infinity) -> [1, 2, 3, 4, 5]'
);
});
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ testWithTypedArrayConstructors(function(TA) {
assert(
compareArray(
new TA([1, 2, 3, 4, 5]).copyWithin(0, -Infinity),
[0, 1, 2, 3]
[1, 2, 3, 4, 5]
),
'[1, 2, 3, 4, 5]).copyWithin(0, -Infinity) -> [1, 2, 3, 4, 5]'
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ testWithTypedArrayConstructors(function(TA) {
assert(compareArray(sample, [1, 2, 42, 43]), "sample is SAB-backed, offset: 2, result: " + sample);
assert.sameValue(result, undefined, "returns undefined");

var sab1 = new SharedArrayBuffer(2 * TA.BYTES_PER_ELEMENT);
var sab1 = new SharedArrayBuffer(2 * other.BYTES_PER_ELEMENT);
src = new other(sab1);
src[0] = 42;
src[1] = 43;
Expand Down
7 changes: 6 additions & 1 deletion test/intl402/DateTimeFormat/12.1.1_1.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@

/*---
es5id: 12.1.1_1
description: Tests that the this-value is ignored in DateTimeFormat.
description: >
Tests that the this-value is ignored in DateTimeFormat, if the this-value
isn't a DateTimeFormat instance.
author: Norbert Lindenberg
includes: [testIntl.js]
---*/

testWithIntlConstructors(function (Constructor) {
if (Constructor === Intl.DateTimeFormat)
return true;

var obj, newObj;

// variant 1: use constructor in a "new" expression
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ author: Norbert Lindenberg
includes: [testBuiltInObject.js]
---*/

testBuiltInObject(new Intl.DateTimeFormat().format, true, false, [], 0);
testBuiltInObject(new Intl.DateTimeFormat().format, true, false, [], 1);
7 changes: 6 additions & 1 deletion test/intl402/NumberFormat/11.1.1_1.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@

/*---
es5id: 11.1.1_1
description: Tests that the this-value is ignored in NumberFormat.
description: >
Tests that the this-value is ignored in NumberFormat, if the this-value
isn't a NumberFormat instance.
author: Norbert Lindenberg
includes: [testIntl.js]
---*/

testWithIntlConstructors(function (Constructor) {
if (Constructor === Intl.NumberFormat)
return true;

var obj, newObj;

// variant 1: use constructor in a "new" expression
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@ var sup = {
}

var child = {
__proto__: sup,
async method() {
var x = await super.method();
assert.sameValue(x, 'sup');
}
}

Object.setPrototypeOf(child, sup);

child.method().then($DONE, $DONE);
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@ var sup = {
}

var child = {
__proto__: sup,
async method(x = super.method()) {
var y = await x;
assert.sameValue(y, 'sup');
}
}

Object.setPrototypeOf(child, sup);

child.method().then($DONE, $DONE);

Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ assert.throws(TypeError, function() {
});

var calledExecutor = false;
var executorArguments;

var prom1 = new Prom(function(resolve) {
var prom1 = new Prom(function() {
calledExecutor = true;
assert.sameValue(arguments.length, 2);
assert(arguments[0] === Promise.resolve);
assert(arguments[1] === Promise.reject);
executorArguments = arguments;
});

assert(calledExecutor);
assert.sameValue(executorArguments.length, 2);
assert.sameValue(typeof executorArguments[0], "function");
assert.sameValue(typeof executorArguments[1], "function");
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,30 @@
esid: sec-runtime-semantics-classdefinitionevaluation
es6id: 14.5.14
description: >
Runtime Semantics: ClassDefinitionEvaluation
The constructor of a null-extending class can contain an explicit return value.
info: |
Runtime Semantics: ClassDefinitionEvaluation
If superclass is null, then
Let protoParent be null.
Let constructorParent be the intrinsic object %FunctionPrototype%.
[...]
15. If ClassHeritageopt is present, then set F's [[ConstructorKind]] internal slot to "derived".
[...]
9.2.2 [[Construct]]
[...]
13. If result.[[Type]] is return, then
a. If Type(result.[[Value]]) is Object, return NormalCompletion(result.[[Value]]).
[...]
---*/
var obj;

class Foo extends null {
constructor() {
return {};
return obj = {};
}
}

var f = new Foo();

assert.sameValue(f, obj);
assert.sameValue(Object.getPrototypeOf(f), Object.prototype);
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,9 @@
/*---
esid: sec-runtime-semantics-classdefinitionevaluation
description: >
The `this` value of a null-extending class is automatically initialized,
obviating the need for an explicit return value in the constructor.
The `this` value of a null-extending class isn't automatically initialized,
which makes it necessary to have an explicit return value in the constructor.
info: |
The behavior under test was introduced in the "ES2017" revision of the
specification and conflicts with prior editions.
Runtime Semantics: ClassDefinitionEvaluation
[...]
Expand All @@ -18,24 +15,25 @@ info: |
[...]
b. Let superclass be the result of evaluating ClassHeritage.
[...]
15. If ClassHeritageopt is present and superclass is not null, then set F's
[[ConstructorKind]] internal slot to "derived".
15. If ClassHeritageopt is present, then set F's [[ConstructorKind]] internal slot to "derived".
[...]
9.2.2 [[Construct]]
[...]
5. If kind is "base", then
a. Let thisArgument be ? OrdinaryCreateFromConstructor(newTarget,
"%ObjectPrototype%").
[...]
15. Return ? envRec.GetThisBinding().
8.1.1.3.4 GetThisBinding ( )
[...]
3. If envRec.[[ThisBindingStatus]] is "uninitialized", throw a ReferenceError exception.
[...]
---*/

class Foo extends null {
constructor() {}
constructor() {
}
}

var foo = new Foo();

assert.sameValue(Object.getPrototypeOf(foo), Foo.prototype);
assert.throws(ReferenceError, function() {
new C();
});
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
/*---
esid: sec-runtime-semantics-classdefinitionevaluation
description: >
The `this` value of a null-extending class is automatically initialized,
preventing the use of `super` from within the constructor.
Attempting to call `super()` in a null-extending class throws a TypeError,
because %FunctionPrototype% cannot be called as constructor function.
info: |
Runtime Semantics: ClassDefinitionEvaluation
Expand All @@ -14,35 +14,28 @@ info: |
6. Else,
[...]
b. Let superclass be the result of evaluating ClassHeritage.
[...]
e. If superclass is null, then
[...]
ii. Let constructorParent be the intrinsic object %FunctionPrototype%.
[...]
15. If ClassHeritageopt is present and superclass is not null, then set F's
[[ConstructorKind]] internal slot to "derived".
[...]
9.2.2 [[Construct]]
[...]
5. If kind is "base", then
a. Let thisArgument be ? OrdinaryCreateFromConstructor(newTarget,
"%ObjectPrototype%").
15. Let constructorInfo be the result of performing DefineMethod for constructor with arguments proto and constructorParent as the optional functionPrototype argument.
[...]
12.3.5.1 Runtime Semantics: Evaluation
SuperCall : super Arguments
[...]
6. Let result be ? Construct(func, argList, newTarget).
7. Let thisER be GetThisEnvironment( ).
8. Return ? thisER.BindThisValue(result).
3. Let func be ? GetSuperConstructor().
4. Let argList be ArgumentListEvaluation of Arguments.
[...]
8.1.1.3.1 BindThisValue
12.3.5.2 Runtime Semantics: GetSuperConstructor ( )
[...]
3. If envRec.[[ThisBindingStatus]] is "initialized", throw a ReferenceError
exception.
4. Set envRec.[[ThisValue]] to V.
5. Set envRec.[[ThisBindingStatus]] to "initialized".
5. Let superConstructor be ! activeFunction.[[GetPrototypeOf]]().
6. If IsConstructor(superConstructor) is false, throw a TypeError exception.
[...]
---*/

Expand All @@ -52,7 +45,7 @@ var reachable = 0;
class C extends null {
constructor() {
reachable += 1;
super();
super(unreachable += 1);
unreachable += 1;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,37 @@
/*---
esid: sec-runtime-semantics-classdefinitionevaluation
description: >
The `this` value of a null-extending class is automatically initialized
The `this` value of a null-extending class isn't automatically initialized
info: |
The behavior under test was introduced in the "ES2017" revision of the
specification and conflicts with prior editions.
Runtime Semantics: ClassDefinitionEvaluation
[...]
5. If ClassHeritageopt is not present, then
[...]
6. Else,
[...]
b. Let superclass be the result of evaluating ClassHeritage.
[...]
15. If ClassHeritageopt is present and superclass is not null, then set F's
[[ConstructorKind]] internal slot to "derived".
15. If ClassHeritageopt is present, then set F's [[ConstructorKind]] internal slot to "derived".
[...]
9.2.2 [[Construct]]
12.2.2.1 Runtime Semantics: Evaluation
PrimaryExpression : this
1. Return ? ResolveThisBinding( ).
8.3.4 ResolveThisBinding ( )
[...]
2. Return ? envRec.GetThisBinding().
8.1.1.3.4 GetThisBinding ( )
[...]
5. If kind is "base", then
a. Let thisArgument be ? OrdinaryCreateFromConstructor(newTarget,
"%ObjectPrototype%").
3. If envRec.[[ThisBindingStatus]] is "uninitialized", throw a ReferenceError exception.
[...]
---*/

var thisVal, instance;

class C extends null {
constructor() {
thisVal = this;
// Use an arrow function to access the `this` binding of the class constructor.
assert.throws(ReferenceError, () => {
this;
});
}
}

instance = new C();

assert.sameValue(instance instanceof C, true);
assert.sameValue(instance, thisVal);
assert.throws(ReferenceError, function() {
new C();
});
Loading

0 comments on commit 4546006

Please sign in to comment.