Home | History | Annotate | Download | only in harmony
      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 
      9 class MyArrayBuffer extends ArrayBuffer { }
     10 assertEquals(MyArrayBuffer, new MyArrayBuffer(0).slice().constructor);
     11 
     12 class MyShortArrayBuffer extends ArrayBuffer {
     13   constructor(length) { super(length - 1); }
     14 }
     15 assertThrows(() => new MyShortArrayBuffer(5).slice(0, 4), TypeError);
     16 
     17 class SingletonArrayBuffer extends ArrayBuffer {
     18   constructor(...args) {
     19     if (SingletonArrayBuffer.cached) return SingletonArrayBuffer.cached;
     20     super(...args);
     21     SingletonArrayBuffer.cached = this;
     22   }
     23 }
     24 assertThrows(() => new SingletonArrayBuffer(5).slice(0, 4), TypeError);
     25 
     26 class NonArrayBuffer extends ArrayBuffer {
     27   constructor() {
     28     return {};
     29   }
     30 }
     31 assertThrows(() => new NonArrayBuffer(5).slice(0, 4), TypeError);
     32 
     33 // Species fallback is ArrayBuffer
     34 class UndefinedArrayBuffer extends ArrayBuffer { }
     35 UndefinedArrayBuffer.prototype.constructor = undefined;
     36 assertEquals(ArrayBuffer, new UndefinedArrayBuffer(0).slice().constructor);
     37