@@ -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
7288function 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
89106function 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-
150139test ( ) ;
0 commit comments