@@ -324,3 +324,54 @@ test('support setting the signal as a default option', async t => {
324324
325325 t . true ( signalHandlersRemoved ( ) , 'Abort signal event handlers not removed' ) ;
326326} ) ;
327+
328+ // See https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static
329+ test ( 'support AbortSignal.timeout()' , async t => {
330+ const signal = AbortSignal . timeout ( 1 ) ;
331+
332+ const p = got ( 'http://example.com' , { signal} ) ;
333+
334+ await t . throwsAsync ( p , {
335+ code : 23 ,
336+ message : 'The operation was aborted due to timeout' ,
337+ } ) ;
338+ } ) ;
339+
340+ test ( 'support AbortSignal.timeout() without user abort' , async t => {
341+ const { controller, signalHandlersRemoved} = createAbortController ( ) ;
342+ const timeoutSignal = AbortSignal . timeout ( 1 ) ;
343+ const signal = AbortSignal . any ( [
344+ controller . signal ,
345+ timeoutSignal ,
346+ ] ) ;
347+ const p = got ( 'http://example.com' , { signal} ) ;
348+
349+ await t . throwsAsync ( p , {
350+ code : 23 ,
351+ message : 'The operation was aborted due to timeout' ,
352+ } ) ;
353+
354+ t . true ( signalHandlersRemoved ( ) , 'Abort signal event handlers not removed' ) ;
355+ } ) ;
356+
357+ test ( 'support AbortSignal.timeout() with user abort' , async t => {
358+ const { controller, signalHandlersRemoved} = createAbortController ( ) ;
359+ const timeoutSignal = AbortSignal . timeout ( 1000 ) ;
360+ const signal = AbortSignal . any ( [
361+ controller . signal ,
362+ timeoutSignal ,
363+ ] ) ;
364+
365+ setTimeout ( ( ) => {
366+ controller . abort ( ) ;
367+ } , 10 ) ;
368+
369+ const p = got ( 'http://example.com' , { signal} ) ;
370+
371+ await t . throwsAsync ( p , {
372+ code : 'ERR_ABORTED' ,
373+ message : 'This operation was aborted.' ,
374+ } ) ;
375+
376+ t . true ( signalHandlersRemoved ( ) , 'Abort signal event handlers not removed' ) ;
377+ } ) ;
0 commit comments