fei.wang
10 天以前 ae7b22322555448d95fd56f505bafa325c167a26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
'use strict';
 
var test = require('tape');
 
var stopIterationIterator = require('../');
 
test('stopIterationIterator', function (t) {
    t.equal(typeof stopIterationIterator, 'function', 'stopIterationIterator is a function');
 
    t.test('no StopIteration support', { skip: typeof StopIteration === 'object' }, function (st) {
        st['throws'](
            // @ts-expect-error
            function () { stopIterationIterator(); },
            SyntaxError,
            'throws a SyntaxError when StopIteration is not supported'
        );
 
        st.end();
    });
 
    t.test('StopIteration support', { skip: typeof StopIteration !== 'object' }, function (st) {
        // eslint-disable-next-line no-extra-parens
        var s = /** @type {Set<number> & { iterator(): SetIterator<number>}} */ (new Set([1, 2]));
 
        var i = s.iterator();
        st.equal(i.next(), 1, 'first item is 1');
        st.equal(i.next(), 2, 'second item is 2');
        try {
            i.next();
            st.fail();
        } catch (e) {
            st.equal(e, StopIteration, 'StopIteration thrown');
        }
 
        // eslint-disable-next-line no-extra-parens
        var m = /** @type {Map<number, string> & { iterator(): MapIterator<[string, number]>}} */ (new Map([[1, 'a'], [2, 'b']]));
        var mi = m.iterator();
        st.deepEqual(mi.next(), [1, 'a'], 'first item is 1 and a');
        st.deepEqual(mi.next(), [2, 'b'], 'second item is 2 and b');
        try {
            mi.next();
            st.fail();
        } catch (e) {
            st.equal(e, StopIteration, 'StopIteration thrown');
        }
 
        st.end();
    });
 
    t.end();
});