@@ -11,7 +11,7 @@ import { debounceTime, take, tap } from 'rxjs/operators';
1111import { BrowserBuilderOutput } from '../../src/browser/index' ;
1212import { createArchitect , host , ivyEnabled } from '../utils' ;
1313
14-
14+ // tslint:disable-next-line:no-big-function
1515describe ( 'Browser Builder unused files warnings' , ( ) => {
1616 const warningMessageSuffix = `is part of the TypeScript compilation but it's unused` ;
1717 const targetSpec = { project : 'app' , target : 'build' } ;
@@ -162,4 +162,56 @@ describe('Browser Builder unused files warnings', () => {
162162 await run . stop ( ) ;
163163 } ) ;
164164
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+
165217} ) ;
0 commit comments