blob: 0445a4b64894c921e8cda2557628070336ecb52c [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 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// Flags: --harmony-species
6
7// ArrayBuffer.prototype.slice makes subclass and checks length
8
9class MyArrayBuffer extends ArrayBuffer { }
10assertEquals(MyArrayBuffer, new MyArrayBuffer(0).slice().constructor);
11
12class MyShortArrayBuffer extends ArrayBuffer {
13 constructor(length) { super(length - 1); }
14}
15assertThrows(() => new MyShortArrayBuffer(5).slice(0, 4), TypeError);
16
17class SingletonArrayBuffer extends ArrayBuffer {
18 constructor(...args) {
19 if (SingletonArrayBuffer.cached) return SingletonArrayBuffer.cached;
20 super(...args);
21 SingletonArrayBuffer.cached = this;
22 }
23}
24assertThrows(() => new SingletonArrayBuffer(5).slice(0, 4), TypeError);
25
26class NonArrayBuffer extends ArrayBuffer {
27 constructor() {
28 return {};
29 }
30}
31assertThrows(() => new NonArrayBuffer(5).slice(0, 4), TypeError);
32
33// Species fallback is ArrayBuffer
34class UndefinedArrayBuffer extends ArrayBuffer { }
35UndefinedArrayBuffer.prototype.constructor = undefined;
36assertEquals(ArrayBuffer, new UndefinedArrayBuffer(0).slice().constructor);