From 465e3474ba9eeab5b336eeff9f1b266d70fd5b0f Mon Sep 17 00:00:00 2001 From: Adam Basha <110662505+Bashamega@users.noreply.github.com> Date: Mon, 31 Mar 2025 14:19:32 +0200 Subject: [PATCH 01/11] Refactor test script for improved readability and modularity --- src/test.ts | 176 ++++++++++++++++------------------------------------ 1 file changed, 52 insertions(+), 124 deletions(-) diff --git a/src/test.ts b/src/test.ts index 5cbc000de..ec0b6a7c6 100644 --- a/src/test.ts +++ b/src/test.ts @@ -5,167 +5,95 @@ import { fileURLToPath } from "url"; const baselineFolder = new URL("../baselines/", import.meta.url); const outputFolder = new URL("../generated/", import.meta.url); -const tscPath = new URL( - "../node_modules/typescript/lib/tsc.js", - import.meta.url, -); +const tscPath = new URL("../node_modules/typescript/lib/tsc.js", import.meta.url); -function normalizeLineEndings(text: string): string { - return text.replace(/\r\n?/g, "\n"); -} +const normalizeLineEndings = (text) => text.replace(/\r\n?/g, "\n"); -function compareToBaselines(baselineFolder: URL, outputFolder: URL) { - let baselineFiles: string[] = []; +const getFiles = (folder) => { try { - baselineFiles = fs.readdirSync(baselineFolder); + return fs.readdirSync(folder); } catch { - // do nothing + return []; } +}; - let outputFiles: string[] = []; +const readFileContent = (filePath) => { try { - outputFiles = fs.readdirSync(outputFolder); + return normalizeLineEndings(fs.readFileSync(filePath, "utf-8")); } catch { - // do nothing + return null; } +}; - for (const file of new Set([...baselineFiles, ...outputFiles])) { - if (file.startsWith(".")) { - continue; - } +const compareToBaselines = (baselineFolder, outputFolder) => { + const files = new Set([...getFiles(baselineFolder), ...getFiles(outputFolder)]); - let baselineStats: fs.Stats | undefined; - try { - baselineStats = fs.statSync(new URL(file, baselineFolder)); - } catch { - // do nothing - } + for (const file of files) { + if (file.startsWith(".")) continue; - let outputStats: fs.Stats | undefined; - try { - outputStats = fs.statSync(new URL(file, outputFolder)); - } catch { - // do nothing - } + const baselinePath = new URL(file, baselineFolder); + const outputPath = new URL(file, outputFolder); - const baseline = baselineStats?.isFile() - ? normalizeLineEndings( - fs.readFileSync(new URL(file, baselineFolder)).toString(), - ) - : null; + const isBaselineFile = fs.existsSync(baselinePath) && fs.statSync(baselinePath).isFile(); + const isOutputFile = fs.existsSync(outputPath) && fs.statSync(outputPath).isFile(); - const generated = outputStats?.isFile() - ? normalizeLineEndings( - fs.readFileSync(new URL(file, outputFolder)).toString(), - ) - : null; + const baseline = isBaselineFile ? readFileContent(baselinePath) : null; + const generated = isOutputFile ? readFileContent(outputPath) : null; if (baseline !== null || generated !== null) { if (baseline !== generated) { - console.error( - `Test failed: '${file}' is different from baseline file.`, - ); + console.error(`Test failed: '${file}' is different from baseline.`); printUnifiedDiff(baseline ?? "", generated ?? ""); return false; } - continue; } - if (baselineStats?.isDirectory() || outputStats?.isDirectory()) { - const childBaselineFolder = new URL(`${file}/`, baselineFolder); - const childOutputFolder = new URL(`${file}/`, outputFolder); - if (!compareToBaselines(childBaselineFolder, childOutputFolder)) { + if (fs.existsSync(baselinePath) || fs.existsSync(outputPath)) { + if (!compareToBaselines(new URL(`${file}/`, baselineFolder), new URL(`${file}/`, outputFolder))) { return false; } - - continue; } } return true; -} +}; -function compileGeneratedFiles(lib: string, ...files: string[]) { +const compileGeneratedFiles = (lib, ...files) => { try { - child_process.execSync( - `node ${fileURLToPath( - tscPath, - )} --strict --lib ${lib} --types --noEmit ${files - .map((file) => fileURLToPath(new URL(file, outputFolder))) - .join(" ")}`, - ); - } catch (e: any) { - console.error(`Test failed: could not compile '${files.join(",")}':`); + const fileArgs = files.map((file) => fileURLToPath(new URL(file, outputFolder))).join(" "); + child_process.execSync(`node ${fileURLToPath(tscPath)} --strict --lib ${lib} --types --noEmit ${fileArgs}`); + } catch (e) { + console.error(`Test failed: could not compile '${files.join(", ")}'.`); console.error(e.stdout.toString()); - console.error(); return false; } return true; -} - -function test() { - if ( - compareToBaselines(baselineFolder, outputFolder) && - compileGeneratedFiles("es5", "dom.generated.d.ts") && - compileGeneratedFiles( - "es6", - "dom.generated.d.ts", - "dom.iterable.generated.d.ts", - ) && - compileGeneratedFiles( - "es2018", - "dom.generated.d.ts", - "dom.asynciterable.generated.d.ts", - ) && - compileGeneratedFiles("es5", "webworker.generated.d.ts") && - compileGeneratedFiles( - "es6", - "webworker.generated.d.ts", - "webworker.iterable.generated.d.ts", - ) && - compileGeneratedFiles( - "es2018", - "webworker.generated.d.ts", - "webworker.asynciterable.generated.d.ts", - ) && - compileGeneratedFiles("es5", "sharedworker.generated.d.ts") && - compileGeneratedFiles( - "es6", - "sharedworker.generated.d.ts", - "sharedworker.iterable.generated.d.ts", - ) && - compileGeneratedFiles( - "es2018", - "sharedworker.generated.d.ts", - "sharedworker.asynciterable.generated.d.ts", - ) && - compileGeneratedFiles("es5", "serviceworker.generated.d.ts") && - compileGeneratedFiles( - "es6", - "serviceworker.generated.d.ts", - "serviceworker.iterable.generated.d.ts", - ) && - compileGeneratedFiles( - "es2018", - "serviceworker.generated.d.ts", - "serviceworker.asynciterable.generated.d.ts", - ) && - compileGeneratedFiles("es5", "audioworklet.generated.d.ts") && - compileGeneratedFiles( - "es6", - "audioworklet.generated.d.ts", - "audioworklet.iterable.generated.d.ts", - ) && - compileGeneratedFiles( - "es2018", - "audioworklet.generated.d.ts", - "audioworklet.asynciterable.generated.d.ts", - ) - ) { +}; + +const test = () => { + const compileSets = [ + ["es5", ["dom.generated.d.ts"]], + ["es6", ["dom.generated.d.ts", "dom.iterable.generated.d.ts"]], + ["es2018", ["dom.generated.d.ts", "dom.asynciterable.generated.d.ts"]], + ["es5", ["webworker.generated.d.ts"]], + ["es6", ["webworker.generated.d.ts", "webworker.iterable.generated.d.ts"]], + ["es2018", ["webworker.generated.d.ts", "webworker.asynciterable.generated.d.ts"]], + ["es5", ["sharedworker.generated.d.ts"]], + ["es6", ["sharedworker.generated.d.ts", "sharedworker.iterable.generated.d.ts"]], + ["es2018", ["sharedworker.generated.d.ts", "sharedworker.asynciterable.generated.d.ts"]], + ["es5", ["serviceworker.generated.d.ts"]], + ["es6", ["serviceworker.generated.d.ts", "serviceworker.iterable.generated.d.ts"]], + ["es2018", ["serviceworker.generated.d.ts", "serviceworker.asynciterable.generated.d.ts"]], + ["es5", ["audioworklet.generated.d.ts"]], + ["es6", ["audioworklet.generated.d.ts", "audioworklet.iterable.generated.d.ts"]], + ["es2018", ["audioworklet.generated.d.ts", "audioworklet.asynciterable.generated.d.ts"]], + ]; + + if (compareToBaselines(baselineFolder, outputFolder) && compileSets.every(([lib, files]) => compileGeneratedFiles(lib, ...files))) { console.log("All tests passed."); process.exit(0); } process.exit(1); -} +}; test(); From 74fe7373df98c2ad9e908f5323e3c8e1f873b132 Mon Sep 17 00:00:00 2001 From: Basha MEGA Date: Mon, 31 Mar 2025 12:24:17 +0000 Subject: [PATCH 02/11] format --- src/test.ts | 80 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 65 insertions(+), 15 deletions(-) diff --git a/src/test.ts b/src/test.ts index ec0b6a7c6..1b82cc470 100644 --- a/src/test.ts +++ b/src/test.ts @@ -5,7 +5,10 @@ import { fileURLToPath } from "url"; const baselineFolder = new URL("../baselines/", import.meta.url); const outputFolder = new URL("../generated/", import.meta.url); -const tscPath = new URL("../node_modules/typescript/lib/tsc.js", import.meta.url); +const tscPath = new URL( + "../node_modules/typescript/lib/tsc.js", + import.meta.url, +); const normalizeLineEndings = (text) => text.replace(/\r\n?/g, "\n"); @@ -26,7 +29,10 @@ const readFileContent = (filePath) => { }; const compareToBaselines = (baselineFolder, outputFolder) => { - const files = new Set([...getFiles(baselineFolder), ...getFiles(outputFolder)]); + const files = new Set([ + ...getFiles(baselineFolder), + ...getFiles(outputFolder), + ]); for (const file of files) { if (file.startsWith(".")) continue; @@ -34,8 +40,10 @@ const compareToBaselines = (baselineFolder, outputFolder) => { const baselinePath = new URL(file, baselineFolder); const outputPath = new URL(file, outputFolder); - const isBaselineFile = fs.existsSync(baselinePath) && fs.statSync(baselinePath).isFile(); - const isOutputFile = fs.existsSync(outputPath) && fs.statSync(outputPath).isFile(); + const isBaselineFile = + fs.existsSync(baselinePath) && fs.statSync(baselinePath).isFile(); + const isOutputFile = + fs.existsSync(outputPath) && fs.statSync(outputPath).isFile(); const baseline = isBaselineFile ? readFileContent(baselinePath) : null; const generated = isOutputFile ? readFileContent(outputPath) : null; @@ -50,7 +58,12 @@ const compareToBaselines = (baselineFolder, outputFolder) => { } if (fs.existsSync(baselinePath) || fs.existsSync(outputPath)) { - if (!compareToBaselines(new URL(`${file}/`, baselineFolder), new URL(`${file}/`, outputFolder))) { + if ( + !compareToBaselines( + new URL(`${file}/`, baselineFolder), + new URL(`${file}/`, outputFolder), + ) + ) { return false; } } @@ -60,8 +73,12 @@ const compareToBaselines = (baselineFolder, outputFolder) => { const compileGeneratedFiles = (lib, ...files) => { try { - const fileArgs = files.map((file) => fileURLToPath(new URL(file, outputFolder))).join(" "); - child_process.execSync(`node ${fileURLToPath(tscPath)} --strict --lib ${lib} --types --noEmit ${fileArgs}`); + const fileArgs = files + .map((file) => fileURLToPath(new URL(file, outputFolder))) + .join(" "); + child_process.execSync( + `node ${fileURLToPath(tscPath)} --strict --lib ${lib} --types --noEmit ${fileArgs}`, + ); } catch (e) { console.error(`Test failed: could not compile '${files.join(", ")}'.`); console.error(e.stdout.toString()); @@ -77,19 +94,52 @@ const test = () => { ["es2018", ["dom.generated.d.ts", "dom.asynciterable.generated.d.ts"]], ["es5", ["webworker.generated.d.ts"]], ["es6", ["webworker.generated.d.ts", "webworker.iterable.generated.d.ts"]], - ["es2018", ["webworker.generated.d.ts", "webworker.asynciterable.generated.d.ts"]], + [ + "es2018", + ["webworker.generated.d.ts", "webworker.asynciterable.generated.d.ts"], + ], ["es5", ["sharedworker.generated.d.ts"]], - ["es6", ["sharedworker.generated.d.ts", "sharedworker.iterable.generated.d.ts"]], - ["es2018", ["sharedworker.generated.d.ts", "sharedworker.asynciterable.generated.d.ts"]], + [ + "es6", + ["sharedworker.generated.d.ts", "sharedworker.iterable.generated.d.ts"], + ], + [ + "es2018", + [ + "sharedworker.generated.d.ts", + "sharedworker.asynciterable.generated.d.ts", + ], + ], ["es5", ["serviceworker.generated.d.ts"]], - ["es6", ["serviceworker.generated.d.ts", "serviceworker.iterable.generated.d.ts"]], - ["es2018", ["serviceworker.generated.d.ts", "serviceworker.asynciterable.generated.d.ts"]], + [ + "es6", + ["serviceworker.generated.d.ts", "serviceworker.iterable.generated.d.ts"], + ], + [ + "es2018", + [ + "serviceworker.generated.d.ts", + "serviceworker.asynciterable.generated.d.ts", + ], + ], ["es5", ["audioworklet.generated.d.ts"]], - ["es6", ["audioworklet.generated.d.ts", "audioworklet.iterable.generated.d.ts"]], - ["es2018", ["audioworklet.generated.d.ts", "audioworklet.asynciterable.generated.d.ts"]], + [ + "es6", + ["audioworklet.generated.d.ts", "audioworklet.iterable.generated.d.ts"], + ], + [ + "es2018", + [ + "audioworklet.generated.d.ts", + "audioworklet.asynciterable.generated.d.ts", + ], + ], ]; - if (compareToBaselines(baselineFolder, outputFolder) && compileSets.every(([lib, files]) => compileGeneratedFiles(lib, ...files))) { + if ( + compareToBaselines(baselineFolder, outputFolder) && + compileSets.every(([lib, files]) => compileGeneratedFiles(lib, ...files)) + ) { console.log("All tests passed."); process.exit(0); } From 34e146ceda24925ad1ff10239a6d4d9a18d35831 Mon Sep 17 00:00:00 2001 From: Adam Basha <110662505+Bashamega@users.noreply.github.com> Date: Mon, 31 Mar 2025 14:32:24 +0200 Subject: [PATCH 03/11] chore: add types --- src/test.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test.ts b/src/test.ts index 1b82cc470..9ab7a70b0 100644 --- a/src/test.ts +++ b/src/test.ts @@ -10,9 +10,9 @@ const tscPath = new URL( import.meta.url, ); -const normalizeLineEndings = (text) => text.replace(/\r\n?/g, "\n"); +const normalizeLineEndings = (text: string) => text.replace(/\r\n?/g, "\n"); -const getFiles = (folder) => { +const getFiles = (folder: URL) => { try { return fs.readdirSync(folder); } catch { @@ -20,7 +20,7 @@ const getFiles = (folder) => { } }; -const readFileContent = (filePath) => { +const readFileContent = (filePath: URL) => { try { return normalizeLineEndings(fs.readFileSync(filePath, "utf-8")); } catch { @@ -28,7 +28,7 @@ const readFileContent = (filePath) => { } }; -const compareToBaselines = (baselineFolder, outputFolder) => { +const compareToBaselines = (baselineFolder: URL, outputFolder: URL) => { const files = new Set([ ...getFiles(baselineFolder), ...getFiles(outputFolder), @@ -71,7 +71,7 @@ const compareToBaselines = (baselineFolder, outputFolder) => { return true; }; -const compileGeneratedFiles = (lib, ...files) => { +const compileGeneratedFiles = (lib: string[] | string, ...files: string[]) => { try { const fileArgs = files .map((file) => fileURLToPath(new URL(file, outputFolder))) From d04d0095a114d57d0957c1fdb2e7b9d4dac76054 Mon Sep 17 00:00:00 2001 From: Adam Basha <110662505+Bashamega@users.noreply.github.com> Date: Mon, 31 Mar 2025 14:34:54 +0200 Subject: [PATCH 04/11] - --- src/test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test.ts b/src/test.ts index 9ab7a70b0..5da4052fa 100644 --- a/src/test.ts +++ b/src/test.ts @@ -81,7 +81,7 @@ const compileGeneratedFiles = (lib: string[] | string, ...files: string[]) => { ); } catch (e) { console.error(`Test failed: could not compile '${files.join(", ")}'.`); - console.error(e.stdout.toString()); + console.error(e?.stdout ? e.stdout.toString() : e); return false; } return true; From c899c09a1c722526b0829817710880cba7ef45bc Mon Sep 17 00:00:00 2001 From: Adam Basha <110662505+Bashamega@users.noreply.github.com> Date: Mon, 31 Mar 2025 14:36:08 +0200 Subject: [PATCH 05/11] - --- src/test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test.ts b/src/test.ts index 5da4052fa..07c577a68 100644 --- a/src/test.ts +++ b/src/test.ts @@ -81,7 +81,6 @@ const compileGeneratedFiles = (lib: string[] | string, ...files: string[]) => { ); } catch (e) { console.error(`Test failed: could not compile '${files.join(", ")}'.`); - console.error(e?.stdout ? e.stdout.toString() : e); return false; } return true; From 414add9dfcb90ca3a53199d3a175427053c7b8b7 Mon Sep 17 00:00:00 2001 From: Adam Basha <110662505+Bashamega@users.noreply.github.com> Date: Mon, 31 Mar 2025 14:37:21 +0200 Subject: [PATCH 06/11] - --- src/test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test.ts b/src/test.ts index 07c577a68..b6a5f4e76 100644 --- a/src/test.ts +++ b/src/test.ts @@ -79,7 +79,7 @@ const compileGeneratedFiles = (lib: string[] | string, ...files: string[]) => { child_process.execSync( `node ${fileURLToPath(tscPath)} --strict --lib ${lib} --types --noEmit ${fileArgs}`, ); - } catch (e) { + } catch { console.error(`Test failed: could not compile '${files.join(", ")}'.`); return false; } From 23e40c53f93bf15170a008e3a3af7718b7662168 Mon Sep 17 00:00:00 2001 From: Adam Basha <110662505+Bashamega@users.noreply.github.com> Date: Tue, 1 Apr 2025 07:25:37 +0000 Subject: [PATCH 07/11] Switch to function --- src/test.ts | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/test.ts b/src/test.ts index b6a5f4e76..35ea85339 100644 --- a/src/test.ts +++ b/src/test.ts @@ -10,25 +10,27 @@ const tscPath = new URL( import.meta.url, ); -const normalizeLineEndings = (text: string) => text.replace(/\r\n?/g, "\n"); +function normalizeLineEndings(text: string) { + text.replace(/\r\n?/g, "\n"); +} -const getFiles = (folder: URL) => { +function getFiles(folder: URL) { try { return fs.readdirSync(folder); } catch { return []; } -}; +} -const readFileContent = (filePath: URL) => { +function readFileContent(filePath: URL) { try { return normalizeLineEndings(fs.readFileSync(filePath, "utf-8")); } catch { return null; } -}; +} -const compareToBaselines = (baselineFolder: URL, outputFolder: URL) => { +function compareToBaselines(baselineFolder: URL, outputFolder: URL) { const files = new Set([ ...getFiles(baselineFolder), ...getFiles(outputFolder), @@ -69,9 +71,9 @@ const compareToBaselines = (baselineFolder: URL, outputFolder: URL) => { } } return true; -}; +} -const compileGeneratedFiles = (lib: string[] | string, ...files: string[]) => { +function compileGeneratedFiles(lib: string[] | string, ...files: string[]) { try { const fileArgs = files .map((file) => fileURLToPath(new URL(file, outputFolder))) @@ -84,9 +86,9 @@ const compileGeneratedFiles = (lib: string[] | string, ...files: string[]) => { return false; } return true; -}; +} -const test = () => { +function test() { const compileSets = [ ["es5", ["dom.generated.d.ts"]], ["es6", ["dom.generated.d.ts", "dom.iterable.generated.d.ts"]], @@ -143,6 +145,6 @@ const test = () => { process.exit(0); } process.exit(1); -}; +} test(); From 81e4c8f0aef986d3ac5b5c03bb0fe68aa32c3800 Mon Sep 17 00:00:00 2001 From: Adam Basha <110662505+Bashamega@users.noreply.github.com> Date: Tue, 1 Apr 2025 07:47:25 +0000 Subject: [PATCH 08/11] fix --- src/test.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/test.ts b/src/test.ts index 35ea85339..eed3f5879 100644 --- a/src/test.ts +++ b/src/test.ts @@ -10,8 +10,8 @@ const tscPath = new URL( import.meta.url, ); -function normalizeLineEndings(text: string) { - text.replace(/\r\n?/g, "\n"); +function normalizeLineEndings(text: string): string { + return text.replace(/\r\n?/g, "\n"); } function getFiles(folder: URL) { @@ -23,11 +23,7 @@ function getFiles(folder: URL) { } function readFileContent(filePath: URL) { - try { - return normalizeLineEndings(fs.readFileSync(filePath, "utf-8")); - } catch { - return null; - } + return normalizeLineEndings(fs.readFileSync(filePath, "utf-8")); } function compareToBaselines(baselineFolder: URL, outputFolder: URL) { @@ -59,7 +55,7 @@ function compareToBaselines(baselineFolder: URL, outputFolder: URL) { continue; } - if (fs.existsSync(baselinePath) || fs.existsSync(outputPath)) { + if (fs.existsSync(baselinePath)) { if ( !compareToBaselines( new URL(`${file}/`, baselineFolder), @@ -73,7 +69,7 @@ function compareToBaselines(baselineFolder: URL, outputFolder: URL) { return true; } -function compileGeneratedFiles(lib: string[] | string, ...files: string[]) { +function compileGeneratedFiles(lib: string, ...files: string[]) { try { const fileArgs = files .map((file) => fileURLToPath(new URL(file, outputFolder))) @@ -81,8 +77,10 @@ function compileGeneratedFiles(lib: string[] | string, ...files: string[]) { child_process.execSync( `node ${fileURLToPath(tscPath)} --strict --lib ${lib} --types --noEmit ${fileArgs}`, ); - } catch { - console.error(`Test failed: could not compile '${files.join(", ")}'.`); + } catch (e: any) { + console.error(`Test failed: could not compile '${files.join(",")}':`); + console.error(e.stdout.toString()); + console.error(); return false; } return true; @@ -139,7 +137,9 @@ function test() { if ( compareToBaselines(baselineFolder, outputFolder) && - compileSets.every(([lib, files]) => compileGeneratedFiles(lib, ...files)) + compileSets.every(([lib, files]) => + compileGeneratedFiles(lib as string, ...files), + ) ) { console.log("All tests passed."); process.exit(0); From 9e2aba4f41de2699b2243cdf6cb91e4865acc201 Mon Sep 17 00:00:00 2001 From: Bashamega Date: Fri, 18 Apr 2025 08:44:59 +0200 Subject: [PATCH 09/11] - --- src/test.ts | 161 ++++++++++++++++++++++++---------------------------- 1 file changed, 75 insertions(+), 86 deletions(-) diff --git a/src/test.ts b/src/test.ts index eed3f5879..ea3c6ec03 100644 --- a/src/test.ts +++ b/src/test.ts @@ -14,56 +14,72 @@ function normalizeLineEndings(text: string): string { return text.replace(/\r\n?/g, "\n"); } -function getFiles(folder: URL) { +function compareToBaselines(baselineFolder: URL, outputFolder: URL) { + let baselineFiles: string[] = []; try { - return fs.readdirSync(folder); + baselineFiles = fs.readdirSync(baselineFolder); } catch { - return []; + // do nothing } -} -function readFileContent(filePath: URL) { - return normalizeLineEndings(fs.readFileSync(filePath, "utf-8")); -} + let outputFiles: string[] = []; + try { + outputFiles = fs.readdirSync(outputFolder); + } catch { + // do nothing + } -function compareToBaselines(baselineFolder: URL, outputFolder: URL) { - const files = new Set([ - ...getFiles(baselineFolder), - ...getFiles(outputFolder), - ]); + for (const file of new Set([...baselineFiles, ...outputFiles])) { + if (file.startsWith(".")) { + continue; + } - for (const file of files) { - if (file.startsWith(".")) continue; + let baselineStats: fs.Stats | undefined; + try { + baselineStats = fs.statSync(new URL(file, baselineFolder)); + } catch { + // do nothing + } - const baselinePath = new URL(file, baselineFolder); - const outputPath = new URL(file, outputFolder); + let outputStats: fs.Stats | undefined; + try { + outputStats = fs.statSync(new URL(file, outputFolder)); + } catch { + // do nothing + } - const isBaselineFile = - fs.existsSync(baselinePath) && fs.statSync(baselinePath).isFile(); - const isOutputFile = - fs.existsSync(outputPath) && fs.statSync(outputPath).isFile(); + const baseline = baselineStats?.isFile() + ? normalizeLineEndings( + fs.readFileSync(new URL(file, baselineFolder)).toString(), + ) + : null; - const baseline = isBaselineFile ? readFileContent(baselinePath) : null; - const generated = isOutputFile ? readFileContent(outputPath) : null; + const generated = outputStats?.isFile() + ? normalizeLineEndings( + fs.readFileSync(new URL(file, outputFolder)).toString(), + ) + : null; if (baseline !== null || generated !== null) { if (baseline !== generated) { - console.error(`Test failed: '${file}' is different from baseline.`); + console.error( + `Test failed: '${file}' is different from baseline file.`, + ); printUnifiedDiff(baseline ?? "", generated ?? ""); return false; } + continue; } - if (fs.existsSync(baselinePath)) { - if ( - !compareToBaselines( - new URL(`${file}/`, baselineFolder), - new URL(`${file}/`, outputFolder), - ) - ) { + if (baselineStats?.isDirectory() || outputStats?.isDirectory()) { + const childBaselineFolder = new URL(`${file}/`, baselineFolder); + const childOutputFolder = new URL(`${file}/`, outputFolder); + if (!compareToBaselines(childBaselineFolder, childOutputFolder)) { return false; } + + continue; } } return true; @@ -71,11 +87,12 @@ function compareToBaselines(baselineFolder: URL, outputFolder: URL) { function compileGeneratedFiles(lib: string, ...files: string[]) { try { - const fileArgs = files - .map((file) => fileURLToPath(new URL(file, outputFolder))) - .join(" "); child_process.execSync( - `node ${fileURLToPath(tscPath)} --strict --lib ${lib} --types --noEmit ${fileArgs}`, + `node ${fileURLToPath( + tscPath, + )} --strict --lib ${lib} --types --noEmit ${files + .map((file) => fileURLToPath(new URL(file, outputFolder))) + .join(" ")}`, ); } catch (e: any) { console.error(`Test failed: could not compile '${files.join(",")}':`); @@ -87,64 +104,36 @@ function compileGeneratedFiles(lib: string, ...files: string[]) { } function test() { - const compileSets = [ - ["es5", ["dom.generated.d.ts"]], - ["es6", ["dom.generated.d.ts", "dom.iterable.generated.d.ts"]], - ["es2018", ["dom.generated.d.ts", "dom.asynciterable.generated.d.ts"]], - ["es5", ["webworker.generated.d.ts"]], - ["es6", ["webworker.generated.d.ts", "webworker.iterable.generated.d.ts"]], - [ - "es2018", - ["webworker.generated.d.ts", "webworker.asynciterable.generated.d.ts"], - ], - ["es5", ["sharedworker.generated.d.ts"]], - [ - "es6", - ["sharedworker.generated.d.ts", "sharedworker.iterable.generated.d.ts"], - ], - [ - "es2018", - [ - "sharedworker.generated.d.ts", - "sharedworker.asynciterable.generated.d.ts", - ], - ], - ["es5", ["serviceworker.generated.d.ts"]], - [ - "es6", - ["serviceworker.generated.d.ts", "serviceworker.iterable.generated.d.ts"], - ], - [ - "es2018", - [ - "serviceworker.generated.d.ts", - "serviceworker.asynciterable.generated.d.ts", - ], - ], - ["es5", ["audioworklet.generated.d.ts"]], - [ - "es6", - ["audioworklet.generated.d.ts", "audioworklet.iterable.generated.d.ts"], - ], - [ - "es2018", - [ - "audioworklet.generated.d.ts", - "audioworklet.asynciterable.generated.d.ts", - ], - ], + const targets = ["es5", "es6", "es2018"]; + const modules = [ + "dom", + "webworker", + "sharedworker", + "serviceworker", + "audioworklet", ]; + const suffixes: Record = { + es5: ["generated.d.ts"], + es6: ["generated.d.ts", "iterable.generated.d.ts"], + es2018: ["generated.d.ts", "asynciterable.generated.d.ts"], + }; - if ( + const allPassed = compareToBaselines(baselineFolder, outputFolder) && - compileSets.every(([lib, files]) => - compileGeneratedFiles(lib as string, ...files), - ) - ) { + modules.every((mod) => + targets.every((target) => + compileGeneratedFiles( + target, + ...suffixes[target].map((s) => `${mod}.${s}`), + ), + ), + ); + + if (allPassed) { console.log("All tests passed."); process.exit(0); } + process.exit(1); } - test(); From eaddc8b4b5704283520d4f569da01db68cc96960 Mon Sep 17 00:00:00 2001 From: Bashamega Date: Fri, 18 Apr 2025 08:46:11 +0200 Subject: [PATCH 10/11] - --- src/test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test.ts b/src/test.ts index ea3c6ec03..cc0a41882 100644 --- a/src/test.ts +++ b/src/test.ts @@ -136,4 +136,5 @@ function test() { process.exit(1); } + test(); From 1291a7a64d920c03e7290ce905f1f50b44f58f05 Mon Sep 17 00:00:00 2001 From: Adam Basha <110662505+Bashamega@users.noreply.github.com> Date: Fri, 18 Apr 2025 09:23:27 +0200 Subject: [PATCH 11/11] Update src/test.ts Co-authored-by: Kagami Sascha Rosylight --- src/test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test.ts b/src/test.ts index cc0a41882..0b24d7f54 100644 --- a/src/test.ts +++ b/src/test.ts @@ -124,7 +124,7 @@ function test() { targets.every((target) => compileGeneratedFiles( target, - ...suffixes[target].map((s) => `${mod}.${s}`), + ...suffixes[target].map((suffix) => `${mod}.${suffix}`), ), ), );