summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/intl402/Array/prototype/toLocaleString/invoke-element-tolocalestring.js
blob: 5016ebec27572786ff917518571516086c0ee55e (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// Copyright (C) 2022 Richard Gibson. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sup-array.prototype.tolocalestring
description: >
    The toLocaleString method of each non-undefined non-null element
    must be called with two arguments.
info: |
    Array.prototype.toLocaleString ( [ _locales_ [ , _options_ ] ] )

    4. Let _R_ be the empty String.
    5. Let _k_ be 0.
    6. Repeat, while _k_ < _len_,
      a. If _k_ > 0, then
        i. Set _R_ to the string-concatenation of _R_ and _separator_.
      b. Let _nextElement_ be ? Get(_array_, ! ToString(_k_)).
      c. If _nextElement_ is not *undefined* or *null*, then
        i. Let _S_ be ? ToString(? Invoke(_nextElement_, *"toLocaleString"*, « _locales_, _options_ »)).
        ii. Set _R_ to the string-concatenation of _R_ and _S_.
      d. Increase _k_ by 1.
    7. Return _R_.
includes: [compareArray.js]
---*/

const unique = {
  toString() {
    return "<sentinel object>";
  }
};

const testCases = [
  { label: "no arguments", args: [], expectedArgs: [undefined, undefined] },
  { label: "undefined locale", args: [undefined], expectedArgs: [undefined, undefined] },
  { label: "string locale", args: ["ar"], expectedArgs: ["ar", undefined] },
  { label: "object locale", args: [unique], expectedArgs: [unique, undefined] },
  { label: "undefined locale and options", args: [undefined, unique], expectedArgs: [undefined, unique] },
  { label: "string locale and options", args: ["zh", unique], expectedArgs: ["zh", unique] },
  { label: "object locale and options", args: [unique, unique], expectedArgs: [unique, unique] },
  { label: "extra arguments", args: [unique, unique, unique], expectedArgs: [unique, unique] },
];

for (const { label, args, expectedArgs } of testCases) {
  assert.sameValue([undefined].toLocaleString(...args), "",
    `must skip undefined elements when provided ${label}`);
}
for (const { label, args, expectedArgs } of testCases) {
  assert.sameValue([null].toLocaleString(...args), "",
    `must skip null elements when provided ${label}`);
}

for (const { label, args, expectedArgs } of testCases) {
  const spy = {
    toLocaleString(...receivedArgs) {
      assert.compareArray(receivedArgs, expectedArgs,
        `must invoke element toLocaleString with expected arguments when provided ${label}`);
      return "ok";
    }
  };
  assert.sameValue([spy].toLocaleString(...args), "ok");
}

reportCompare(0, 0);