/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: BUSL-1.1 */ import { module } from 'qunit'; import { resolve } from 'rsvp'; import startApp from '../helpers/start-app'; import destroyApp from '../helpers/destroy-app'; export default function (name, options = {}) { let setTimeout = window.setTimeout; let setInterval = window.setInterval; module(name, { beforeEach() { const speedup = function (func) { return function (cb, interval = 0) { if (interval > 10) { interval = Math.max(Math.round(interval / 10), 10); } return func(cb, interval); }; }; window.setTimeout = speedup(window.setTimeout); window.setInterval = speedup(window.setInterval); this.application = startApp(); if (options.beforeEach) { return options.beforeEach.apply(this, arguments); } }, afterEach() { window.setTimeout = setTimeout; window.setInterval = setInterval; let afterEach = options.afterEach && options.afterEach.apply(this, arguments); return resolve(afterEach).then(() => destroyApp(this.application)); }, }); }