| // Copyright 2015 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. |
| |
| // ArrayBuffer.prototype.slice makes subclass and checks length |
| |
| class MyArrayBuffer extends ArrayBuffer { } |
| assertEquals(MyArrayBuffer, new MyArrayBuffer(0).slice().constructor); |
| |
| class MyShortArrayBuffer extends ArrayBuffer { |
| constructor(length) { super(length - 1); } |
| } |
| assertThrows(() => new MyShortArrayBuffer(5).slice(0, 4), TypeError); |
| |
| class SingletonArrayBuffer extends ArrayBuffer { |
| constructor(...args) { |
| if (SingletonArrayBuffer.cached) return SingletonArrayBuffer.cached; |
| super(...args); |
| SingletonArrayBuffer.cached = this; |
| } |
| } |
| assertThrows(() => new SingletonArrayBuffer(5).slice(0, 4), TypeError); |
| |
| class NonArrayBuffer extends ArrayBuffer { |
| constructor() { |
| return {}; |
| } |
| } |
| assertThrows(() => new NonArrayBuffer(5).slice(0, 4), TypeError); |
| |
| // Species fallback is ArrayBuffer |
| class UndefinedArrayBuffer extends ArrayBuffer { } |
| UndefinedArrayBuffer.prototype.constructor = undefined; |
| assertEquals(ArrayBuffer, new UndefinedArrayBuffer(0).slice().constructor); |