1
1
// Import Node.js Dependencies
2
2
import { describe , it } from "node:test" ;
3
3
import assert from "node:assert" ;
4
+ import { fileURLToPath } from "node:url" ;
4
5
5
6
// Import Internal Dependencies
6
- import { EntryFilesAnalyser } from "../src/EntryFilesAnalyser.js" ;
7
- import { AstAnalyser } from "../src/AstAnalyser.js" ;
7
+ import { EntryFilesAnalyser , AstAnalyser } from "../index.js" ;
8
8
9
9
const FIXTURE_URL = new URL ( "fixtures/entryFiles/" , import . meta. url ) ;
10
10
@@ -15,19 +15,24 @@ describe("EntryFilesAnalyser", () => {
15
15
const deepEntryUrl = new URL ( "deps/deepEntry.js" , FIXTURE_URL ) ;
16
16
17
17
t . mock . method ( AstAnalyser . prototype , "analyseFile" ) ;
18
- const generator = entryFilesAnalyser . analyse ( [ entryUrl , deepEntryUrl ] ) ;
19
18
20
- // First entry
21
- await assertReport ( generator , entryUrl ) ;
22
- await assertReport ( generator , new URL ( "deps/dep1.js" , FIXTURE_URL ) ) ;
23
- await assertReport ( generator , new URL ( "shared.js" , FIXTURE_URL ) ) ;
24
- await assertReport ( generator , new URL ( "deps/dep2.js" , FIXTURE_URL ) ) ;
25
-
26
- // Second entry
27
- await assertReport ( generator , deepEntryUrl ) ;
28
- await assertReport ( generator , new URL ( "deps/dep3.js" , FIXTURE_URL ) ) ;
29
-
30
- await assertAllReportsYielded ( generator ) ;
19
+ const generator = entryFilesAnalyser . analyse ( [
20
+ entryUrl ,
21
+ deepEntryUrl
22
+ ] ) ;
23
+ const reports = await fromAsync ( generator ) ;
24
+
25
+ assert . deepEqual (
26
+ reports . map ( ( report ) => report . url ) ,
27
+ [
28
+ entryUrl ,
29
+ new URL ( "deps/dep1.js" , FIXTURE_URL ) ,
30
+ new URL ( "shared.js" , FIXTURE_URL ) ,
31
+ new URL ( "deps/dep2.js" , FIXTURE_URL ) ,
32
+ deepEntryUrl ,
33
+ new URL ( "deps/dep3.js" , FIXTURE_URL )
34
+ ] . map ( ( url ) => fileURLToPath ( url ) )
35
+ ) ;
31
36
32
37
// Check that shared dependencies are not analyzed several times
33
38
const calls = AstAnalyser . prototype . analyseFile . mock . calls ;
@@ -39,62 +44,79 @@ describe("EntryFilesAnalyser", () => {
39
44
const entryUrl = new URL ( "entryWithInvalidDep.js" , FIXTURE_URL ) ;
40
45
41
46
const generator = entryFilesAnalyser . analyse ( [ entryUrl ] ) ;
42
-
43
- await assertReport ( generator , entryUrl ) ;
44
-
45
- const invalidDepReport = await generator . next ( ) ;
46
- assert . ok ( ! invalidDepReport . value . ok ) ;
47
- assert . strictEqual ( invalidDepReport . value . url , new URL ( "deps/invalidDep.js" , FIXTURE_URL ) . pathname ) ;
48
- assert . strictEqual ( invalidDepReport . value . warnings [ 0 ] . kind , "parsing-error" ) ;
49
-
50
- await assertReport ( generator , new URL ( "deps/dep1.js" , FIXTURE_URL ) ) ;
51
- await assertReport ( generator , new URL ( "shared.js" , FIXTURE_URL ) ) ;
52
-
53
- await assertAllReportsYielded ( generator ) ;
47
+ const reports = await fromAsync ( generator ) ;
48
+
49
+ assert . deepEqual (
50
+ reports . map ( ( report ) => report . url ) ,
51
+ [
52
+ entryUrl ,
53
+ new URL ( "deps/invalidDep.js" , FIXTURE_URL ) ,
54
+ new URL ( "deps/dep1.js" , FIXTURE_URL ) ,
55
+ new URL ( "shared.js" , FIXTURE_URL )
56
+ ] . map ( ( url ) => fileURLToPath ( url ) )
57
+ ) ;
58
+
59
+ const invalidReports = reports . filter ( ( report ) => ! report . ok ) ;
60
+ assert . strictEqual ( invalidReports . length , 1 ) ;
61
+ assert . strictEqual (
62
+ invalidReports [ 0 ] . warnings [ 0 ] . kind ,
63
+ "parsing-error"
64
+ ) ;
54
65
} ) ;
55
66
56
67
it ( "should extends default extensions" , async ( ) => {
57
68
const entryFilesAnalyser = new EntryFilesAnalyser ( {
58
69
loadExtensions : ( exts ) => [ ...exts , "jsx" ]
59
70
} ) ;
60
71
const entryUrl = new URL ( "entryWithVariousDepExtensions.js" , FIXTURE_URL ) ;
61
- const generator = entryFilesAnalyser . analyse ( [ entryUrl ] ) ;
62
72
63
- await assertReport ( generator , entryUrl ) ;
64
- await assertReport ( generator , new URL ( "deps/default.js" , FIXTURE_URL ) ) ;
65
- await assertReport ( generator , new URL ( "deps/default.cjs" , FIXTURE_URL ) ) ;
66
- await assertReport ( generator , new URL ( "deps/dep.cjs" , FIXTURE_URL ) ) ;
67
- await assertReport ( generator , new URL ( "deps/default.mjs" , FIXTURE_URL ) ) ;
68
- await assertReport ( generator , new URL ( "deps/dep.mjs" , FIXTURE_URL ) ) ;
69
- await assertReport ( generator , new URL ( "deps/default.node" , FIXTURE_URL ) ) ;
70
- await assertReport ( generator , new URL ( "deps/dep.node" , FIXTURE_URL ) ) ;
71
- await assertReport ( generator , new URL ( "deps/default.jsx" , FIXTURE_URL ) ) ;
72
- await assertReport ( generator , new URL ( "deps/dep.jsx" , FIXTURE_URL ) ) ;
73
-
74
- await assertAllReportsYielded ( generator ) ;
73
+ const generator = entryFilesAnalyser . analyse ( [ entryUrl ] ) ;
74
+ const reports = await fromAsync ( generator ) ;
75
+
76
+ assert . deepEqual (
77
+ reports . map ( ( report ) => report . url ) ,
78
+ [
79
+ entryUrl ,
80
+ new URL ( "deps/default.js" , FIXTURE_URL ) ,
81
+ new URL ( "deps/default.cjs" , FIXTURE_URL ) ,
82
+ new URL ( "deps/dep.cjs" , FIXTURE_URL ) ,
83
+ new URL ( "deps/default.mjs" , FIXTURE_URL ) ,
84
+ new URL ( "deps/dep.mjs" , FIXTURE_URL ) ,
85
+ new URL ( "deps/default.node" , FIXTURE_URL ) ,
86
+ new URL ( "deps/dep.node" , FIXTURE_URL ) ,
87
+ new URL ( "deps/default.jsx" , FIXTURE_URL ) ,
88
+ new URL ( "deps/dep.jsx" , FIXTURE_URL )
89
+ ] . map ( ( url ) => fileURLToPath ( url ) )
90
+ ) ;
75
91
} ) ;
76
92
77
93
it ( "should override default extensions" , async ( ) => {
78
94
const entryFilesAnalyser = new EntryFilesAnalyser ( {
79
95
loadExtensions : ( ) => [ "jsx" ]
80
96
} ) ;
81
97
const entryUrl = new URL ( "entryWithVariousDepExtensions.js" , FIXTURE_URL ) ;
82
- const generator = entryFilesAnalyser . analyse ( [ entryUrl ] ) ;
83
-
84
- await assertReport ( generator , entryUrl ) ;
85
- await assertReport ( generator , new URL ( "deps/default.jsx" , FIXTURE_URL ) ) ;
86
- await assertReport ( generator , new URL ( "deps/dep.jsx" , FIXTURE_URL ) ) ;
87
98
88
- await assertAllReportsYielded ( generator ) ;
99
+ const generator = entryFilesAnalyser . analyse ( [ entryUrl ] ) ;
100
+ const reports = await fromAsync ( generator ) ;
101
+
102
+ assert . deepEqual (
103
+ reports . map ( ( report ) => report . url ) ,
104
+ [
105
+ entryUrl ,
106
+ new URL ( "deps/default.jsx" , FIXTURE_URL ) ,
107
+ new URL ( "deps/dep.jsx" , FIXTURE_URL )
108
+ ] . map ( ( url ) => fileURLToPath ( url ) )
109
+ ) ;
89
110
} ) ;
111
+ } ) ;
90
112
91
- async function assertReport ( generator , expectedUrl ) {
92
- const report = await generator . next ( ) ;
93
- assert . strictEqual ( report . value . url , expectedUrl . pathname ) ;
94
- assert . ok ( report . value . ok ) ;
95
- }
113
+ // TODO: replace with Array.fromAsync when droping Node.js 20
114
+ async function fromAsync ( asyncIter ) {
115
+ const items = [ ] ;
96
116
97
- async function assertAllReportsYielded ( generator ) {
98
- assert . strictEqual ( ( await generator . next ( ) ) . value , undefined ) ;
117
+ for await ( const item of asyncIter ) {
118
+ items . push ( item ) ;
99
119
}
100
- } ) ;
120
+
121
+ return items ;
122
+ }
0 commit comments