diff options
Diffstat (limited to 'js/src/tests/test262/built-ins/Array/from/iter-set-elem-prop-err.js')
-rw-r--r-- | js/src/tests/test262/built-ins/Array/from/iter-set-elem-prop-err.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Array/from/iter-set-elem-prop-err.js b/js/src/tests/test262/built-ins/Array/from/iter-set-elem-prop-err.js new file mode 100644 index 0000000000..ae18edfe4a --- /dev/null +++ b/js/src/tests/test262/built-ins/Array/from/iter-set-elem-prop-err.js @@ -0,0 +1,54 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-array.from +description: Error setting property on result value (traversed via iterator) +info: | + [...] + 6. If usingIterator is not undefined, then + [...] + g. Repeat + [...] + ix. Let defineStatus be CreateDataPropertyOrThrow(A, Pk, + mappedValue). + x. If defineStatus is an abrupt completion, return + IteratorClose(iterator, defineStatus). +features: [Symbol.iterator] +---*/ + +var C = function() { + Object.defineProperty(this, '0', { + writable: true, + configurable: false + }); +}; +var closeCount = 0; +var items = {}; +var nextResult = { + done: false +}; + +items[Symbol.iterator] = function() { + return { + return: function() { + closeCount += 1; + }, + next: function() { + var result = nextResult; + + nextResult = { + done: true + }; + + return result; + } + }; +}; + +assert.throws(TypeError, function() { + Array.from.call(C, items); +}); + +assert.sameValue(closeCount, 1); + +reportCompare(0, 0); |