16
16
*/
17
17
18
18
const utils = require ( './utils' ) ;
19
- const { performance } = require ( 'perf_hooks' ) ;
20
19
21
20
/**
22
21
* @type {PageTestSuite }
@@ -396,29 +395,39 @@ module.exports.describe = function({testRunner, expect, playwright, MAC, WIN, FF
396
395
expect ( response . status ( ) ) . toBe ( 200 ) ;
397
396
} ) ;
398
397
398
+ /**
399
+ * @param {import('../src/frames').Frame } frame
400
+ * @param {TestServer } server
401
+ * @param {'networkidle0'|'networkidle2' } signal
402
+ * @param {() => Promise<void> } action
403
+ * @param {boolean } isSetContent
404
+ */
399
405
async function networkIdleTest ( frame , server , signal , action , isSetContent ) {
400
- let lastResponseFinished ;
401
406
const finishResponse = response => {
402
- lastResponseFinished = performance . now ( ) ;
403
407
response . statusCode = 404 ;
404
408
response . end ( `File not found` ) ;
405
409
} ;
406
-
410
+ const waitForRequest = suffix => {
411
+ return Promise . all ( [
412
+ server . waitForRequest ( suffix ) ,
413
+ frame . _page . waitForRequest ( server . PREFIX + suffix ) ,
414
+ ] )
415
+ }
407
416
let responses = { } ;
408
417
// Hold on to a bunch of requests without answering.
409
418
server . setRoute ( '/fetch-request-a.js' , ( req , res ) => responses . a = res ) ;
410
419
server . setRoute ( '/fetch-request-b.js' , ( req , res ) => responses . b = res ) ;
411
420
server . setRoute ( '/fetch-request-c.js' , ( req , res ) => responses . c = res ) ;
412
421
const initialFetchResourcesRequested = Promise . all ( [
413
- server . waitForRequest ( '/fetch-request-a.js' ) ,
414
- server . waitForRequest ( '/fetch-request-b.js' ) ,
415
- server . waitForRequest ( '/fetch-request-c.js' ) ,
422
+ waitForRequest ( '/fetch-request-a.js' ) ,
423
+ waitForRequest ( '/fetch-request-b.js' ) ,
424
+ waitForRequest ( '/fetch-request-c.js' )
416
425
] ) ;
417
426
418
427
let secondFetchResourceRequested ;
419
428
if ( signal === 'networkidle0' ) {
420
429
server . setRoute ( '/fetch-request-d.js' , ( req , res ) => responses . d = res ) ;
421
- secondFetchResourceRequested = server . waitForRequest ( '/fetch-request-d.js' ) ;
430
+ secondFetchResourceRequested = waitForRequest ( '/fetch-request-d.js' ) ;
422
431
}
423
432
424
433
const waitForLoadPromise = isSetContent ? Promise . resolve ( ) : frame . waitForNavigation ( { waitUntil : 'load' } ) ;
@@ -442,10 +451,11 @@ module.exports.describe = function({testRunner, expect, playwright, MAC, WIN, FF
442
451
expect ( responses . a ) . toBeTruthy ( ) ;
443
452
expect ( responses . b ) . toBeTruthy ( ) ;
444
453
expect ( responses . c ) . toBeTruthy ( ) ;
445
- // Finishing first response should leave 2 requests alive and trigger networkidle2.
446
- finishResponse ( responses . a ) ;
447
-
454
+ let timer ;
455
+ let timerTriggered = false ;
448
456
if ( signal === 'networkidle0' ) {
457
+ // Finishing first response should leave 2 requests alive and trigger networkidle2.
458
+ finishResponse ( responses . a ) ;
449
459
// Finishing two more responses should trigger the second round.
450
460
finishResponse ( responses . b ) ;
451
461
finishResponse ( responses . c ) ;
@@ -454,11 +464,16 @@ module.exports.describe = function({testRunner, expect, playwright, MAC, WIN, FF
454
464
await secondFetchResourceRequested ;
455
465
expect ( actionFinished ) . toBe ( false ) ;
456
466
// Finishing the last response should trigger networkidle0.
467
+ timer = setTimeout ( ( ) => timerTriggered = true , 500 ) ;
457
468
finishResponse ( responses . d ) ;
469
+ } else {
470
+ timer = setTimeout ( ( ) => timerTriggered = true , 500 ) ;
471
+ // Finishing first response should leave 2 requests alive and trigger networkidle2.
472
+ finishResponse ( responses . a ) ;
458
473
}
459
-
460
474
const response = await actionPromise ;
461
- expect ( performance . now ( ) - lastResponseFinished ) . not . toBeLessThan ( 450 ) ;
475
+ clearTimeout ( timer ) ;
476
+ expect ( timerTriggered ) . toBe ( true ) ;
462
477
if ( ! isSetContent )
463
478
expect ( response . ok ( ) ) . toBe ( true ) ;
464
479
0 commit comments