50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
// Copyright 2021 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import { assert } from 'chai';
|
|
|
|
import { isIterable } from '../../util/isIterable';
|
|
|
|
describe('isIterable', () => {
|
|
it('returns false for non-iterables', () => {
|
|
assert.isFalse(isIterable(undefined));
|
|
assert.isFalse(isIterable(null));
|
|
assert.isFalse(isIterable(123));
|
|
assert.isFalse(isIterable({ foo: 'bar' }));
|
|
assert.isFalse(
|
|
isIterable({
|
|
length: 2,
|
|
'0': 'fake',
|
|
'1': 'array',
|
|
})
|
|
);
|
|
});
|
|
|
|
it('returns true for iterables', () => {
|
|
assert.isTrue(isIterable('strings are iterable'));
|
|
assert.isTrue(isIterable(['arrays too']));
|
|
assert.isTrue(isIterable(new Set('and sets')));
|
|
assert.isTrue(isIterable(new Map([['and', 'maps']])));
|
|
assert.isTrue(
|
|
isIterable({
|
|
[Symbol.iterator]() {
|
|
return {
|
|
next() {
|
|
return {
|
|
value: 'endless iterable',
|
|
done: false,
|
|
};
|
|
},
|
|
};
|
|
},
|
|
})
|
|
);
|
|
assert.isTrue(
|
|
isIterable(
|
|
(function* generators() {
|
|
yield 123;
|
|
})()
|
|
)
|
|
);
|
|
});
|
|
});
|