summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js')
-rw-r--r--js/src/tests/test262/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js b/js/src/tests/test262/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js
new file mode 100644
index 0000000000..365b97f782
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-symbol.prototype-@@toprimitive
+description: >
+ If redefined to nullish value, Symbol wrapper object is converted to primitive
+ via OrdinaryToPrimitive.
+info: |
+ ToPrimitive ( input [ , preferredType ] )
+
+ [...]
+ 2. If Type(input) is Object, then
+ a. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+ b. If exoticToPrim is not undefined, then
+ [...]
+ c. If preferredType is not present, let preferredType be number.
+ d. Return ? OrdinaryToPrimitive(input, preferredType).
+features: [Symbol.toPrimitive]
+---*/
+
+Object.defineProperty(Symbol.prototype, Symbol.toPrimitive, { value: null });
+
+assert.sameValue(Object(Symbol()) == "Symbol()", false, "hint: default");
+assert.throws(TypeError, () => { +Object(Symbol()); }, "hint: number");
+assert.sameValue(`${Object(Symbol())}`, "Symbol()", "hint: string");
+
+Object.defineProperty(Symbol.prototype, Symbol.toPrimitive, { value: undefined });
+
+assert(Object(Symbol.iterator) == Symbol.iterator, "hint: default");
+assert.throws(TypeError, () => { Object(Symbol()) <= ""; }, "hint: number");
+assert.sameValue({ "Symbol()": 1 }[Object(Symbol())], 1, "hint: string");
+
+reportCompare(0, 0);