// @ts-expect-error import SvelteComponent from '__MAIN_DOT_SVELTE__'; // @ts-expect-error import config from '__CONFIG__'; // @ts-expect-error import * as assert from 'assert.js'; export default async function (target) { let unhandled_rejection = false; function unhandled_rejection_handler(event) { unhandled_rejection = event.reason; } window.addEventListener('unhandledrejection', unhandled_rejection_handler); try { if (config.before_test) config.before_test(); const options = Object.assign( {}, { target, // @ts-expect-error // eslint-disable-next-line no-undef hydrate: __HYDRATE__, props: config.props, intro: config.intro }, config.options || {} ); const component = new SvelteComponent(options); const waitUntil = async (fn, ms = 500) => { const start = new Date().getTime(); do { if (fn()) return; await new Promise((resolve) => window.setTimeout(resolve, 1)); } while (new Date().getTime() <= start + ms); }; if (config.html) { assert.htmlEqual(target.innerHTML, config.html); } if (config.test) { await config.test({ assert, component, target, window, waitUntil }); component.$destroy(); if (unhandled_rejection) { throw unhandled_rejection; } } else { component.$destroy(); assert.htmlEqual(target.innerHTML, ''); if (unhandled_rejection) { throw unhandled_rejection; } } if (config.after_test) config.after_test(); } catch (error) { if (config.error) { assert.equal(error.message, config.error); } else { throw error; } } finally { window.removeEventListener('unhandledrejection', unhandled_rejection_handler); } }