@@ -4,153 +4,20 @@ import { describe, it } from 'mocha';
4
4
import { flattenAsyncIterable } from '../flattenAsyncIterable' ;
5
5
6
6
describe ( 'flattenAsyncIterable' , ( ) => {
7
- it ( 'does not modify an already flat async generator' , async ( ) => {
8
- async function * source ( ) {
9
- yield await Promise . resolve ( 1 ) ;
10
- yield await Promise . resolve ( 2 ) ;
11
- yield await Promise . resolve ( 3 ) ;
12
- }
13
-
14
- const result = flattenAsyncIterable ( source ( ) ) ;
15
-
16
- expect ( await result . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
17
- expect ( await result . next ( ) ) . to . deep . equal ( { value : 2 , done : false } ) ;
18
- expect ( await result . next ( ) ) . to . deep . equal ( { value : 3 , done : false } ) ;
19
- expect ( await result . next ( ) ) . to . deep . equal ( {
20
- value : undefined ,
21
- done : true ,
22
- } ) ;
23
- } ) ;
24
-
25
- it ( 'does not modify an already flat async iterator' , async ( ) => {
26
- const items = [ 1 , 2 , 3 ] ;
27
-
28
- const iterator : any = {
29
- [ Symbol . asyncIterator ] ( ) {
30
- return this ;
31
- } ,
32
- next ( ) {
33
- return Promise . resolve ( {
34
- done : items . length === 0 ,
35
- value : items . shift ( ) ,
36
- } ) ;
37
- } ,
38
- } ;
39
-
40
- const result = flattenAsyncIterable ( iterator ) ;
41
-
42
- expect ( await result . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
43
- expect ( await result . next ( ) ) . to . deep . equal ( { value : 2 , done : false } ) ;
44
- expect ( await result . next ( ) ) . to . deep . equal ( { value : 3 , done : false } ) ;
45
- expect ( await result . next ( ) ) . to . deep . equal ( {
46
- value : undefined ,
47
- done : true ,
48
- } ) ;
49
- } ) ;
50
-
51
- it ( 'flatten nested async generators' , async ( ) => {
52
- async function * source ( ) {
53
- yield await Promise . resolve ( 1 ) ;
54
- yield await Promise . resolve ( 2 ) ;
55
- yield await Promise . resolve (
56
- ( async function * nested ( ) : AsyncGenerator < number , void , void > {
57
- yield await Promise . resolve ( 2.1 ) ;
58
- yield await Promise . resolve ( 2.2 ) ;
59
- } ) ( ) ,
60
- ) ;
61
- yield await Promise . resolve ( 3 ) ;
62
- }
63
-
64
- const doubles = flattenAsyncIterable ( source ( ) ) ;
65
-
66
- const result = [ ] ;
67
- for await ( const x of doubles ) {
68
- result . push ( x ) ;
69
- }
70
- expect ( result ) . to . deep . equal ( [ 1 , 2 , 2.1 , 2.2 , 3 ] ) ;
71
- } ) ;
72
-
73
- it ( 'allows returning early from a nested async generator' , async ( ) => {
7
+ it ( 'completely yields sub-iterables even when next() called in parallel' , async ( ) => {
74
8
async function * source ( ) {
75
- yield await Promise . resolve ( 1 ) ;
76
- yield await Promise . resolve ( 2 ) ;
77
9
yield await Promise . resolve (
78
10
( async function * nested ( ) : AsyncGenerator < number , void , void > {
79
- yield await Promise . resolve ( 2.1 ) ; /* c8 ignore start */
80
- // Not reachable, early return
81
- yield await Promise . resolve ( 2.2 ) ;
11
+ yield await Promise . resolve ( 1.1 ) ;
12
+ yield await Promise . resolve ( 1.2 ) ;
82
13
} ) ( ) ,
83
14
) ;
84
- // Not reachable, early return
85
- yield await Promise . resolve ( 3 ) ;
86
- }
87
- /* c8 ignore stop */
88
-
89
- const doubles = flattenAsyncIterable ( source ( ) ) ;
90
-
91
- expect ( await doubles . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
92
- expect ( await doubles . next ( ) ) . to . deep . equal ( { value : 2 , done : false } ) ;
93
- expect ( await doubles . next ( ) ) . to . deep . equal ( { value : 2.1 , done : false } ) ;
94
-
95
- // Early return
96
- expect ( await doubles . return ( ) ) . to . deep . equal ( {
97
- value : undefined ,
98
- done : true ,
99
- } ) ;
100
-
101
- // Subsequent next calls
102
- expect ( await doubles . next ( ) ) . to . deep . equal ( {
103
- value : undefined ,
104
- done : true ,
105
- } ) ;
106
- expect ( await doubles . next ( ) ) . to . deep . equal ( {
107
- value : undefined ,
108
- done : true ,
109
- } ) ;
110
- } ) ;
111
-
112
- it ( 'allows throwing errors from a nested async generator' , async ( ) => {
113
- async function * source ( ) {
114
- yield await Promise . resolve ( 1 ) ;
115
- yield await Promise . resolve ( 2 ) ;
116
15
yield await Promise . resolve (
117
16
( async function * nested ( ) : AsyncGenerator < number , void , void > {
118
- yield await Promise . resolve ( 2.1 ) ; /* c8 ignore start */
119
- // Not reachable, early return
17
+ yield await Promise . resolve ( 2.1 ) ;
120
18
yield await Promise . resolve ( 2.2 ) ;
121
19
} ) ( ) ,
122
20
) ;
123
- // Not reachable, early return
124
- yield await Promise . resolve ( 3 ) ;
125
- }
126
- /* c8 ignore stop */
127
-
128
- const doubles = flattenAsyncIterable ( source ( ) ) ;
129
-
130
- expect ( await doubles . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
131
- expect ( await doubles . next ( ) ) . to . deep . equal ( { value : 2 , done : false } ) ;
132
- expect ( await doubles . next ( ) ) . to . deep . equal ( { value : 2.1 , done : false } ) ;
133
-
134
- // Throw error
135
- let caughtError ;
136
- try {
137
- await doubles . throw ( 'ouch' ) ; /* c8 ignore start */
138
- // Not reachable, always throws
139
- /* c8 ignore stop */
140
- } catch ( e ) {
141
- caughtError = e ;
142
- }
143
- expect ( caughtError ) . to . equal ( 'ouch' ) ;
144
- } ) ;
145
- it ( 'completely yields sub-iterables even when next() called in parallel' , async ( ) => {
146
- async function * source ( ) {
147
- yield await Promise . resolve (
148
- ( async function * nested ( ) : AsyncGenerator < number , void , void > {
149
- yield await Promise . resolve ( 1.1 ) ;
150
- yield await Promise . resolve ( 1.2 ) ;
151
- } ) ( ) ,
152
- ) ;
153
- yield await Promise . resolve ( 2 ) ;
154
21
}
155
22
156
23
const result = flattenAsyncIterable ( source ( ) ) ;
@@ -159,7 +26,8 @@ describe('flattenAsyncIterable', () => {
159
26
const promise2 = result . next ( ) ;
160
27
expect ( await promise1 ) . to . deep . equal ( { value : 1.1 , done : false } ) ;
161
28
expect ( await promise2 ) . to . deep . equal ( { value : 1.2 , done : false } ) ;
162
- expect ( await result . next ( ) ) . to . deep . equal ( { value : 2 , done : false } ) ;
29
+ expect ( await result . next ( ) ) . to . deep . equal ( { value : 2.1 , done : false } ) ;
30
+ expect ( await result . next ( ) ) . to . deep . equal ( { value : 2.2 , done : false } ) ;
163
31
expect ( await result . next ( ) ) . to . deep . equal ( {
164
32
value : undefined ,
165
33
done : true ,
0 commit comments