diff options
Diffstat (limited to 'test/runner/jsdom.js')
-rw-r--r-- | test/runner/jsdom.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/test/runner/jsdom.js b/test/runner/jsdom.js new file mode 100644 index 000000000..d370ac348 --- /dev/null +++ b/test/runner/jsdom.js @@ -0,0 +1,55 @@ +import jsdom from "jsdom"; + +const { JSDOM } = jsdom; + +const windows = Object.create( null ); + +export async function runJSDOM( url, { reportId, verbose } ) { + const virtualConsole = new jsdom.VirtualConsole(); + virtualConsole.sendTo( console ); + virtualConsole.removeAllListeners( "clear" ); + + const { window } = await JSDOM.fromURL( url, { + resources: "usable", + runScripts: "dangerously", + virtualConsole + } ); + if ( verbose ) { + console.log( "JSDOM window opened.", reportId ); + } + windows[ reportId ] = window; + + return new Promise( ( resolve ) => { + window.finish = resolve; + } ); +} + +export function cleanupJSDOM( reportId, verbose ) { + const window = windows[ reportId ]; + if ( window ) { + if ( window.finish ) { + window.finish(); + } + window.close(); + delete windows[ reportId ]; + if ( verbose ) { + console.log( "Closed JSDOM window.", reportId ); + } + } +} + +export function cleanupAllJSDOM( verbose ) { + const windowsRemaining = Object.keys( windows ).length; + if ( windowsRemaining ) { + if ( verbose ) { + console.log( + `Cleaning up ${ windowsRemaining } JSDOM window${ + windowsRemaining > 1 ? "s" : "" + }...` + ); + } + for ( const id in windows ) { + cleanupJSDOM( id, verbose ); + } + } +} |