@@ -11,7 +11,7 @@ import { debounceTime, take, tap } from 'rxjs/operators';
11
11
import { BrowserBuilderOutput } from '../../src/browser/index' ;
12
12
import { createArchitect , host , ivyEnabled } from '../utils' ;
13
13
14
-
14
+ // tslint:disable-next-line:no-big-function
15
15
describe ( 'Browser Builder unused files warnings' , ( ) => {
16
16
const warningMessageSuffix = `is part of the TypeScript compilation but it's unused` ;
17
17
const targetSpec = { project : 'app' , target : 'build' } ;
@@ -162,4 +162,56 @@ describe('Browser Builder unused files warnings', () => {
162
162
await run . stop ( ) ;
163
163
} ) ;
164
164
165
+ it ( 'should only show warning once per file' , async ( ) => {
166
+ if ( ! ivyEnabled ) {
167
+ // TODO: https://github.com/angular/angular-cli/issues/15056
168
+ pending ( 'Only supported in Ivy.' ) ;
169
+
170
+ return ;
171
+ }
172
+
173
+ host . replaceInFile (
174
+ 'src/tsconfig.app.json' ,
175
+ '"**/*.d.ts"' ,
176
+ '"**/*.d.ts", "testing/**/*.ts"' ,
177
+ ) ;
178
+
179
+ // Write a used file
180
+ host . writeMultipleFiles ( {
181
+ 'src/testing/type.ts' : 'export type MyType = number;' ,
182
+ } ) ;
183
+
184
+ const logger = new TestLogger ( 'unused-files-warnings' ) ;
185
+ let buildNumber = 0 ;
186
+ const run = await architect . scheduleTarget ( targetSpec , { watch : true } , { logger } ) ;
187
+
188
+ await run . output
189
+ . pipe (
190
+ debounceTime ( 1000 ) ,
191
+ tap ( buildEvent => {
192
+ expect ( buildEvent . success ) . toBe ( true ) ;
193
+
194
+ buildNumber ++ ;
195
+ switch ( buildNumber ) {
196
+ case 1 :
197
+ // The first should have type.ts as unused.
198
+ expect ( logger . includes ( `type.ts ${ warningMessageSuffix } ` ) ) . toBe ( true , `Case ${ buildNumber } failed.` ) ;
199
+
200
+ // touch a file to trigger a rebuild
201
+ host . appendToFile ( 'src/main.ts' , '' ) ;
202
+ break ;
203
+ case 2 :
204
+ // The second should should have type.ts as unused but shouldn't warn.
205
+ expect ( logger . includes ( warningMessageSuffix ) ) . toBe ( false , `Case ${ buildNumber } failed.` ) ;
206
+ break ;
207
+ }
208
+
209
+ logger . clear ( ) ;
210
+ } ) ,
211
+ take ( 2 ) ,
212
+ )
213
+ . toPromise ( ) ;
214
+ await run . stop ( ) ;
215
+ } ) ;
216
+
165
217
} ) ;
0 commit comments