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