// This file is part of MinIO Console Server // Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . import * as fs from "fs"; import * as path from "path"; import * as crypto from "crypto"; import { test as baseTest } from "@playwright/test"; const istanbulCLIOutput = path.join(process.cwd(), ".nyc_output"); export function generateUUID(): string { return crypto.randomBytes(16).toString("hex"); } export const test = baseTest.extend({ context: async ({ context }, use) => { await context.addInitScript(() => window.addEventListener("beforeunload", () => (window as any).collectIstanbulCoverage( JSON.stringify((window as any).__coverage__), ), ), ); await fs.promises.mkdir(istanbulCLIOutput, { recursive: true }); await context.exposeFunction( "collectIstanbulCoverage", (coverageJSON: string) => { if (coverageJSON) fs.writeFileSync( path.join( istanbulCLIOutput, `playwright_coverage_${generateUUID()}.json`, ), coverageJSON, ); }, ); await use(context); for (const page of context.pages()) { await page.evaluate(() => (window as any).collectIstanbulCoverage( JSON.stringify((window as any).__coverage__), ), ); } }, }); export const expect = test.expect;