// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
// See LICENSE for details.

/*---
info: |
    Promise.all expects an iterable argument;
    rejects if IteratorStep() throws
es6id: S25.4.4.1_A5.1_T1
author: Sam Mikes
description: iterator.next throws, causing Promise.all to reject
features: [Symbol.iterator]
flags: [async]
---*/

var iterThrows = {};
var error = new Test262Error();
iterThrows[Symbol.iterator] = function() {
    return {
        next: function () {
            throw error;
        }
    };
};

Promise.all(iterThrows).then(function () {
    $ERROR('Promise unexpectedly resolved: Promise.all(iterThrows) should throw TypeError');
},function (reason) {
    assert.sameValue(reason, error);
}).then($DONE,$DONE);
