@@ -7,20 +7,70 @@ const path = require('path');
77const tmpdir = require ( '../common/tmpdir' ) ;
88const assert = require ( 'assert' ) ;
99const tmpDir = tmpdir . path ;
10+ const { Readable } = require ( 'stream' ) ;
1011
1112tmpdir . refresh ( ) ;
1213
1314const dest = path . resolve ( tmpDir , 'tmp.txt' ) ;
1415const otherDest = path . resolve ( tmpDir , 'tmp-2.txt' ) ;
1516const buffer = Buffer . from ( 'abc' . repeat ( 1000 ) ) ;
1617const 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+ } ;
1734
1835async function doWrite ( ) {
1936 await fsPromises . writeFile ( dest , buffer ) ;
2037 const data = fs . readFileSync ( dest ) ;
2138 assert . deepStrictEqual ( data , buffer ) ;
2239}
2340
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+
2474async function doWriteWithCancel ( ) {
2575 const controller = new AbortController ( ) ;
2676 const { signal } = controller ;
@@ -55,4 +105,8 @@ doWrite()
55105 . then ( doAppend )
56106 . then ( doRead )
57107 . then ( doReadWithEncoding )
108+ . then ( doWriteStream )
109+ . then ( doWriteStreamWithCancel )
110+ . then ( doWriteIterable )
111+ . then ( doWriteAsyncIterable )
58112 . then ( common . mustCall ( ) ) ;
0 commit comments