| // Copyright 2018 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| assertEquals(Array.prototype.flat.length, 0); |
| assertEquals(Array.prototype.flat.name, 'flat'); |
| |
| { |
| const input = [1, [2], [[3]]]; |
| |
| assertEquals(input.flat(), [1, 2, [3]]); |
| assertEquals(input.flat(1), [1, 2, [3]]); |
| assertEquals(input.flat(true), [1, 2, [3]]); |
| assertEquals(input.flat(undefined), [1, 2, [3]]); |
| |
| assertEquals(input.flat(-Infinity), [1, [2], [[3]]]); |
| assertEquals(input.flat(-1), [1, [2], [[3]]]); |
| assertEquals(input.flat(-0), [1, [2], [[3]]]); |
| assertEquals(input.flat(0), [1, [2], [[3]]]); |
| assertEquals(input.flat(false), [1, [2], [[3]]]); |
| assertEquals(input.flat(null), [1, [2], [[3]]]); |
| assertEquals(input.flat(''), [1, [2], [[3]]]); |
| assertEquals(input.flat('foo'), [1, [2], [[3]]]); |
| assertEquals(input.flat(/./), [1, [2], [[3]]]); |
| assertEquals(input.flat([]), [1, [2], [[3]]]); |
| assertEquals(input.flat({}), [1, [2], [[3]]]); |
| assertEquals( |
| input.flat(new Proxy({}, {})), [1, [2], [[3]]]); |
| assertEquals(input.flat((x) => x), [1, [2], [[3]]]); |
| assertEquals( |
| input.flat(String), [1, [2], [[3]]]); |
| |
| assertEquals(input.flat(2), [1, 2, 3]); |
| assertEquals(input.flat(Infinity), [1, 2, 3]); |
| |
| assertThrows(() => { input.flat(Symbol()); }, TypeError); |
| assertThrows(() => { input.flat(Object.create(null)); }, TypeError); |
| } |
| |
| { |
| const input = { 0: 'a', 1: 'b', 2: 'c', length: 'wat' }; |
| assertEquals(Array.prototype.flat.call(input, Infinity), []); |
| } |
| |
| { |
| let count = 0; |
| const input = { |
| get length() { ++count; return 0; } |
| }; |
| const result = Array.prototype.flat.call(input, Infinity); |
| assertEquals(count, 1); |
| } |
| |
| { |
| const descriptor = Object.getOwnPropertyDescriptor( |
| Array.prototype, |
| 'flat' |
| ); |
| assertEquals(descriptor.value, Array.prototype.flat); |
| assertEquals(descriptor.writable, true); |
| assertEquals(descriptor.enumerable, false); |
| assertEquals(descriptor.configurable, true); |
| } |