@@ -7,20 +7,70 @@ const path = require('path');
7
7
const tmpdir = require ( '../common/tmpdir' ) ;
8
8
const assert = require ( 'assert' ) ;
9
9
const tmpDir = tmpdir . path ;
10
+ const { Readable } = require ( 'stream' ) ;
10
11
11
12
tmpdir . refresh ( ) ;
12
13
13
14
const dest = path . resolve ( tmpDir , 'tmp.txt' ) ;
14
15
const otherDest = path . resolve ( tmpDir , 'tmp-2.txt' ) ;
15
16
const buffer = Buffer . from ( 'abc' . repeat ( 1000 ) ) ;
16
17
const buffer2 = Buffer . from ( 'xyz' . repeat ( 1000 ) ) ;
18
+ const stream = Readable . from ( [ 'a' , 'b' , 'c' ] ) ;
19
+ const stream2 = Readable . from ( [ 'a' , 'b' , 'c' ] ) ;
20
+ const iterable = {
21
+ [ Symbol . iterator ] : function * ( ) {
22
+ yield 'a' ;
23
+ yield 'b' ;
24
+ yield 'c' ;
25
+ }
26
+ } ;
27
+ const asyncIterable = {
28
+ async * [ Symbol . asyncIterator ] ( ) {
29
+ yield 'a' ;
30
+ yield 'b' ;
31
+ yield 'c' ;
32
+ }
33
+ } ;
17
34
18
35
async function doWrite ( ) {
19
36
await fsPromises . writeFile ( dest , buffer ) ;
20
37
const data = fs . readFileSync ( dest ) ;
21
38
assert . deepStrictEqual ( data , buffer ) ;
22
39
}
23
40
41
+ async function doWriteStream ( ) {
42
+ await fsPromises . writeFile ( dest , stream ) ;
43
+ let expected = '' ;
44
+ for await ( const v of stream2 ) expected += v ;
45
+ const data = fs . readFileSync ( dest , 'utf-8' ) ;
46
+ assert . deepStrictEqual ( data , expected ) ;
47
+ }
48
+
49
+ async function doWriteStreamWithCancel ( ) {
50
+ const controller = new AbortController ( ) ;
51
+ const { signal } = controller ;
52
+ process . nextTick ( ( ) => controller . abort ( ) ) ;
53
+ assert . rejects ( fsPromises . writeFile ( otherDest , stream , { signal } ) , {
54
+ name : 'AbortError'
55
+ } ) ;
56
+ }
57
+
58
+ async function doWriteIterable ( ) {
59
+ await fsPromises . writeFile ( dest , iterable ) ;
60
+ let expected = '' ;
61
+ for await ( const v of iterable ) expected += v ;
62
+ const data = fs . readFileSync ( dest , 'utf-8' ) ;
63
+ assert . deepStrictEqual ( data , expected ) ;
64
+ }
65
+
66
+ async function doWriteAsyncIterable ( ) {
67
+ await fsPromises . writeFile ( dest , asyncIterable ) ;
68
+ let expected = '' ;
69
+ for await ( const v of asyncIterable ) expected += v ;
70
+ const data = fs . readFileSync ( dest , 'utf-8' ) ;
71
+ assert . deepStrictEqual ( data , expected ) ;
72
+ }
73
+
24
74
async function doWriteWithCancel ( ) {
25
75
const controller = new AbortController ( ) ;
26
76
const { signal } = controller ;
@@ -55,4 +105,8 @@ doWrite()
55
105
. then ( doAppend )
56
106
. then ( doRead )
57
107
. then ( doReadWithEncoding )
108
+ . then ( doWriteStream )
109
+ . then ( doWriteStreamWithCancel )
110
+ . then ( doWriteIterable )
111
+ . then ( doWriteAsyncIterable )
58
112
. then ( common . mustCall ( ) ) ;
0 commit comments