@@ -80,3 +80,75 @@ fs.promises.open(file, 'r').then((handle) => {
80
80
assert . strictEqual ( output , input ) ;
81
81
} ) ) ;
82
82
} ) . then ( common . mustCall ( ) ) ;
83
+
84
+ // AbortSignal option test
85
+ fs . promises . open ( file , 'r' ) . then ( ( handle ) => {
86
+ const controller = new AbortController ( ) ;
87
+ const { signal } = controller ;
88
+ const stream = handle . createReadStream ( { signal } ) ;
89
+
90
+ stream . on ( 'data' , common . mustNotCall ( ) ) ;
91
+ stream . on ( 'end' , common . mustNotCall ( ) ) ;
92
+
93
+ stream . on ( 'error' , common . mustCall ( ( err ) => {
94
+ assert . strictEqual ( err . name , 'AbortError' ) ;
95
+ } ) ) ;
96
+
97
+ stream . on ( 'close' , common . mustCall ( ( ) => {
98
+ handle . close ( ) ;
99
+ } ) ) ;
100
+
101
+ controller . abort ( ) ;
102
+ } ) . then ( common . mustCall ( ) ) ;
103
+
104
+ // Already-aborted signal test
105
+ fs . promises . open ( file , 'r' ) . then ( ( handle ) => {
106
+ const signal = AbortSignal . abort ( ) ;
107
+ const stream = handle . createReadStream ( { signal } ) ;
108
+
109
+ stream . on ( 'data' , common . mustNotCall ( ) ) ;
110
+ stream . on ( 'end' , common . mustNotCall ( ) ) ;
111
+
112
+ stream . on ( 'error' , common . mustCall ( ( err ) => {
113
+ assert . strictEqual ( err . name , 'AbortError' ) ;
114
+ } ) ) ;
115
+
116
+ stream . on ( 'close' , common . mustCall ( ( ) => {
117
+ handle . close ( ) ;
118
+ } ) ) ;
119
+ } ) . then ( common . mustCall ( ) ) ;
120
+
121
+ // Invalid signal type test
122
+ fs . promises . open ( file , 'r' ) . then ( ( handle ) => {
123
+ for ( const signal of [ 1 , { } , [ ] , '' , null , NaN , 1n , ( ) => { } , Symbol ( ) , false , true ] ) {
124
+ assert . throws ( ( ) => {
125
+ handle . createReadStream ( { signal } ) ;
126
+ } , {
127
+ code : 'ERR_INVALID_ARG_TYPE' ,
128
+ name : 'TypeError' ,
129
+ } ) ;
130
+ }
131
+ return handle . close ( ) ;
132
+ } ) . then ( common . mustCall ( ) ) ;
133
+
134
+ // Custom abort reason test
135
+ fs . promises . open ( file , 'r' ) . then ( ( handle ) => {
136
+ const controller = new AbortController ( ) ;
137
+ const { signal } = controller ;
138
+ const reason = new Error ( 'some silly abort reason' ) ;
139
+ const stream = handle . createReadStream ( { signal } ) ;
140
+
141
+ stream . on ( 'data' , common . mustNotCall ( ) ) ;
142
+ stream . on ( 'end' , common . mustNotCall ( ) ) ;
143
+
144
+ stream . on ( 'error' , common . mustCall ( ( err ) => {
145
+ assert . strictEqual ( err . name , 'AbortError' ) ;
146
+ assert . strictEqual ( err . cause , reason ) ;
147
+ } ) ) ;
148
+
149
+ stream . on ( 'close' , common . mustCall ( ( ) => {
150
+ handle . close ( ) ;
151
+ } ) ) ;
152
+
153
+ controller . abort ( reason ) ;
154
+ } ) . then ( common . mustCall ( ) ) ;
0 commit comments