// 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. // Test the ES2015 @@species feature 'use strict'; let TypedArray = Uint8Array.__proto__; // The @@species property exists on the right objects and has the right values let classesWithSpecies = [RegExp, Array, TypedArray, ArrayBuffer, Map, Set, Promise]; let classesWithoutSpecies = [Object, Function, String, Number, Symbol, WeakMap, WeakSet]; for (let constructor of classesWithSpecies) { assertEquals(constructor, constructor[Symbol.species]); assertThrows(function() { constructor[Symbol.species] = undefined }, TypeError); let descriptor = Object.getOwnPropertyDescriptor(constructor, Symbol.species); assertTrue(descriptor.configurable); assertFalse(descriptor.enumerable); assertEquals(undefined, descriptor.writable); assertEquals(undefined, descriptor.set); assertEquals('function', typeof descriptor.get); } // @@species is defined with distinct getters assertEquals(classesWithSpecies.length, new Set(classesWithSpecies.map(constructor => Object.getOwnPropertyDescriptor( constructor, Symbol.species).get) ).size); for (let constructor of classesWithoutSpecies) assertEquals(undefined, constructor[Symbol.species]);