@@ -23,6 +23,9 @@ const logMock = jest.mocked(console.log);
23
23
const errorMock = jest . mocked ( console . error ) ;
24
24
const warnMock = jest . mocked ( console . warn ) ;
25
25
26
+ // Access logs and strip colors.
27
+ const getOutput = ( mock : jest . Mock , index : number ) => stripAnsi ( mock . mock . calls [ index ] [ 0 ] ) ;
28
+
26
29
describe ( 'Factory Helpers' , ( ) => {
27
30
// Intercept contexts to verify it at the moment they're used.
28
31
const initialContexts : Record < string , GlobalContext > = { } ;
@@ -83,10 +86,10 @@ describe('Factory Helpers', () => {
83
86
} ) ;
84
87
85
88
describe ( 'getLoggerFactory' , ( ) => {
86
- const setupLogger = ( ) : [ Logger , BuildReport ] => {
89
+ const setupLogger = ( name : string ) : [ Logger , BuildReport ] => {
87
90
const mockBuild = { errors : [ ] , warnings : [ ] , logs : [ ] } ;
88
91
const loggerFactory = getLoggerFactory ( mockBuild , 'debug' ) ;
89
- const logger = loggerFactory ( 'testLogger' ) ;
92
+ const logger = loggerFactory ( name ) ;
90
93
91
94
return [ logger , mockBuild ] ;
92
95
} ;
@@ -98,66 +101,102 @@ describe('Factory Helpers', () => {
98
101
logger . debug ( 'A debug message.' ) ;
99
102
} ;
100
103
101
- test ( 'Should return a logger factory.' , ( ) => {
102
- const [ logger ] = setupLogger ( ) ;
103
-
104
+ const assessLogger = ( logger : Logger ) => {
105
+ expect ( logger . getLogger ) . toEqual ( expect . any ( Function ) ) ;
104
106
expect ( logger . error ) . toEqual ( expect . any ( Function ) ) ;
105
107
expect ( logger . warn ) . toEqual ( expect . any ( Function ) ) ;
106
108
expect ( logger . info ) . toEqual ( expect . any ( Function ) ) ;
107
109
expect ( logger . debug ) . toEqual ( expect . any ( Function ) ) ;
108
- } ) ;
109
-
110
- test ( 'Should log as expected' , ( ) => {
111
- const [ logger ] = setupLogger ( ) ;
112
- useLogger ( logger ) ;
113
-
114
- // Access logs and strip colors.
115
- const getOutput = ( mock : jest . Mock , index : number ) =>
116
- stripAnsi ( mock . mock . calls [ index ] [ 0 ] ) ;
110
+ } ;
117
111
112
+ const assessLogs = ( name : string ) => {
118
113
expect ( logMock ) . toHaveBeenCalledTimes ( 2 ) ;
119
- expect ( getOutput ( logMock , 0 ) ) . toBe ( ' [info|testLogger ] An info message.' ) ;
120
- expect ( getOutput ( logMock , 1 ) ) . toBe ( ' [debug|testLogger ] A debug message.' ) ;
114
+ expect ( getOutput ( logMock , 0 ) ) . toBe ( ` [info|${ name } ] An info message.` ) ;
115
+ expect ( getOutput ( logMock , 1 ) ) . toBe ( ` [debug|${ name } ] A debug message.` ) ;
121
116
122
117
expect ( errorMock ) . toHaveBeenCalledTimes ( 1 ) ;
123
- expect ( getOutput ( errorMock , 0 ) ) . toBe ( ' [error|testLogger ] An error occurred.' ) ;
118
+ expect ( getOutput ( errorMock , 0 ) ) . toBe ( ` [error|${ name } ] An error occurred.` ) ;
124
119
125
120
expect ( warnMock ) . toHaveBeenCalledTimes ( 1 ) ;
126
- expect ( getOutput ( warnMock , 0 ) ) . toBe ( '[warn|testLogger] A warning message.' ) ;
127
- } ) ;
128
-
129
- test ( 'Should store logs as expected.' , ( ) => {
130
- const [ logger , buildReport ] = setupLogger ( ) ;
131
- useLogger ( logger ) ;
121
+ expect ( getOutput ( warnMock , 0 ) ) . toBe ( `[warn|${ name } ] A warning message.` ) ;
122
+ } ;
132
123
124
+ const assessReport = ( name : string , buildReport : BuildReport ) => {
133
125
expect ( buildReport . logs ) . toHaveLength ( 4 ) ;
134
126
expect ( buildReport . logs [ 0 ] ) . toEqual ( {
135
- pluginName : 'testLogger' ,
127
+ pluginName : name ,
136
128
type : 'error' ,
137
129
message : 'An error occurred.' ,
138
130
time : expect . any ( Number ) ,
139
131
} ) ;
140
132
expect ( buildReport . logs [ 1 ] ) . toEqual ( {
141
- pluginName : 'testLogger' ,
133
+ pluginName : name ,
142
134
type : 'warn' ,
143
135
message : 'A warning message.' ,
144
136
time : expect . any ( Number ) ,
145
137
} ) ;
146
138
expect ( buildReport . logs [ 2 ] ) . toEqual ( {
147
- pluginName : 'testLogger' ,
139
+ pluginName : name ,
148
140
type : 'info' ,
149
141
message : 'An info message.' ,
150
142
time : expect . any ( Number ) ,
151
143
} ) ;
152
144
expect ( buildReport . logs [ 3 ] ) . toEqual ( {
153
- pluginName : 'testLogger' ,
145
+ pluginName : name ,
154
146
type : 'debug' ,
155
147
message : 'A debug message.' ,
156
148
time : expect . any ( Number ) ,
157
149
} ) ;
158
150
159
151
expect ( buildReport . errors ) . toEqual ( [ 'An error occurred.' ] ) ;
160
152
expect ( buildReport . warnings ) . toEqual ( [ 'A warning message.' ] ) ;
153
+ } ;
154
+
155
+ describe ( 'Logger' , ( ) => {
156
+ test ( 'Should return a logger factory.' , ( ) => {
157
+ const [ logger ] = setupLogger ( 'testLogger' ) ;
158
+
159
+ assessLogger ( logger ) ;
160
+ } ) ;
161
+
162
+ test ( 'Should log as expected' , ( ) => {
163
+ const [ logger ] = setupLogger ( 'testLogger' ) ;
164
+ useLogger ( logger ) ;
165
+
166
+ assessLogs ( 'testLogger' ) ;
167
+ } ) ;
168
+
169
+ test ( 'Should store logs as expected.' , ( ) => {
170
+ const [ logger , buildReport ] = setupLogger ( 'testLogger' ) ;
171
+ useLogger ( logger ) ;
172
+
173
+ assessReport ( 'testLogger' , buildReport ) ;
174
+ } ) ;
175
+ } ) ;
176
+
177
+ describe ( 'Sub logger' , ( ) => {
178
+ test ( 'Should return a logger factory.' , ( ) => {
179
+ const [ logger ] = setupLogger ( 'testLogger' ) ;
180
+ const subLogger = logger . getLogger ( 'subLogger' ) ;
181
+
182
+ assessLogger ( subLogger ) ;
183
+ } ) ;
184
+
185
+ test ( 'Should log as expected' , ( ) => {
186
+ const [ logger ] = setupLogger ( 'testLogger' ) ;
187
+ const subLogger = logger . getLogger ( 'subLogger' ) ;
188
+ useLogger ( subLogger ) ;
189
+
190
+ assessLogs ( 'testLogger:subLogger' ) ;
191
+ } ) ;
192
+
193
+ test ( 'Should store logs as expected.' , ( ) => {
194
+ const [ logger , buildReport ] = setupLogger ( 'testLogger' ) ;
195
+ const subLogger = logger . getLogger ( 'subLogger' ) ;
196
+ useLogger ( subLogger ) ;
197
+
198
+ assessReport ( 'testLogger:subLogger' , buildReport ) ;
199
+ } ) ;
161
200
} ) ;
162
201
} ) ;
163
202
} ) ;
0 commit comments