blob: 9368e7fb6cab671249b0fc8543fa39cd152967c8 [file] [log] [blame]
Ben Murdochbcf72ee2016-08-08 18:44:38 +01001// Copyright 2016 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Check that @@isConcatSpreadable is checked when set on Object.prototype
6
7"use strict"
8
9var array = [1, 2, 3];
10var object = {length: 1, '0': 'a'};
11
12function testConcatDefaults() {
13 assertEquals(array, [].concat(array));
14 assertEquals(array, array.concat([]));
15 assertEquals([1, 2, 3, 1, 2, 3], array.concat(array));
16 assertEquals([object], [].concat(object));
17 assertEquals([1, 2, 3, object], array.concat(object));
18 assertEquals([object], Array.prototype.concat.call(object,[]));
19 assertEquals([object, 1, 2, 3], Array.prototype.concat.call(object, array));
20 assertEquals([object, object], Array.prototype.concat.call(object, object));
21}
22
23testConcatDefaults();
24
25var concatSpreadable = false;
26Object.defineProperty(Array.prototype, Symbol.isConcatSpreadable, {
27 get() { return concatSpreadable },
28 configurable: true
29});
30
31assertEquals([[], array], [].concat(array));
32assertEquals([array, []], array.concat([]));
33assertEquals([array, array], array.concat(array));
34assertEquals([[], object], [].concat(object));
35assertEquals([array, object], array.concat(object));
36assertEquals([object, []], Array.prototype.concat.call(object,[]));
37assertEquals([object, array], Array.prototype.concat.call(object, array));
38assertEquals([object, object], Array.prototype.concat.call(object, object));
39
40concatSpreadable = true;
41
42assertEquals(array, [].concat(array));
43assertEquals(array, array.concat([]));
44assertEquals([1, 2, 3, 1, 2, 3], array.concat(array));
45assertEquals([object], [].concat(object));
46assertEquals([1, 2, 3, object], array.concat(object));
47assertEquals([object], Array.prototype.concat.call(object,[]));
48assertEquals([object, 1, 2, 3], Array.prototype.concat.call(object, array));
49assertEquals([object, object], Array.prototype.concat.call(object, object));
50
51
52delete Array.prototype[Symbol.isConcatSpreadable];
53testConcatDefaults();