| // 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]); |