Skip to content

Commit 9e2aba4

Browse files
committed
-
1 parent 4399d1e commit 9e2aba4

1 file changed

Lines changed: 75 additions & 86 deletions

File tree

src/test.ts

Lines changed: 75 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -14,68 +14,85 @@ function normalizeLineEndings(text: string): string {
1414
return text.replace(/\r\n?/g, "\n");
1515
}
1616

17-
function getFiles(folder: URL) {
17+
function compareToBaselines(baselineFolder: URL, outputFolder: URL) {
18+
let baselineFiles: string[] = [];
1819
try {
19-
return fs.readdirSync(folder);
20+
baselineFiles = fs.readdirSync(baselineFolder);
2021
} catch {
21-
return [];
22+
// do nothing
2223
}
23-
}
2424

25-
function readFileContent(filePath: URL) {
26-
return normalizeLineEndings(fs.readFileSync(filePath, "utf-8"));
27-
}
25+
let outputFiles: string[] = [];
26+
try {
27+
outputFiles = fs.readdirSync(outputFolder);
28+
} catch {
29+
// do nothing
30+
}
2831

29-
function compareToBaselines(baselineFolder: URL, outputFolder: URL) {
30-
const files = new Set([
31-
...getFiles(baselineFolder),
32-
...getFiles(outputFolder),
33-
]);
32+
for (const file of new Set([...baselineFiles, ...outputFiles])) {
33+
if (file.startsWith(".")) {
34+
continue;
35+
}
3436

35-
for (const file of files) {
36-
if (file.startsWith(".")) continue;
37+
let baselineStats: fs.Stats | undefined;
38+
try {
39+
baselineStats = fs.statSync(new URL(file, baselineFolder));
40+
} catch {
41+
// do nothing
42+
}
3743

38-
const baselinePath = new URL(file, baselineFolder);
39-
const outputPath = new URL(file, outputFolder);
44+
let outputStats: fs.Stats | undefined;
45+
try {
46+
outputStats = fs.statSync(new URL(file, outputFolder));
47+
} catch {
48+
// do nothing
49+
}
4050

41-
const isBaselineFile =
42-
fs.existsSync(baselinePath) && fs.statSync(baselinePath).isFile();
43-
const isOutputFile =
44-
fs.existsSync(outputPath) && fs.statSync(outputPath).isFile();
51+
const baseline = baselineStats?.isFile()
52+
? normalizeLineEndings(
53+
fs.readFileSync(new URL(file, baselineFolder)).toString(),
54+
)
55+
: null;
4556

46-
const baseline = isBaselineFile ? readFileContent(baselinePath) : null;
47-
const generated = isOutputFile ? readFileContent(outputPath) : null;
57+
const generated = outputStats?.isFile()
58+
? normalizeLineEndings(
59+
fs.readFileSync(new URL(file, outputFolder)).toString(),
60+
)
61+
: null;
4862

4963
if (baseline !== null || generated !== null) {
5064
if (baseline !== generated) {
51-
console.error(`Test failed: '${file}' is different from baseline.`);
65+
console.error(
66+
`Test failed: '${file}' is different from baseline file.`,
67+
);
5268
printUnifiedDiff(baseline ?? "", generated ?? "");
5369
return false;
5470
}
71+
5572
continue;
5673
}
5774

58-
if (fs.existsSync(baselinePath)) {
59-
if (
60-
!compareToBaselines(
61-
new URL(`${file}/`, baselineFolder),
62-
new URL(`${file}/`, outputFolder),
63-
)
64-
) {
75+
if (baselineStats?.isDirectory() || outputStats?.isDirectory()) {
76+
const childBaselineFolder = new URL(`${file}/`, baselineFolder);
77+
const childOutputFolder = new URL(`${file}/`, outputFolder);
78+
if (!compareToBaselines(childBaselineFolder, childOutputFolder)) {
6579
return false;
6680
}
81+
82+
continue;
6783
}
6884
}
6985
return true;
7086
}
7187

7288
function compileGeneratedFiles(lib: string, ...files: string[]) {
7389
try {
74-
const fileArgs = files
75-
.map((file) => fileURLToPath(new URL(file, outputFolder)))
76-
.join(" ");
7790
child_process.execSync(
78-
`node ${fileURLToPath(tscPath)} --strict --lib ${lib} --types --noEmit ${fileArgs}`,
91+
`node ${fileURLToPath(
92+
tscPath,
93+
)} --strict --lib ${lib} --types --noEmit ${files
94+
.map((file) => fileURLToPath(new URL(file, outputFolder)))
95+
.join(" ")}`,
7996
);
8097
} catch (e: any) {
8198
console.error(`Test failed: could not compile '${files.join(",")}':`);
@@ -87,64 +104,36 @@ function compileGeneratedFiles(lib: string, ...files: string[]) {
87104
}
88105

89106
function test() {
90-
const compileSets = [
91-
["es5", ["dom.generated.d.ts"]],
92-
["es6", ["dom.generated.d.ts", "dom.iterable.generated.d.ts"]],
93-
["es2018", ["dom.generated.d.ts", "dom.asynciterable.generated.d.ts"]],
94-
["es5", ["webworker.generated.d.ts"]],
95-
["es6", ["webworker.generated.d.ts", "webworker.iterable.generated.d.ts"]],
96-
[
97-
"es2018",
98-
["webworker.generated.d.ts", "webworker.asynciterable.generated.d.ts"],
99-
],
100-
["es5", ["sharedworker.generated.d.ts"]],
101-
[
102-
"es6",
103-
["sharedworker.generated.d.ts", "sharedworker.iterable.generated.d.ts"],
104-
],
105-
[
106-
"es2018",
107-
[
108-
"sharedworker.generated.d.ts",
109-
"sharedworker.asynciterable.generated.d.ts",
110-
],
111-
],
112-
["es5", ["serviceworker.generated.d.ts"]],
113-
[
114-
"es6",
115-
["serviceworker.generated.d.ts", "serviceworker.iterable.generated.d.ts"],
116-
],
117-
[
118-
"es2018",
119-
[
120-
"serviceworker.generated.d.ts",
121-
"serviceworker.asynciterable.generated.d.ts",
122-
],
123-
],
124-
["es5", ["audioworklet.generated.d.ts"]],
125-
[
126-
"es6",
127-
["audioworklet.generated.d.ts", "audioworklet.iterable.generated.d.ts"],
128-
],
129-
[
130-
"es2018",
131-
[
132-
"audioworklet.generated.d.ts",
133-
"audioworklet.asynciterable.generated.d.ts",
134-
],
135-
],
107+
const targets = ["es5", "es6", "es2018"];
108+
const modules = [
109+
"dom",
110+
"webworker",
111+
"sharedworker",
112+
"serviceworker",
113+
"audioworklet",
136114
];
115+
const suffixes: Record<string, string[]> = {
116+
es5: ["generated.d.ts"],
117+
es6: ["generated.d.ts", "iterable.generated.d.ts"],
118+
es2018: ["generated.d.ts", "asynciterable.generated.d.ts"],
119+
};
137120

138-
if (
121+
const allPassed =
139122
compareToBaselines(baselineFolder, outputFolder) &&
140-
compileSets.every(([lib, files]) =>
141-
compileGeneratedFiles(lib as string, ...files),
142-
)
143-
) {
123+
modules.every((mod) =>
124+
targets.every((target) =>
125+
compileGeneratedFiles(
126+
target,
127+
...suffixes[target].map((s) => `${mod}.${s}`),
128+
),
129+
),
130+
);
131+
132+
if (allPassed) {
144133
console.log("All tests passed.");
145134
process.exit(0);
146135
}
136+
147137
process.exit(1);
148138
}
149-
150139
test();

0 commit comments

Comments
 (0)