diff options
Diffstat (limited to 'js/src/tests/test262/built-ins/Date/prototype/toJSON/to-primitive-symbol.js')
-rw-r--r-- | js/src/tests/test262/built-ins/Date/prototype/toJSON/to-primitive-symbol.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Date/prototype/toJSON/to-primitive-symbol.js b/js/src/tests/test262/built-ins/Date/prototype/toJSON/to-primitive-symbol.js new file mode 100644 index 0000000000..7cf18d9060 --- /dev/null +++ b/js/src/tests/test262/built-ins/Date/prototype/toJSON/to-primitive-symbol.js @@ -0,0 +1,47 @@ +// Copyright (C) 2019 Aleksey Shvayka. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-date.prototype.tojson +description: > + This value is coerced to primitive with Number hint (exotic @@toPrimitive). +info: | + Date.prototype.toJSON ( key ) + + [...] + 2. Let tv be ? ToPrimitive(O, hint Number). + + ToPrimitive ( input [ , PreferredType ] ) + + 1. Assert: input is an ECMAScript language value. + 2. If Type(input) is Object, then + [...] + d. Let exoticToPrim be ? GetMethod(input, @@toPrimitive). + e. If exoticToPrim is not undefined, then + i. Let result be ? Call(exoticToPrim, input, « hint »). + ii. If Type(result) is not Object, return result. +features: [Symbol, Symbol.toPrimitive] +---*/ + +var callCount = 0, _this, _arguments; +var result = new Boolean(false); + +var obj = { + toISOString: function() { return result; }, + toString: function() { throw new Test262Error('should not be called'); }, + valueOf: function() { throw new Test262Error('should not be called'); }, +}; + +obj[Symbol.toPrimitive] = function() { + callCount += 1; + _this = this; + _arguments = arguments; + return 3.14; +}; + +assert.sameValue(Date.prototype.toJSON.call(obj), result); +assert.sameValue(callCount, 1); +assert.sameValue(_this, obj); +assert.sameValue(_arguments[0], 'number'); +assert.sameValue(_arguments.length, 1); + +reportCompare(0, 0); |