Skip to content

Commit

Permalink
fix: continue
Browse files Browse the repository at this point in the history
  • Loading branch information
syzzana committed Apr 6, 2024
1 parent b328d5f commit 8638b71
Show file tree
Hide file tree
Showing 10 changed files with 169 additions and 83 deletions.
10 changes: 10 additions & 0 deletions dist/src/indent-list-reporter.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ import Color from "./color-text/Color.js";
import { log, logTestResults } from "./loggin-tests-data.js";
import { lineBreak } from "./color-text/styling-terminal.js";
import { logTestError } from "./loggin-error-message.js";
import { loadPlaywrightConfig } from "./utils/load-playwright-configuration.js";
import os from "node:os";
/**
* Get the config from playwright.config.ts
*/
//export const userPlaywrightConfigFile = await getPlaywrightConfigFile();
//export const convertImportFilePathForWindows = adaptFilePathImportForWindows(userPlaywrightConfigFile);
//export const whichPlatForm = isWindows ? convertImportFilePathForWindows : userPlaywrightConfigFile;
export const playwrightConfigDetails = await loadPlaywrightConfig();
const defaultListTestsWithColors = {
ignoreColors: false,
baseColors: {
Expand Down Expand Up @@ -40,6 +49,7 @@ class IndentListReporter {
return true;
}
onBegin(config, suite) {
console.log("OS", os.platform().startsWith("win"));
howToReadTestResults(this.options.environment);
log(`${Color.text("TEST RESULTS:").cyan().bgBlack().valueOf()}`);
const number = suite.allTests().length;
Expand Down
35 changes: 8 additions & 27 deletions dist/src/loggin-tests-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,7 @@ import { getReporterOptions } from "./reporter-configuration.js";
import { lineBreak, setIconAndColorPerTestStatus } from "./color-text/styling-terminal.js";
import { filterOutDuplicateFailedTestsOnRetry } from "./filtering-tests.js";
import { logTestError } from "./loggin-error-message.js";
import { adaptFilePathImportForWindows, isWindows } from "./utils/utils.js";
// Dynamically determine the Playwright config file's extension (.ts or .js)
export const getPlaywrightConfigFile = async () => {
const tsConfigPath = `${process.cwd()}/playwright.config.ts`;
const jsConfigPath = `${process.cwd()}/playwright.config.js`;
try {
await import(tsConfigPath);
return tsConfigPath;
}
catch {
return jsConfigPath; // Fallback to .js if .ts import fails
}
};
/**
* Get the config from playwright.config.ts
*/
export const userPlaywrightConfigFile = await getPlaywrightConfigFile();
export const convertImportFilePathForWindows = adaptFilePathImportForWindows(userPlaywrightConfigFile);
export const whichPlatForm = isWindows ? convertImportFilePathForWindows : userPlaywrightConfigFile;
export const playwrightConfigDetails = await import(whichPlatForm);
import { playwrightConfigDetails } from "./indent-list-reporter.js";
/**
* Log the name of the spec file only once
* Example output:
Expand All @@ -39,9 +20,9 @@ export const playwrightConfigDetails = await import(whichPlatForm);
* @param specFileName
*/
// This function is now async due to dynamic import
export const logSpecFileName = async (specFileName, playwrightConfigDetails) => {
export const logSpecFileName = async (specFileName) => {
// @ts-ignore
const reporterOptions = getReporterOptions(playwrightConfigDetails.default.reporter);
const reporterOptions = await getReporterOptions(playwrightConfigDetails.default.reporter);
let specFileNameColor;
if (reporterOptions !== undefined) {
specFileNameColor = reporterOptions?.baseColors?.specFileNameColor
Expand Down Expand Up @@ -78,7 +59,7 @@ export const log = (...data) => {
* `
* @param suiteName
*/
export const logSuiteDescription = (suiteName, playwrightConfigDetails) => {
export const logSuiteDescription = (suiteName) => {
// @ts-ignore
const reporterOptions = getReporterOptions(playwrightConfigDetails.default.reporter);
let suiteDescriptionColor;
Expand All @@ -104,7 +85,7 @@ export const logSuiteDescription = (suiteName, playwrightConfigDetails) => {
* @param count
* @param test
*/
export const logTestCaseData = (count, test, playwrightConfigDetails) => {
export const logTestCaseData = (count, test) => {
const status = setIconAndColorPerTestStatus(test.status);
const duration = Color.text(`(${test.duration}ms)`).gray().dim().valueOf();
const counter = `${Color.text(`${count}.`).gray().valueOf()}`;
Expand Down Expand Up @@ -149,13 +130,13 @@ export const logTestCaseData = (count, test, playwrightConfigDetails) => {
export const logTestResults = (allTests) => {
let testCounter = 0;
allTests.forEach((specFile) => {
logSpecFileName(specFile.getSpecName(), playwrightConfigDetails);
logSpecFileName(specFile.getSpecName());
specFile.getSuiteTests().forEach((suite) => {
logSuiteDescription(suite.getSuiteDescription(), playwrightConfigDetails);
logSuiteDescription(suite.getSuiteDescription());
suite.getTestCases().forEach((test) => {
//TODO: filter getTests() here failed tests that were retried and failed again
testCounter++;
logTestCaseData(testCounter, test, playwrightConfigDetails);
logTestCaseData(testCounter, test);
});
});
});
Expand Down
43 changes: 43 additions & 0 deletions dist/src/utils/load-playwright-configuration.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Existing utility functions remain unchanged.
import os from "node:os";
import { adaptFilePathImportForWindows } from "./utils.js";
// Dynamically determine the Playwright config file's extension (.ts or .js)
// ...
export const loadPlaywrightConfig = async () => {
//const tsConfigPath = `${process.cwd()}/playwright.config.ts`;
//const jsConfigPath = `${process.cwd()}/playwright.config.js`;
const userPlaywrightConfigFile = `${process.cwd()}/playwright.config.ts`;
const convertImportFilePathForWindows = adaptFilePathImportForWindows(userPlaywrightConfigFile);
let importPath; //= isWindows ? convertImportFilePathForWindows : userPlaywrightConfigFile;
if (os.platform().startsWith("win")) {
importPath = convertImportFilePathForWindows;
}
else {
importPath = userPlaywrightConfigFile;
}
// Since 'whichPlatform' may already start with 'file://', check to avoid duplicating the prefix.
// const importPath = whichPlatform.startsWith('file://') ? whichPlatform : `file://${whichPlatform}`;
try {
const playwrightConfigDetails = await import(importPath);
return playwrightConfigDetails;
}
catch (error) {
console.error('Trying to load the Playwright config:', error.message);
// Handle the error appropriately.
// It might be returning a default configuration, throwing an error, etc.
// throw error; // Example: re-throwing the error.
}
};
// Call the async function and handle the loaded configuration.
// This could be inside an async context if you have one, like an async main function or an IIFE (Immediately Invoked Function Expression).
// (async () => {
// try {
// const config = await loadPlaywrightConfig();
// console.log("Loaded Playwright Config:", config);
// // Do something with the loaded config.
// return config;
// } catch (error) {
// console.error("Error loading the Playwright configuration:", error);
// // Handle initialization failure, possibly exit the process if fatal.
// }
// })();
7 changes: 2 additions & 5 deletions dist/src/utils/utils.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import os from "node:os";
export const isWindows = os.platform().startsWith("win");
export const adaptFilePathImportForWindows = (filePath) => {
let newFilePath = '';
if (isWindows) {
newFilePath = filePath.replace("/", '\\');
}
return `file:///${newFilePath}`;
const windowsFilePath = filePath.replace("/", '\\');
return `file:///${windowsFilePath}`;
};
13 changes: 11 additions & 2 deletions src/indent-list-reporter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,21 @@ import {TestCase, TestResult, Reporter, FullResult, Suite, FullConfig} from "@pl
import {SuiteTestCases, TestCaseData, TestCaseError, TestsPerSpecFile} from "./TestsPerSpecFile.js";
import {getFileNameOrParentSuite, howToReadTestResults, logSummary, StatusCounter} from "./general-tests-info.js";
import {filterUniqueSpecsBySpecName} from "./filtering-tests.js";
import { TestStatus} from "@playwright/test";
import {PlaywrightTestConfig, TestStatus} from "@playwright/test";
import {TestError} from "playwright/types/testReporter";
import Color from "./color-text/Color.js";
import {log, logTestResults} from "./loggin-tests-data.js";
import {lineBreak} from "./color-text/styling-terminal.js";
import {logTestError} from "./loggin-error-message.js";
import {loadPlaywrightConfig} from "./utils/load-playwright-configuration.js";
import os from "node:os"

/**
* Get the config from playwright.config.ts
*/
//export const userPlaywrightConfigFile = await getPlaywrightConfigFile();
//export const convertImportFilePathForWindows = adaptFilePathImportForWindows(userPlaywrightConfigFile);
//export const whichPlatForm = isWindows ? convertImportFilePathForWindows : userPlaywrightConfigFile;

const defaultListTestsWithColors: IndentListReporterOptions = {
ignoreColors: false,
Expand Down Expand Up @@ -108,7 +117,7 @@ class IndentListReporter implements Reporter {
try {
throw new Error(`ERROR: ${error.message}`);
} catch (e) {
console.log(e);
log(e.message);
}
}

Expand Down
46 changes: 13 additions & 33 deletions src/loggin-tests-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,10 @@ import {lineBreak, setIconAndColorPerTestStatus} from "./color-text/styling-term
import {filterOutDuplicateFailedTestsOnRetry} from "./filtering-tests.js";
import {logTestError} from "./loggin-error-message.js";
import {ColorsAvailable} from "./indent-list-reporter.js";
import { adaptFilePathImportForWindows, isWindows } from "./utils/utils.js";

// Dynamically determine the Playwright config file's extension (.ts or .js)
export const getPlaywrightConfigFile = async () => {
const tsConfigPath = `${process.cwd()}/playwright.config.ts`;
const jsConfigPath = `${process.cwd()}/playwright.config.js`;

try {
await import(tsConfigPath);
return tsConfigPath;
} catch {
return jsConfigPath; // Fallback to .js if .ts import fails
}
};

/**
* Get the config from playwright.config.ts
*/
export const userPlaywrightConfigFile = await getPlaywrightConfigFile();
export const convertImportFilePathForWindows = adaptFilePathImportForWindows(userPlaywrightConfigFile);
export const whichPlatForm = isWindows ? convertImportFilePathForWindows : userPlaywrightConfigFile;
export const playwrightConfigDetails: PlaywrightTestConfig = await import(whichPlatForm)

import { loadPlaywrightConfig } from "./utils/load-playwright-configuration.js";
// import {playwrightConfigDetails} from "./indent-list-reporter.js";

const playwrightConfigDetails = loadPlaywrightConfig();
/**
* Log the name of the spec file only once
* Example output:
Expand All @@ -46,9 +26,9 @@ export const playwrightConfigDetails: PlaywrightTestConfig = await import(whichP
* @param specFileName
*/
// This function is now async due to dynamic import
export const logSpecFileName = async (specFileName: string, playwrightConfigDetails: PlaywrightTestConfig) => {
// @ts-ignore
const reporterOptions = getReporterOptions(playwrightConfigDetails.default.reporter);
export const logSpecFileName = async (specFileName: string) => {
//@ts-ignore
const reporterOptions = await getReporterOptions(playwrightConfigDetails.default.reporter);
let specFileNameColor: ColorsAvailable;
if (reporterOptions !== undefined) {
specFileNameColor = reporterOptions?.baseColors?.specFileNameColor
Expand Down Expand Up @@ -85,9 +65,9 @@ export const log = (...data: any[]) => {
* `
* @param suiteName
*/
export const logSuiteDescription = (suiteName: string, playwrightConfigDetails: PlaywrightTestConfig) => {
export const logSuiteDescription = (suiteName: string) => {
// @ts-ignore
const reporterOptions = getReporterOptions(playwrightConfigDetails.default.reporter);
const reporterOptions = getReporterOptions(playwrightConfigDetails.reporter);
let suiteDescriptionColor: ColorsAvailable;
if (reporterOptions !== undefined) {
suiteDescriptionColor = reporterOptions?.baseColors?.suiteDescriptionColor
Expand All @@ -110,12 +90,12 @@ export const logSuiteDescription = (suiteName: string, playwrightConfigDetails:
* @param count
* @param test
*/
export const logTestCaseData = (count: number, test: TestCaseData, playwrightConfigDetails: PlaywrightTestConfig) => {
export const logTestCaseData = (count: number, test: TestCaseData) => {
const status = setIconAndColorPerTestStatus(test.status);
const duration = Color.text(`(${test.duration}ms)`).gray().dim().valueOf();
const counter = `${Color.text(`${count}.`).gray().valueOf()}`;
// @ts-ignore
const reporterOptions = getReporterOptions(playwrightConfigDetails.default.reporter);
const reporterOptions = getReporterOptions(playwrightConfigDetails.reporter);
let testCaseTitleColor: ColorsAvailable;
if (reporterOptions !== undefined) {
testCaseTitleColor = reporterOptions?.baseColors?.testCaseTitleColor
Expand Down Expand Up @@ -153,13 +133,13 @@ export const logTestResults = (allTests: TestsPerSpecFile[]) => {
let testCounter = 0;

allTests.forEach((specFile) => {
logSpecFileName(specFile.getSpecName(), playwrightConfigDetails);
logSpecFileName(specFile.getSpecName());
specFile.getSuiteTests().forEach((suite) => {
logSuiteDescription(suite.getSuiteDescription(), playwrightConfigDetails);
logSuiteDescription(suite.getSuiteDescription());
suite.getTestCases().forEach((test) => {
//TODO: filter getTests() here failed tests that were retried and failed again
testCounter++;
logTestCaseData(testCounter, test, playwrightConfigDetails);
logTestCaseData(testCounter, test);
});
});
});
Expand Down
62 changes: 62 additions & 0 deletions src/utils/load-playwright-configuration.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import os from "node:os"
import fs from "fs"
import { PlaywrightTestConfig } from "playwright/test";
import { adaptFilePathImportForWindows, isWindows } from "./utils.js";

// Dynamically determine the Playwright config file's extension (.ts or .js)
export const loadPlaywrightConfig = () :PlaywrightTestConfig => {
const isTsOrJsExtenstion = isPlaywrightConfigFileTsOrJs();

const userPlaywrightConfigFile = `${process.cwd()}/playwright.config.${isTsOrJsExtenstion}`;
const convertImportFilePathForWindows = adaptFilePathImportForWindows(userPlaywrightConfigFile);
let importPath = isWindows ? convertImportFilePathForWindows : userPlaywrightConfigFile;
if (os.platform().startsWith("win")){
importPath = convertImportFilePathForWindows;
} else {
importPath = userPlaywrightConfigFile;
}
// Since 'whichPlatform' may already start with 'file://', check to avoid duplicating the prefix.
// const importPath = whichPlatform.startsWith('file://') ? whichPlatform : `file://${whichPlatform}`;

try {
// @ts-ignore
const playwrightConfigDetails: PlaywrightTestConfig = import(importPath);
return playwrightConfigDetails;
} catch (error) {
// @ts-ignore
console.error('Trying to load the Playwright config:', error.message);
// Handle the error appropriately.
// It might be returning a default configuration, throwing an error, etc.
throw error; // Example: re-throwing the error.
}
};

export type PlaywrightConfigFileType = "ts" | "js";

export const isPlaywrightConfigFileTsOrJs = () => {
const tsConfigPath = `${process.cwd()}/playwright.config.ts`;
const jsConfigPath = `${process.cwd()}/playwright.config.js`;

let isTsOrJs: PlaywrightConfigFileType;
if (fs.existsSync(tsConfigPath)) {
isTsOrJs = "ts";
}
if (fs.existsSync(jsConfigPath)) {
isTsOrJs = "js";
}
return isTsOrJs;
}
// Call the async function and handle the loaded configuration.
// This could be inside an async context if you have one,
// like an async main function or an IIFE (Immediately Invoked Function Expression).
// (async () => {
// try {
// const config = await loadPlaywrightConfig();
// console.log("Loaded Playwright Config:", config);
// // Do something with the loaded config.
// return config;
// } catch (error) {
// console.error("Error loading the Playwright configuration:", error);
// // Handle initialization failure, possibly exit the process if fatal.
// }
// })();
10 changes: 4 additions & 6 deletions src/utils/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@ import os from "node:os"
export const isWindows = os.platform().startsWith("win")

export const adaptFilePathImportForWindows = (filePath: string) => {
let newFilePath = ''
if(isWindows) {
newFilePath = filePath.replace("/", '\\')

}
return `file:///${newFilePath}`

const windowsFilePath = filePath.replace("/", '\\')

return `file:///${windowsFilePath}`
}
23 changes: 14 additions & 9 deletions tests/loggin-test-data.test.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
import {getPlaywrightConfigFile, userPlaywrightConfigFile} from "../src/loggin-tests-data";
import {loadPlaywrightConfig} from "../src/utils/load-playwright-configuration";

import {test, expect} from 'vitest';
test("check module exists", async () => {
const myModule = await getPlaywrightConfigFile();
expect(myModule).toContain("playwright.config.ts");
// const myModule = await getPlaywrightConfigFile();
// expect(myModule).toContain("playwright.config.ts");
})

test("load playwright config", async () => {
const config = loadPlaywrightConfig();
expect(config).toBeDefined();
console.log(config.reporter[0][1].baseColors.specFileNameColor);

Check failure on line 12 in tests/loggin-test-data.test.ts

View workflow job for this annotation

GitHub Actions / test

tests/loggin-test-data.test.ts > load playwright config

TypeError: Cannot read properties of undefined (reading '0') ❯ tests/loggin-test-data.test.ts:12:24
});

test("check module does not exist", async () => {
const myModule = await getPlaywrightConfigFile();
expect(myModule).not.toContain("playwright.config.js");
// const myModule = await getPlaywrightConfigFile();
// expect(myModule).not.toContain("playwright.config.js");
});

test("check we can import config data from playwright.config.ts on repo file", async () => {
expect(userPlaywrightConfigFile).toContain("indent-list-reporter/playwright.config.ts");
let playwrightConfigDetails = await import(`${process.cwd()}/playwright.config.ts`);
let playwrightConfigDetailsJS = await import(`${process.cwd()}/playwright.config.js`);
expect(playwrightConfigDetails).toBeDefined()
let playwrightConfigDetailsTS = await import(`${process.cwd()}/playwright.config.ts`);
// let playwrightConfigDetailsJS = await import(`${process.cwd()}/playwright.config.js`);
expect(playwrightConfigDetailsTS).toBeDefined()
})

test("check we can import config data from playwright.config.ts", async () => {
Expand Down
Loading

0 comments on commit 8638b71

Please sign in to comment.