diff --git a/test/custom-elements/index.ts b/test/custom-elements/index.ts index 53413584ee..42b27eebd3 100644 --- a/test/custom-elements/index.ts +++ b/test/custom-elements/index.ts @@ -4,7 +4,7 @@ import * as http from 'http'; import { rollup } from 'rollup'; import virtual from '@rollup/plugin-virtual'; import puppeteer from 'puppeteer'; -import { addLineNumbers, loadConfig, loadSvelte, retryAsync } from '../helpers'; +import { addLineNumbers, loadConfig, loadSvelte, retryAsync, executeBrowserTest } from '../helpers'; import { deepEqual } from 'assert'; const page = ` @@ -124,39 +124,14 @@ describe('custom-elements', function() { } } - // NOTE: Chromium may exit with SIGSEGV, so retry in that case - let count = 0; - do { - count++; - try { - const page = await browser.newPage(); - - page.on('console', (type) => { - console[type._type](type._text); - }); - - page.on('error', error => { - console.log('>>> an error happened'); - console.error(error); - }); - - await page.goto('http://localhost:6789'); - const result = await page.evaluate(() => test(document.querySelector('main'))); - if (result) console.log(result); + browser = await executeBrowserTest( + browser, + launchPuppeteer, + assertWarnings, + () => { + console.log(addLineNumbers(code)); assertWarnings(); - await page.close(); - break; - } catch (err) { - if (count === 5 || browser.isConnected()) { - console.log(addLineNumbers(code)); - assertWarnings(); - throw err; - } - console.debug(err.stack || err); - console.log('RESTARTING Chromium...'); - browser = await launchPuppeteer(); - } - } while (count <= 5); + }); }); }); }); diff --git a/test/helpers.ts b/test/helpers.ts index 8ab622b827..1ea0b19880 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -291,3 +291,38 @@ export async function retryAsync(fn: () => Promise, maxAttempts: number = } } } + +// NOTE: Chromium may exit with SIGSEGV, so retry in that case +export async function executeBrowserTest(browser, launchPuppeteer: () => Promise, additionalAssertion: () => void, onError: (err: Error) => void) { + let count = 0; + do { + count++; + try { + const page = await browser.newPage(); + + page.on('console', (type) => { + console[type._type](type._text); + }); + + page.on('error', error => { + console.log('>>> an error happened'); + console.error(error); + }); + await page.goto('http://localhost:6789'); + const result = await page.evaluate(() => test(document.querySelector('main'))); + if (result) console.log(result); + additionalAssertion(); + await page.close(); + break; + } catch (err) { + if (count === 5 || browser.isConnected()) { + onError(err); + throw err; + } + console.debug(err.stack || err); + console.log('RESTARTING Chromium...'); + browser = await launchPuppeteer(); + } + } while (count <= 5); + return browser; +} diff --git a/test/runtime-puppeteer/index.ts b/test/runtime-puppeteer/index.ts index 24f760273e..8e6f813de4 100644 --- a/test/runtime-puppeteer/index.ts +++ b/test/runtime-puppeteer/index.ts @@ -10,7 +10,8 @@ import { loadSvelte, mkdirp, prettyPrintPuppeteerAssertionError, - retryAsync + retryAsync, + executeBrowserTest } from '../helpers'; import { deepEqual } from 'assert'; @@ -227,40 +228,16 @@ describe('runtime (puppeteer)', function() { throw new Error('Received unexpected warnings'); } } - // NOTE: Chromium may exit with SIGSEGV, so retry in that case - let count = 0; - do { - count++; - try { - const page = await browser.newPage(); - - page.on('console', (type) => { - console[type._type](type._text); - }); - - page.on('error', error => { - console.log('>>> an error happened'); - console.error(error); - }); - - await page.goto('http://localhost:6789'); - const result = await page.evaluate(() => test(document.querySelector('main'))); - if (result) console.log(result); + + browser = await executeBrowserTest( + browser, + launchPuppeteer, + assertWarnings, + (err) => { + failed.add(dir); + prettyPrintPuppeteerAssertionError(err.message); assertWarnings(); - await page.close(); - break; - } catch (err) { - if (count === 5 || browser.isConnected()) { - failed.add(dir); - prettyPrintPuppeteerAssertionError(err.message); - assertWarnings(); - throw err; - } - console.debug(err.stack || err); - console.log('RESTARTING Chromium...'); - browser = await launchPuppeteer(); - } - } while (count <= 5); + }); }); }