diff --git a/lib/iterator.js b/lib/iterator.js index 3d8e40aa..899c5327 100644 --- a/lib/iterator.js +++ b/lib/iterator.js @@ -11,7 +11,9 @@ const toIterator = base => { class Iterator { constructor(base) { - this.base = toIterator(base); + if (typeof base.next !== 'function') + throw new TypeError('Base is not Iterable'); + this.base = base; } [Symbol.iterator]() { @@ -490,7 +492,7 @@ class SkipWhileIterator extends Iterator { } } -const iter = base => new Iterator(base); +const iter = base => new Iterator(toIterator(base)); module.exports = { Iterator, diff --git a/test/iterator.js b/test/iterator.js index 390e8381..19149666 100644 --- a/test/iterator.js +++ b/test/iterator.js @@ -12,6 +12,11 @@ metatests.test('new Iterator() on non Iterable', test => { test.end(); }); +metatests.testSync('new Iterator() on Iterator', test => { + const it = array[Symbol.iterator](); + test.strictSame(new Iterator(it).toArray(), array); +}); + metatests.test('iter returns an Iterator', test => { const iterator = iter(array); test.assert(iterator instanceof Iterator);