summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--harness/typeCoercion.js16
-rw-r--r--test/built-ins/BigInt/prototype/valueOf/return.js18
-rw-r--r--test/built-ins/BigInt/prototype/valueOf/this-value-err.js17
-rw-r--r--test/built-ins/BigInt/prototype/valueOf/this-value-invalid-object-throws.js30
-rw-r--r--test/built-ins/BigInt/prototype/valueOf/this-value-invalid-primitive-throws.js63
-rw-r--r--test/built-ins/BigInt/prototype/valueOf/this-value.js18
6 files changed, 111 insertions, 51 deletions
diff --git a/harness/typeCoercion.js b/harness/typeCoercion.js
index 3950d4b2c..ed03805d7 100644
--- a/harness/typeCoercion.js
+++ b/harness/typeCoercion.js
@@ -407,19 +407,3 @@ function testNotCoercibleToBigInt(test) {
testStringValue("0xg");
testStringValue("1n");
}
-
-function testCoercibleToBigIntThisValue(value, test) {
- test(value);
- test(Object(value));
-}
-
-function testNotCoercibleToBigIntThisValue(test) {
- test(undefined);
- test(null);
- test(true);
- test(false);
- test("");
- test(Symbol(""));
- test(0);
- test({});
-}
diff --git a/test/built-ins/BigInt/prototype/valueOf/return.js b/test/built-ins/BigInt/prototype/valueOf/return.js
new file mode 100644
index 000000000..de7336057
--- /dev/null
+++ b/test/built-ins/BigInt/prototype/valueOf/return.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2017 Robin Templeton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-bigint.prototype.valueof
+description: >
+ BigInt.prototype.valueOf returns the primitive BigInt value.
+info: |
+ BigInt.prototype.valueOf ( )
+
+ Return ? thisBigIntValue(this value).
+features: [BigInt]
+---*/
+
+var valueOf = BigInt.prototype.valueOf;
+
+assert.sameValue(valueOf.call(0n), 0n, "0n");
+assert.sameValue(valueOf.call(Object(0n)), 0n, "Object(0n)");
diff --git a/test/built-ins/BigInt/prototype/valueOf/this-value-err.js b/test/built-ins/BigInt/prototype/valueOf/this-value-err.js
deleted file mode 100644
index b707455e6..000000000
--- a/test/built-ins/BigInt/prototype/valueOf/this-value-err.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2017 Robin Templeton. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-esid: sec-bigint.prototype.valueof
-description: BigInt.prototype.valueOf this value coercion
-info: >
- BigInt.prototype.valueOf ( )
-
- Return ? thisBigIntValue(this value).
-includes: [typeCoercion.js]
-features: [BigInt, arrow-function, Symbol, Symbol.toPrimitive]
----*/
-
-testNotCoercibleToBigIntThisValue(
- (x) => assert.throws(TypeError, () => BigInt.prototype.valueOf.call(x))
-);
diff --git a/test/built-ins/BigInt/prototype/valueOf/this-value-invalid-object-throws.js b/test/built-ins/BigInt/prototype/valueOf/this-value-invalid-object-throws.js
new file mode 100644
index 000000000..90c5b71c1
--- /dev/null
+++ b/test/built-ins/BigInt/prototype/valueOf/this-value-invalid-object-throws.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 Robin Templeton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-bigint.prototype.valueof
+description: >
+ Throws a TypeError if this is an Object without a [[BigIntData]] internal.
+info: |
+ BigInt.prototype.valueOf ( )
+
+ 1. Return ? thisBigIntValue(this value).
+
+ The abstract operation thisBigIntValue(value) performs the following steps:
+
+ 1. If Type(value) is BigInt, return value.
+ 2. If Type(value) is Object and value has a [[BigIntData]] internal slot, then
+ ...
+ 3. Throw a TypeError exception.
+features: [BigInt]
+---*/
+
+var valueOf = BigInt.prototype.valueOf;
+
+assert.throws(TypeError, function() {
+ valueOf.call({});
+}, "{}");
+
+assert.throws(TypeError, function() {
+ valueOf.call(Object(1));
+}, "Object(1)");
diff --git a/test/built-ins/BigInt/prototype/valueOf/this-value-invalid-primitive-throws.js b/test/built-ins/BigInt/prototype/valueOf/this-value-invalid-primitive-throws.js
new file mode 100644
index 000000000..c7379385c
--- /dev/null
+++ b/test/built-ins/BigInt/prototype/valueOf/this-value-invalid-primitive-throws.js
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 Robin Templeton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-bigint.prototype.valueof
+description: >
+ Throws a TypeError if this is not a BigInt neither an Object.
+info: |
+ BigInt.prototype.valueOf ( )
+
+ 1. Return ? thisBigIntValue(this value).
+
+ The abstract operation thisBigIntValue(value) performs the following steps:
+
+ 1. If Type(value) is BigInt, return value.
+ 2. If Type(value) is Object and value has a [[BigIntData]] internal slot, then
+ ...
+ 3. Throw a TypeError exception.
+features: [BigInt, Symbol]
+---*/
+
+var valueOf = BigInt.prototype.valueOf;
+
+assert.throws(TypeError, function() {
+ valueOf.call(undefined);
+}, "undefined");
+
+assert.throws(TypeError, function() {
+ valueOf.call(null);
+}, "null");
+
+assert.throws(TypeError, function() {
+ valueOf.call(false);
+}, "false");
+
+assert.throws(TypeError, function() {
+ valueOf.call(true);
+}, "true");
+
+assert.throws(TypeError, function() {
+ valueOf.call("");
+}, "the empty string");
+
+assert.throws(TypeError, function() {
+ valueOf.call("1n");
+}, "string");
+
+assert.throws(TypeError, function() {
+ valueOf.call(0);
+}, "number (0)");
+
+assert.throws(TypeError, function() {
+ valueOf.call(1);
+}, "number (1)");
+
+assert.throws(TypeError, function() {
+ valueOf.call(NaN);
+}, "NaN");
+
+var s = Symbol();
+assert.throws(TypeError, function() {
+ valueOf.call(s);
+}, "symbol");
diff --git a/test/built-ins/BigInt/prototype/valueOf/this-value.js b/test/built-ins/BigInt/prototype/valueOf/this-value.js
deleted file mode 100644
index 4d383aa9c..000000000
--- a/test/built-ins/BigInt/prototype/valueOf/this-value.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (C) 2017 Robin Templeton. All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-esid: sec-bigint.prototype.valueof
-description: BigInt.prototype.valueOf this value coercion
-info: >
- BigInt.prototype.valueOf ( )
-
- Return ? thisBigIntValue(this value).
-includes: [typeCoercion.js]
-features: [BigInt, arrow-function, Symbol, Symbol.toPrimitive]
----*/
-
-testCoercibleToBigIntThisValue(
- 0n,
- (x) => assert.sameValue(0n, BigInt.prototype.valueOf.call(x))
-);