mirror of
https://github.com/hanzoai/core-js.git
synced 2026-09-24 16:58:15 +00:00
44 lines
1.9 KiB
JavaScript
44 lines
1.9 KiB
JavaScript
import { STRICT } from '../helpers/constants.js';
|
|
import { createIterator } from '../helpers/helpers.js';
|
|
|
|
QUnit.test('Iterator#join', assert => {
|
|
const { join } = Iterator.prototype;
|
|
const symbol = Symbol('a');
|
|
|
|
assert.isFunction(join);
|
|
assert.arity(join, 1);
|
|
assert.name(join, 'join');
|
|
assert.looksNative(join);
|
|
assert.nonEnumerable(Iterator.prototype, 'join');
|
|
|
|
const observableReturn = {
|
|
return() {
|
|
this.called = true;
|
|
return { done: true, value: undefined };
|
|
},
|
|
};
|
|
|
|
const itObservable1 = createIterator([1, 2, 3], observableReturn);
|
|
assert.strictEqual(join.call(itObservable1), '1,2,3', 'without separator attribute');
|
|
assert.true(itObservable1.called, 'iterator closes');
|
|
assert.strictEqual(join.call(createIterator([1, 2, 3]), '-'), '1-2-3', 'with separator attribute');
|
|
assert.strictEqual(join.call(createIterator([1, null, 3]), '-'), '1--3', 'skips nullish values');
|
|
assert.strictEqual(join.call(createIterator([1, undefined, 3]), '-'), '1--3', 'skips undefined values');
|
|
assert.strictEqual(join.call(createIterator([])), '', 'empty iterator');
|
|
|
|
if (STRICT) {
|
|
assert.throws(() => join.call(''), TypeError, 'iterable non-object this');
|
|
assert.throws(() => join.call(undefined), TypeError, 'non-iterable-object this #1');
|
|
assert.throws(() => join.call(null), TypeError, 'non-iterable-object this #2');
|
|
assert.throws(() => join.call(5), TypeError, 'non-iterable-object this #3');
|
|
}
|
|
|
|
const itObservable2 = createIterator([1, 2, 3], observableReturn);
|
|
assert.throws(() => join.call(itObservable2, symbol), TypeError, 'throws on symbol separator');
|
|
assert.true(itObservable2.called, 'iterator closes on argument validation error');
|
|
|
|
const itObservable3 = createIterator([1, symbol, 3], observableReturn);
|
|
assert.throws(() => join.call(itObservable3), TypeError, 'throws on non-stringable value');
|
|
assert.true(itObservable3.called, 'iterator closes on value conversion error');
|
|
});
|