summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/Date/prototype/Symbol.toPrimitive/hint-number-first-invalid.js
blob: d151a2cbec1923dcda19277da4a22d5ae43e0b5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-date.prototype-@@toprimitive
description: >
    Behavior when `hint` is "number" and first try returns an invalid value
info: |
    1. Let O be the this value.
    2. If Type(O) is not Object, throw a TypeError exception.
    3. If hint is the String value "string" or the String value "default", then
       a. Let tryFirst be "string".
    4. Else if hint is the String value "number", then
       a. Let tryFirst be "number".
    5. Else, throw a TypeError exception.
    6. Return OrdinaryToPrimitive(O, tryFirst).
features: [Symbol.toPrimitive]
---*/

var voCallCount = 0;
var tsCallCount = 0;
var obj = {
  valueOf: function() {
    voCallCount += 1;
    return {};
  },
  toString: function() {
    tsCallCount += 1;
    return 'toString test262';
  }
};

assert.sameValue(
  Date.prototype[Symbol.toPrimitive].call(obj, 'number'),
  'toString test262',
  '`toString` is used as a fallback when `valueOf` returns an object'
);
assert.sameValue(voCallCount, 1, '`valueOf` method was invoked exactly once');
assert.sameValue(tsCallCount, 1, '`toString` method was invoked exactly once');

reportCompare(0, 0);