// Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-%typedarray%.from description: Throw a TypeError exception is mapfn is not callable info: | 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] ) ... 3. If mapfn was supplied and mapfn is not undefined, then a. If IsCallable(mapfn) is false, throw a TypeError exception. ... includes: [testTypedArray.js] features: [Symbol, Symbol.iterator, TypedArray] ---*/ var getIterator = 0; var arrayLike = {}; Object.defineProperty(arrayLike, Symbol.iterator, { get: function() { getIterator++; } }); testWithTypedArrayConstructors(function(TA) { assert.throws(TypeError, function() { TA.from(arrayLike, null); }, "mapfn is null"); assert.throws(TypeError, function() { TA.from(arrayLike, 42); }, "mapfn is a number"); assert.throws(TypeError, function() { TA.from(arrayLike, ""); }, "mapfn is a string"); assert.throws(TypeError, function() { TA.from(arrayLike, {}); }, "mapfn is an ordinary object"); assert.throws(TypeError, function() { TA.from(arrayLike, []); }, "mapfn is an array"); assert.throws(TypeError, function() { TA.from(arrayLike, true); }, "mapfn is a boolean"); var s = Symbol("1"); assert.throws(TypeError, function() { TA.from(arrayLike, s); }, "mapfn is a symbol"); assert.sameValue( getIterator, 0, "IsCallable(mapfn) check occurs before getting source[@@iterator]" ); }); reportCompare(0, 0);