Files
core-js/tests/unit-global/esnext.iterator.join.js

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');
});