test262/test/built-ins/Date/value-to-primitive-call.js

43 lines
1.4 KiB
JavaScript

// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-date-value
es6id: 20.3.2.2
description: Invocation of `Symbol.toPrimitive` method of object value
info: |
3. If NewTarget is not undefined, then
a. If Type(value) is Object and value has a [[DateValue]] internal slot, then
i. Let tv be thisTimeValue(value).
b. Else,
i. Let v be ? ToPrimitive(value).
[...]
ToPrimitive ( input [ , PreferredType ] )
1. If PreferredType was not passed, let hint be "default".
2. Else if PreferredType is hint String, let hint be "string".
3. Else PreferredType is hint Number, let hint be "number".
4. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
5. If exoticToPrim is not undefined, then
a. Let result be ? Call(exoticToPrim, input, « hint »).
[...]
features: [Symbol.toPrimitive]
---*/
var spyToPrimitive = {};
var callCount = 0;
var thisValue, args;
spyToPrimitive[Symbol.toPrimitive] = function() {
thisValue = this;
args = arguments;
callCount += 1;
};
new Date(spyToPrimitive);
assert.sameValue(callCount, 1, 'function invoked exactly once');
assert.sameValue(thisValue, spyToPrimitive, 'function "this" value');
assert.sameValue(args.length, 1, 'function invoked with exactly one argument');
assert.sameValue(args[0], 'default', 'argument value');