@@ -5,15 +5,36 @@ import type { INode } from '../../dist/exports/index.js';
55export async function automation ( settings : ExampleSettings ) {
66 const page = await test ( settings ) ;
77 page ( 1 ) ;
8+ await waitForRendererIdle ( settings . renderer ) ;
89 await settings . snapshot ( ) ;
910
1011 page ( 2 ) ;
12+ await waitForRendererIdle ( settings . renderer ) ;
1113 await settings . snapshot ( ) ;
1214
1315 page ( 3 ) ;
16+ await waitForRendererIdle ( settings . renderer ) ;
1417 await settings . snapshot ( ) ;
1518}
1619
20+ function waitForRendererIdle ( renderer : ExampleSettings [ 'renderer' ] ) {
21+ return new Promise < void > ( ( resolve ) => {
22+ let timeout : ReturnType < typeof setTimeout > | undefined ;
23+
24+ const finishSoon = ( ) => {
25+ timeout = setTimeout ( ( ) => resolve ( ) , 200 ) ;
26+ } ;
27+
28+ renderer . once ( 'idle' , ( ) => {
29+ if ( timeout ) clearTimeout ( timeout ) ;
30+ finishSoon ( ) ;
31+ } ) ;
32+
33+ // Fallback in case `idle` already fired before we attached the listener
34+ finishSoon ( ) ;
35+ } ) ;
36+ }
37+
1738export default async function test ( { renderer, testRoot } : ExampleSettings ) {
1839 // Create a container node
1940 const containerNode = renderer . createNode ( {
@@ -62,7 +83,7 @@ export default async function test({ renderer, testRoot }: ExampleSettings) {
6283 'Container bound: ' + JSON . stringify ( containerNode . renderState ) + '\n' ;
6384
6485 for ( const node of containerNode . children ) {
65- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
86+
6687 status += `${
6788 ( node . children [ 0 ] as CoreTextNode ) ?. text
6889 } bound: ${ JSON . stringify ( node . renderState ) } \n`;
0 commit comments