@@ -345,5 +345,68 @@ namespace ts.projectSystem {
345
345
it ( "inferred projects per project root with case insensitive system" , ( ) => {
346
346
verifyProjectRootWithCaseSensitivity ( /*useCaseSensitiveFileNames*/ false ) ;
347
347
} ) ;
348
+
349
+ it ( "should still retain configured project created while opening the file" , ( ) => {
350
+ const projectRoot = "/user/username/projects/project" ;
351
+ const appFile : File = {
352
+ path : `${ projectRoot } /app.ts` ,
353
+ content : `const app = 20;`
354
+ } ;
355
+ const config : File = {
356
+ path : `${ projectRoot } /tsconfig.json` ,
357
+ content : "{}"
358
+ } ;
359
+ const jsFile1 : File = {
360
+ path : `${ projectRoot } /jsFile1.js` ,
361
+ content : `const jsFile1 = 10;`
362
+ } ;
363
+ const jsFile2 : File = {
364
+ path : `${ projectRoot } /jsFile2.js` ,
365
+ content : `const jsFile2 = 10;`
366
+ } ;
367
+ const host = createServerHost ( [ appFile , libFile , config , jsFile1 , jsFile2 ] ) ;
368
+ const projectService = createProjectService ( host ) ;
369
+ const originalSet = projectService . configuredProjects . set ;
370
+ const originalDelete = projectService . configuredProjects . delete ;
371
+ const configuredCreated = createMap < true > ( ) ;
372
+ const configuredRemoved = createMap < true > ( ) ;
373
+ projectService . configuredProjects . set = ( key , value ) => {
374
+ assert . isFalse ( configuredCreated . has ( key ) ) ;
375
+ configuredCreated . set ( key , true ) ;
376
+ return originalSet . call ( projectService . configuredProjects , key , value ) ;
377
+ } ;
378
+ projectService . configuredProjects . delete = key => {
379
+ assert . isFalse ( configuredRemoved . has ( key ) ) ;
380
+ configuredRemoved . set ( key , true ) ;
381
+ return originalDelete . call ( projectService . configuredProjects , key ) ;
382
+ } ;
383
+
384
+ projectService . openClientFile ( jsFile1 . path ) ;
385
+ checkNumberOfProjects ( projectService , { inferredProjects : 1 } ) ;
386
+ checkProjectActualFiles ( projectService . inferredProjects [ 0 ] , [ jsFile1 . path , libFile . path ] ) ;
387
+ checkConfiguredProjectCreatedAndDeleted ( ) ;
388
+
389
+ projectService . closeClientFile ( jsFile1 . path ) ;
390
+ checkNumberOfProjects ( projectService , { inferredProjects : 1 } ) ;
391
+ projectService . openClientFile ( jsFile2 . path ) ;
392
+ checkNumberOfProjects ( projectService , { inferredProjects : 1 } ) ;
393
+ checkProjectActualFiles ( projectService . inferredProjects [ 0 ] , [ jsFile2 . path , libFile . path ] ) ;
394
+ checkConfiguredProjectCreatedAndDeleted ( ) ;
395
+
396
+ projectService . openClientFile ( jsFile1 . path ) ;
397
+ checkNumberOfProjects ( projectService , { inferredProjects : 2 } ) ;
398
+ checkProjectActualFiles ( projectService . inferredProjects [ 0 ] , [ jsFile2 . path , libFile . path ] ) ;
399
+ checkProjectActualFiles ( projectService . inferredProjects [ 1 ] , [ jsFile1 . path , libFile . path ] ) ;
400
+ checkConfiguredProjectCreatedAndDeleted ( ) ;
401
+
402
+ function checkConfiguredProjectCreatedAndDeleted ( ) {
403
+ assert . equal ( configuredCreated . size , 1 ) ;
404
+ assert . isTrue ( configuredCreated . has ( config . path ) ) ;
405
+ assert . equal ( configuredRemoved . size , 1 ) ;
406
+ assert . isTrue ( configuredRemoved . has ( config . path ) ) ;
407
+ configuredCreated . clear ( ) ;
408
+ configuredRemoved . clear ( ) ;
409
+ }
410
+ } ) ;
348
411
} ) ;
349
412
}
0 commit comments