1// 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);
37