es-iterator-helpers
Advanced tools
Comparing version 1.0.2 to 1.0.3
@@ -23,2 +23,4 @@ 'use strict'; | ||
SLOT.set(generator, '[[Sentinel]]'); // our userland slot | ||
SLOT.assert(closure, '[[CloseIfAbrupt]]'); // our second userland slot | ||
SLOT.set(generator, '[[CloseIfAbrupt]]', SLOT.get(closure, '[[CloseIfAbrupt]]')); // our second userland slot | ||
@@ -25,0 +27,0 @@ GeneratorStart(generator, closure); // step 13 |
@@ -38,3 +38,3 @@ 'use strict'; | ||
// due to representing `GeneratorContext` as a function, we can't safely re-invoke it, so we can't support sending it a return completion | ||
return CreateIterResultObject(value, true); | ||
return CreateIterResultObject(SLOT.get(generator, '[[CloseIfAbrupt]]')(abruptCompletion), true); | ||
} | ||
@@ -41,0 +41,0 @@ |
@@ -18,2 +18,3 @@ 'use strict'; | ||
SLOT.assert(generator, '[[Sentinel]]'); // our userland slot | ||
SLOT.assert(generator, '[[CloseIfAbrupt]]'); // our second userland slot | ||
@@ -20,0 +21,0 @@ if (!IsCallable(closure) || closure.length !== 0) { |
@@ -10,3 +10,2 @@ 'use strict'; | ||
var GetMethod = require('es-abstract/2022/GetMethod'); | ||
var IsCallable = require('es-abstract/2022/IsCallable'); | ||
var Type = require('es-abstract/2022/Type'); | ||
@@ -24,8 +23,12 @@ | ||
if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { // step 2 | ||
throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); | ||
if (!(completion instanceof CompletionRecord)) { // step 2 | ||
throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); | ||
} | ||
var completionThunk = completion instanceof CompletionRecord ? function () { | ||
return completion['?'](); | ||
} : completion; | ||
var completionThunk = function () { | ||
var value = completion.value(); | ||
if (completion.type() === 'throw') { | ||
throw value; | ||
} | ||
return value; | ||
}; | ||
@@ -32,0 +35,0 @@ var iterator = iteratorRecord['[[Iterator]]']; // step 3 |
@@ -8,2 +8,15 @@ # Changelog | ||
## [v1.0.3](https://github.com/es-shims/iterator-helpers/compare/v1.0.2...v1.0.3) - 2023-03-17 | ||
### Commits | ||
- [Fix] `drop`/`filter`/`flatMap`/`map`/`take`: properly IfAbruptCloseIterator [`ff643a0`](https://github.com/es-shims/iterator-helpers/commit/ff643a0b7c4e5c2b00e794ba9b988b47e783f235) | ||
- [Refactor] use `NormalCompletion`/`ThrowCompletion` instead of thunks [`68fd937`](https://github.com/es-shims/iterator-helpers/commit/68fd937b53c107481a9f868bda5b2bd5cbc00142) | ||
- [Fix] `filter`: IteratorClose needs to rethrow the error [`200474f`](https://github.com/es-shims/iterator-helpers/commit/200474ff289dea77c696c0c025f4602405cf3fff) | ||
- [Fix] `filter`: properly increment the counter [`14aa2d8`](https://github.com/es-shims/iterator-helpers/commit/14aa2d8b75fd16378c2be183fd5b008712547ed4) | ||
- [Fix] `Iterator` can not be `new`ed or invoked directly [`6fbd68e`](https://github.com/es-shims/iterator-helpers/commit/6fbd68e778dd455c4aa63f4e1f39e0b583610509) | ||
- [Fix] `Iterator.prototype` should be non-writable [`1080288`](https://github.com/es-shims/iterator-helpers/commit/108028858067e40ea56dca9a68dd6cea4966e904) | ||
- [Deps] update `es-abstract` [`b7913da`](https://github.com/es-shims/iterator-helpers/commit/b7913da9cddef1ec40b4827821c6069019b79093) | ||
- [Dev Deps] update `@es-shims/api` [`0071bed`](https://github.com/es-shims/iterator-helpers/commit/0071bed9e13231317d2cdb9ae0ecb6603784ad1f) | ||
## [v1.0.2](https://github.com/es-shims/iterator-helpers/compare/v1.0.1...v1.0.2) - 2023-02-09 | ||
@@ -10,0 +23,0 @@ |
@@ -6,12 +6,14 @@ 'use strict'; | ||
var $RangeError = GetIntrinsic('%RangeError%'); | ||
var $TypeError = GetIntrinsic('%TypeError%'); | ||
var CompletionRecord = require('es-abstract/2022/CompletionRecord'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorStep = require('../aos/IteratorStep'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var ThrowCompletion = require('es-abstract/2022/ThrowCompletion'); | ||
var ToIntegerOrInfinity = require('es-abstract/2022/ToIntegerOrInfinity'); | ||
var ToNumber = require('es-abstract/2022/ToNumber'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var iterHelperProto = require('../IteratorHelperPrototype'); | ||
@@ -36,2 +38,12 @@ | ||
var closeIfAbrupt = function (abruptCompletion) { | ||
if (!(abruptCompletion instanceof CompletionRecord)) { | ||
throw new $TypeError('`abruptCompletion` must be a Completion Record'); | ||
} | ||
IteratorClose( | ||
iterated, | ||
abruptCompletion | ||
); | ||
}; | ||
var sentinel = {}; | ||
@@ -63,13 +75,12 @@ var remaining = integerLimit; // step 6.a | ||
// close iterator // step 6.c.icv | ||
IteratorClose( | ||
iterated, | ||
function () { throw e; } | ||
); | ||
closeIfAbrupt(ThrowCompletion(e)); | ||
throw e; | ||
} | ||
// } | ||
return void undefined; | ||
// return void undefined; | ||
}; | ||
SLOT.set(closure, '[[Sentinel]]', sentinel); // for the userland implementation | ||
SLOT.set(closure, '[[CloseIfAbrupt]]', closeIfAbrupt); // for the userland implementation | ||
return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4 | ||
}; |
@@ -8,2 +8,3 @@ 'use strict'; | ||
var Call = require('es-abstract/2022/Call'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var IsCallable = require('es-abstract/2022/IsCallable'); | ||
@@ -13,6 +14,6 @@ var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var NormalCompletion = require('es-abstract/2022/NormalCompletion'); | ||
var ThrowCompletion = require('es-abstract/2022/ThrowCompletion'); | ||
var ToBoolean = require('es-abstract/2022/ToBoolean'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
module.exports = function every(predicate) { | ||
@@ -41,3 +42,3 @@ var iterated = GetIteratorDirect(this); // step 1 | ||
iterated, | ||
function () { throw e; } | ||
ThrowCompletion(e) | ||
); | ||
@@ -50,3 +51,3 @@ } finally { | ||
iterated, | ||
function () { return false; } | ||
NormalCompletion(false) | ||
); // step 4.f | ||
@@ -53,0 +54,0 @@ } |
@@ -8,2 +8,5 @@ 'use strict'; | ||
var Call = require('es-abstract/2022/Call'); | ||
var CompletionRecord = require('es-abstract/2022/CompletionRecord'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var IsCallable = require('es-abstract/2022/IsCallable'); | ||
@@ -13,7 +16,5 @@ var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var ThrowCompletion = require('es-abstract/2022/ThrowCompletion'); | ||
var ToBoolean = require('es-abstract/2022/ToBoolean'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var iterHelperProto = require('../IteratorHelperPrototype'); | ||
@@ -30,5 +31,15 @@ | ||
var closeIfAbrupt = function (abruptCompletion) { | ||
if (!(abruptCompletion instanceof CompletionRecord)) { | ||
throw new $TypeError('`abruptCompletion` must be a Completion Record'); | ||
} | ||
IteratorClose( | ||
iterated, | ||
abruptCompletion | ||
); | ||
}; | ||
var sentinel = {}; | ||
var counter = 0; // step 3.a | ||
var closure = function () { | ||
var counter = 0; // step 3.a | ||
// eslint-disable-next-line no-constant-condition | ||
@@ -51,3 +62,3 @@ while (true) { // step 3.b | ||
// close iterator // step 3.b.v, 3.b.vii | ||
IteratorClose(iterated, true); | ||
closeIfAbrupt(ThrowCompletion(e)); | ||
throw e; | ||
@@ -60,4 +71,5 @@ } finally { | ||
SLOT.set(closure, '[[Sentinel]]', sentinel); // for the userland implementation | ||
SLOT.set(closure, '[[CloseIfAbrupt]]', closeIfAbrupt); // for the userland implementation | ||
return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4 | ||
}; |
@@ -8,2 +8,3 @@ 'use strict'; | ||
var Call = require('es-abstract/2022/Call'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var IsCallable = require('es-abstract/2022/IsCallable'); | ||
@@ -13,6 +14,6 @@ var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var NormalCompletion = require('es-abstract/2022/NormalCompletion'); | ||
var ThrowCompletion = require('es-abstract/2022/ThrowCompletion'); | ||
var ToBoolean = require('es-abstract/2022/ToBoolean'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
module.exports = function find(predicate) { | ||
@@ -41,3 +42,3 @@ var iterated = GetIteratorDirect(this); // step 1 | ||
iterated, | ||
function () { throw e; } | ||
ThrowCompletion(e) | ||
); | ||
@@ -50,3 +51,3 @@ } finally { | ||
iterated, | ||
function () { return value; } // eslint-disable-line no-loop-func | ||
NormalCompletion(value) | ||
); // step 4.f | ||
@@ -53,0 +54,0 @@ } |
@@ -8,2 +8,6 @@ 'use strict'; | ||
var Call = require('es-abstract/2022/Call'); | ||
var CompletionRecord = require('es-abstract/2022/CompletionRecord'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var GetIteratorFlattenable = require('../aos/GetIteratorFlattenable'); | ||
var IsCallable = require('es-abstract/2022/IsCallable'); | ||
@@ -13,7 +17,4 @@ var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var ThrowCompletion = require('es-abstract/2022/ThrowCompletion'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var GetIteratorFlattenable = require('../aos/GetIteratorFlattenable'); | ||
var iterHelperProto = require('../IteratorHelperPrototype'); | ||
@@ -30,2 +31,12 @@ | ||
var closeIfAbrupt = function (abruptCompletion) { | ||
if (!(abruptCompletion instanceof CompletionRecord)) { | ||
throw new $TypeError('`abruptCompletion` must be a Completion Record'); | ||
} | ||
IteratorClose( | ||
iterated, | ||
abruptCompletion | ||
); | ||
}; | ||
var sentinel = {}; | ||
@@ -49,6 +60,3 @@ var counter = 0; // step 3.a | ||
} catch (e) { | ||
IteratorClose( | ||
iterated, | ||
function () { throw e; } | ||
); // steps 3.b.v, 3.b.vii | ||
closeIfAbrupt(ThrowCompletion(e)); // steps 3.b.v, 3.b.vii | ||
} | ||
@@ -60,6 +68,3 @@ var innerAlive = true; // step 3.b.viii | ||
} catch (e) { | ||
IteratorClose( | ||
iterated, | ||
function () { throw e; } | ||
); // step 3.b.ix.2 | ||
closeIfAbrupt(ThrowCompletion(e)); // step 3.b.ix.2 | ||
} | ||
@@ -73,6 +78,3 @@ if (!innerNext) { | ||
} catch (e) { | ||
IteratorClose( | ||
iterated, | ||
function () { throw e; } | ||
); // step 3.b.ix.4.b | ||
closeIfAbrupt(ThrowCompletion(e)); // step 3.b.ix.4.b | ||
} | ||
@@ -89,4 +91,5 @@ return innerValue; // step 3.b.ix.4.c | ||
SLOT.set(closure, '[[Sentinel]]', sentinel); // for the userland implementation | ||
SLOT.set(closure, '[[CloseIfAbrupt]]', closeIfAbrupt); // for the userland implementation | ||
return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4 | ||
}; |
@@ -8,2 +8,3 @@ 'use strict'; | ||
var Call = require('es-abstract/2022/Call'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var IsCallable = require('es-abstract/2022/IsCallable'); | ||
@@ -13,5 +14,4 @@ var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var ThrowCompletion = require('es-abstract/2022/ThrowCompletion'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
module.exports = function forEach(fn) { | ||
@@ -38,3 +38,3 @@ var iterated = GetIteratorDirect(this); // step 1 | ||
iterated, | ||
function () { throw e; } | ||
ThrowCompletion(e) | ||
); // steps 4.e | ||
@@ -41,0 +41,0 @@ throw e; |
@@ -8,2 +8,5 @@ 'use strict'; | ||
var Call = require('es-abstract/2022/Call'); | ||
var CompletionRecord = require('es-abstract/2022/CompletionRecord'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var IsCallable = require('es-abstract/2022/IsCallable'); | ||
@@ -13,6 +16,4 @@ var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var ThrowCompletion = require('es-abstract/2022/ThrowCompletion'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var iterHelperProto = require('../IteratorHelperPrototype'); | ||
@@ -29,2 +30,12 @@ | ||
var closeIfAbrupt = function (abruptCompletion) { | ||
if (!(abruptCompletion instanceof CompletionRecord)) { | ||
throw new $TypeError('`abruptCompletion` must be a Completion Record'); | ||
} | ||
IteratorClose( | ||
iterated, | ||
abruptCompletion | ||
); | ||
}; | ||
var sentinel = {}; | ||
@@ -36,3 +47,2 @@ var counter = 0; // step 3.a | ||
// console.log({counter, next}) | ||
if (!next) { | ||
@@ -50,6 +60,3 @@ // return void undefined; // step 3.b.ii | ||
// close iterator // step 3.b.v, 3.b.vii | ||
IteratorClose( | ||
iterated, | ||
function () { throw e; } | ||
); | ||
closeIfAbrupt(ThrowCompletion(e)); | ||
throw e; | ||
@@ -62,4 +69,5 @@ } finally { | ||
SLOT.set(closure, '[[Sentinel]]', sentinel); // for the userland implementation | ||
SLOT.set(closure, '[[CloseIfAbrupt]]', closeIfAbrupt); // for the userland implementation | ||
return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4 | ||
}; |
@@ -8,2 +8,3 @@ 'use strict'; | ||
var Call = require('es-abstract/2022/Call'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var IsCallable = require('es-abstract/2022/IsCallable'); | ||
@@ -13,5 +14,4 @@ var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var ThrowCompletion = require('es-abstract/2022/ThrowCompletion'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
module.exports = function reduce(reducer) { | ||
@@ -53,3 +53,3 @@ var iterated = GetIteratorDirect(this); // step 1 | ||
iterated, | ||
function () { throw e; } | ||
ThrowCompletion(e) | ||
); | ||
@@ -56,0 +56,0 @@ } |
@@ -8,2 +8,3 @@ 'use strict'; | ||
var Call = require('es-abstract/2022/Call'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var IsCallable = require('es-abstract/2022/IsCallable'); | ||
@@ -13,6 +14,6 @@ var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var NormalCompletion = require('es-abstract/2022/NormalCompletion'); | ||
var ThrowCompletion = require('es-abstract/2022/ThrowCompletion'); | ||
var ToBoolean = require('es-abstract/2022/ToBoolean'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
module.exports = function some(predicate) { | ||
@@ -41,3 +42,3 @@ var iterated = GetIteratorDirect(this); // step 1 | ||
iterated, | ||
function () { throw e; } | ||
ThrowCompletion(e) | ||
); | ||
@@ -50,3 +51,3 @@ } finally { | ||
iterated, | ||
function () { return true; } | ||
NormalCompletion(true) | ||
); // step 4.f | ||
@@ -53,0 +54,0 @@ } |
@@ -6,12 +6,14 @@ 'use strict'; | ||
var $RangeError = GetIntrinsic('%RangeError%'); | ||
var $TypeError = GetIntrinsic('%TypeError%'); | ||
var CompletionRecord = require('es-abstract/2022/CompletionRecord'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var IteratorClose = require('../aos/IteratorClose'); | ||
var IteratorStep = require('../aos/IteratorStep'); | ||
var IteratorValue = require('es-abstract/2022/IteratorValue'); | ||
var NormalCompletion = require('es-abstract/2022/NormalCompletion'); | ||
var ToIntegerOrInfinity = require('es-abstract/2022/ToIntegerOrInfinity'); | ||
var ToNumber = require('es-abstract/2022/ToNumber'); | ||
var GetIteratorDirect = require('../aos/GetIteratorDirect'); | ||
var CreateIteratorFromClosure = require('../aos/CreateIteratorFromClosure'); | ||
var iterHelperProto = require('../IteratorHelperPrototype'); | ||
@@ -36,2 +38,12 @@ | ||
var closeIfAbrupt = function (abruptCompletion) { | ||
if (!(abruptCompletion instanceof CompletionRecord)) { | ||
throw new $TypeError('`abruptCompletion` must be a Completion Record'); | ||
} | ||
IteratorClose( | ||
iterated, | ||
abruptCompletion | ||
); | ||
}; | ||
var sentinel = {}; | ||
@@ -44,3 +56,3 @@ var remaining = integerLimit; // step 6.a | ||
iterated, | ||
function () { return sentinel; } | ||
NormalCompletion(sentinel) | ||
); | ||
@@ -63,4 +75,5 @@ } | ||
SLOT.set(closure, '[[Sentinel]]', sentinel); // for the userland implementation | ||
SLOT.set(closure, '[[CloseIfAbrupt]]', closeIfAbrupt); // for the userland implementation | ||
return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4 | ||
}; |
'use strict'; | ||
var GetIntrinsic = require('get-intrinsic'); | ||
var hasPropertyDescriptors = require('has-property-descriptors')(); | ||
var $TypeError = GetIntrinsic('%TypeError%'); | ||
var $defineProperty = hasPropertyDescriptors && GetIntrinsic('%Object.defineProperty%', true); | ||
@@ -10,5 +12,3 @@ var iterProto = require('iterator.prototype'); | ||
var $Iterator = typeof Iterator === 'function' ? Iterator : function Iterator() { | ||
if (!(this instanceof Iterator)) { | ||
throw new $TypeError('`Iterator` can only be called with new'); | ||
} | ||
throw new $TypeError('`Iterator` can not be called directly'); | ||
}; | ||
@@ -19,3 +19,4 @@ | ||
} | ||
$defineProperty($Iterator, 'prototype', { writable: false }); | ||
module.exports = $Iterator; |
@@ -34,3 +34,3 @@ 'use strict'; | ||
implementation['return'] = function () { | ||
var C = function () {}; // step 1 | ||
var C = new CompletionRecord('return', void undefined); // step 1 | ||
return GeneratorResumeAbrupt(this, C, 'Iterator Helper'); | ||
@@ -37,0 +37,0 @@ }; |
{ | ||
"name": "es-iterator-helpers", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "An ESnext spec-compliant iterator helpers shim/polyfill/replacement that works as far down as ES3.", | ||
@@ -130,3 +130,3 @@ "main": "index.json", | ||
"asynciterator.prototype": "^1.0.0", | ||
"es-abstract": "^1.21.1", | ||
"es-abstract": "^1.21.2", | ||
"es-set-tostringtag": "^2.0.1", | ||
@@ -141,3 +141,3 @@ "function-bind": "^1.1.1", | ||
"devDependencies": { | ||
"@es-shims/api": "^2.3.0", | ||
"@es-shims/api": "^2.3.1", | ||
"@ljharb/eslint-config": "^21.0.1", | ||
@@ -144,0 +144,0 @@ "aud": "^2.0.2", |
@@ -22,2 +22,8 @@ 'use strict'; | ||
); | ||
t['throws']( | ||
function () { return new Iter(); }, | ||
TypeError, | ||
name + ' throws when Construct-ed' | ||
); | ||
}, | ||
@@ -50,2 +56,17 @@ index: function () { | ||
t.test('prototype descriptor', { skip: !defineProperties.supportsDescriptors }, function (pt) { | ||
var desc = Object.getOwnPropertyDescriptor(Iterator, 'prototype'); | ||
pt.deepEqual( | ||
desc, | ||
{ | ||
configurable: false, | ||
enumerable: false, | ||
value: Iterator.prototype, | ||
writable: false | ||
} | ||
); | ||
pt.end(); | ||
}); | ||
module.exports.tests(Iterator, 'Iterator', t); | ||
@@ -52,0 +73,0 @@ |
@@ -22,4 +22,14 @@ 'use strict'; | ||
t.ok(new Index() instanceof $Iterator, 'new index() instanceof Iterator'); | ||
t['throws']( | ||
function () { Index(); }, // eslint-disable-line new-cap | ||
TypeError, | ||
'index throws when Call-ed' | ||
); | ||
t['throws']( | ||
function () { return new Index(); }, | ||
TypeError, | ||
'index throws when Construct-ed' | ||
); | ||
t.end(); | ||
@@ -26,0 +36,0 @@ }); |
@@ -12,2 +12,3 @@ 'use strict'; | ||
var hasSymbols = require('has-symbols/shams')(); | ||
var hasPropertyDescriptors = require('has-property-descriptors')(); | ||
@@ -58,2 +59,30 @@ var index = require('../Iterator.prototype.drop'); | ||
}); | ||
t.test('262: test/built-ins/Iterator/prototype/drop/get-return-method-throws', { skip: !hasPropertyDescriptors }, function (st) { | ||
var badIterator = { | ||
next: function next() { | ||
return { | ||
done: false, | ||
value: 1 | ||
}; | ||
} | ||
}; | ||
Object.defineProperty(badIterator, 'return', { | ||
configurable: true, | ||
enumerable: true, | ||
get: function () { throw new SyntaxError(); } | ||
}); | ||
var iter = drop(badIterator, 1); | ||
iter.next(); | ||
st['throws']( | ||
function () { iter['return'](); }, | ||
SyntaxError, | ||
'gets the `return` method, whose getter throws' | ||
); | ||
st.end(); | ||
}); | ||
}, | ||
@@ -60,0 +89,0 @@ index: function () { |
@@ -12,2 +12,3 @@ 'use strict'; | ||
var hasSymbols = require('has-symbols/shams')(); | ||
var hasPropertyDescriptors = require('has-property-descriptors')(); | ||
@@ -59,2 +60,126 @@ var index = require('../Iterator.prototype.filter'); | ||
}); | ||
t.test('262: test/built-ins/Iterator/prototype/filter/predicate-args', function (st) { | ||
var g = function g() { | ||
var arr = ['a', 'b', 'c']; | ||
var i = 0; | ||
return { | ||
next: function () { | ||
try { | ||
return { | ||
value: arr[i], | ||
done: i >= arr.length | ||
}; | ||
} finally { | ||
i += 1; | ||
} | ||
} | ||
}; | ||
}; | ||
var assertionCount = 0; | ||
var iter = filter( | ||
g(), | ||
function (value, count) { | ||
if (value === 'a') { | ||
st.equal(count, 0, 'first iteration'); | ||
} else if (value === 'b') { | ||
st.equal(count, 1, 'second iteration'); | ||
} else if (value === 'c') { | ||
st.equal(count, 2, 'third iteration'); | ||
} else { | ||
st.fail('unexpected iteration'); | ||
} | ||
assertionCount += 1; | ||
return true; | ||
} | ||
); | ||
st.equal(assertionCount, 0, 'prior to iteration'); | ||
testIterator(iter, ['a', 'b', 'c'], st, 'iteration'); | ||
st.equal(assertionCount, 3); | ||
st.end(); | ||
}); | ||
t.test('262: test/built-ins/Iterator/prototype/filter/predicate-throws', function (st) { | ||
var returnCalls = 0; | ||
var iter = { | ||
next: function () { | ||
return { | ||
done: false, | ||
value: 1 | ||
}; | ||
}, | ||
'return': function () { | ||
returnCalls += 1; | ||
return {}; | ||
} | ||
}; | ||
var callbackCalls = 0; | ||
var iterator = filter(iter, function () { | ||
callbackCalls += 1; | ||
throw new SyntaxError(); | ||
}); | ||
st['throws'](function () { iterator.next(); }, SyntaxError, 'next() throws'); | ||
st.equal(callbackCalls, 1); | ||
st.equal(returnCalls, 1); | ||
st.end(); | ||
}); | ||
t.test('262: test/built-ins/Iterator/prototype/filter/predicate-throws-then-closing-iterator-also-throws', function (st) { | ||
var iter = { | ||
next: function next() { | ||
return { | ||
done: false, | ||
value: 1 | ||
}; | ||
}, | ||
'return': function () { | ||
throw new EvalError(); | ||
} | ||
}; | ||
var iterator = filter(iter, function () { | ||
throw new SyntaxError(); | ||
}); | ||
st['throws']( | ||
function () { iterator.next(); }, | ||
SyntaxError, | ||
'when the predicate and return() both throw, the predicate’s exception wins' | ||
); | ||
st.end(); | ||
}); | ||
t.test('262: test/built-ins/Iterator/prototype/filter/get-return-method-throws', { skip: !hasPropertyDescriptors }, function (st) { | ||
var badIterator = { | ||
next: function next() { | ||
return { | ||
done: false, | ||
value: 1 | ||
}; | ||
} | ||
}; | ||
Object.defineProperty(badIterator, 'return', { get: function () { throw new SyntaxError(); } }); | ||
var iter = filter(badIterator, function () { return true; }); | ||
iter.next(); | ||
st['throws']( | ||
function () { iter['return'](); }, | ||
SyntaxError, | ||
'gets the `return` method, whose getter throws' | ||
); | ||
st.end(); | ||
}); | ||
}, | ||
@@ -61,0 +186,0 @@ index: function () { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
124339
2892
Updatedes-abstract@^1.21.2