@@ -857,19 +857,100 @@ namespace ts {
857857
858858 projectService . closeExternalProject ( externalProjectName ) ;
859859 checkNumberOfExternalProjects ( projectService , 0 ) ;
860- // open file 'file1' from configured project is moved to its own inferred project + inferred project for file3
861- checkNumberOfInferredProjects ( projectService , 2 ) ;
860+ // open file 'file1' from configured project keeps project alive
861+ checkNumberOfConfiguredProjects ( projectService , 1 ) ;
862+ checkNumberOfInferredProjects ( projectService , 1 ) ;
862863
863864 projectService . closeClientFile ( file3 . path ) ;
864865 checkNumberOfExternalProjects ( projectService , 0 ) ;
866+ checkNumberOfConfiguredProjects ( projectService , 1 ) ;
867+ checkNumberOfInferredProjects ( projectService , 0 ) ;
868+
869+ projectService . closeClientFile ( file1 . path ) ;
870+ checkNumberOfExternalProjects ( projectService , 0 ) ;
865871 checkNumberOfConfiguredProjects ( projectService , 0 ) ;
866- checkNumberOfInferredProjects ( projectService , 1 ) ;
872+ checkNumberOfInferredProjects ( projectService , 0 ) ;
873+ } ) ;
874+
875+ it ( "external project with included config file opened after configured project" , ( ) => {
876+ const file1 = {
877+ path : "/a/b/f1.ts" ,
878+ content : "let x = 1"
879+ } ;
880+ const configFile = {
881+ path : "/a/b/tsconfig.json" ,
882+ content : JSON . stringify ( { compilerOptions : { } } )
883+ } ;
884+ const externalProjectName = "externalproject" ;
885+ const host = createServerHost ( { fileOrFolderList : [ file1 , configFile ] , libFile } ) ;
886+ const projectService = new server . ProjectService ( host , nullLogger , nullCancellationToken , /*useOneInferredProject*/ false ) ;
887+
888+ projectService . openClientFile ( file1 . path ) ;
889+ checkNumberOfExternalProjects ( projectService , 0 ) ;
890+ checkNumberOfConfiguredProjects ( projectService , 1 ) ;
891+ checkNumberOfInferredProjects ( projectService , 0 ) ;
892+
893+ projectService . openExternalProject ( {
894+ rootFiles : [ configFile . path ] ,
895+ options : { } ,
896+ projectFileName : externalProjectName
897+ } ) ;
898+
899+ checkNumberOfExternalProjects ( projectService , 0 ) ;
900+ checkNumberOfConfiguredProjects ( projectService , 1 ) ;
901+ checkNumberOfInferredProjects ( projectService , 0 ) ;
867902
868903 projectService . closeClientFile ( file1 . path ) ;
869904 checkNumberOfExternalProjects ( projectService , 0 ) ;
905+ // configured project is alive since it is opened as part of external project
906+ checkNumberOfConfiguredProjects ( projectService , 1 ) ;
907+ checkNumberOfInferredProjects ( projectService , 0 ) ;
908+
909+ projectService . closeExternalProject ( externalProjectName ) ;
910+ checkNumberOfExternalProjects ( projectService , 0 ) ;
911+ // configured project is alive since it is opened as part of external project
870912 checkNumberOfConfiguredProjects ( projectService , 0 ) ;
871913 checkNumberOfInferredProjects ( projectService , 0 ) ;
872914 } ) ;
915+ it ( "external project with included config file opened after configured project and then closed" , ( ) => {
916+ const file1 = {
917+ path : "/a/b/f1.ts" ,
918+ content : "let x = 1"
919+ } ;
920+ const configFile = {
921+ path : "/a/b/tsconfig.json" ,
922+ content : JSON . stringify ( { compilerOptions : { } } )
923+ } ;
924+ const externalProjectName = "externalproject" ;
925+ const host = createServerHost ( { fileOrFolderList : [ file1 , configFile ] , libFile } ) ;
926+ const projectService = new server . ProjectService ( host , nullLogger , nullCancellationToken , /*useOneInferredProject*/ false ) ;
873927
928+ projectService . openClientFile ( file1 . path ) ;
929+ checkNumberOfExternalProjects ( projectService , 0 ) ;
930+ checkNumberOfConfiguredProjects ( projectService , 1 ) ;
931+ checkNumberOfInferredProjects ( projectService , 0 ) ;
932+
933+ projectService . openExternalProject ( {
934+ rootFiles : [ configFile . path ] ,
935+ options : { } ,
936+ projectFileName : externalProjectName
937+ } ) ;
938+
939+ checkNumberOfExternalProjects ( projectService , 0 ) ;
940+ checkNumberOfConfiguredProjects ( projectService , 1 ) ;
941+ checkNumberOfInferredProjects ( projectService , 0 ) ;
942+
943+ projectService . closeExternalProject ( externalProjectName ) ;
944+ checkNumberOfExternalProjects ( projectService , 0 ) ;
945+ // configured project is alive since file is still open
946+ checkNumberOfConfiguredProjects ( projectService , 1 ) ;
947+ checkNumberOfInferredProjects ( projectService , 0 ) ;
948+
949+ projectService . closeClientFile ( file1 . path ) ;
950+ checkNumberOfExternalProjects ( projectService , 0 ) ;
951+ // configured project is alive since it is opened as part of external project
952+ checkNumberOfConfiguredProjects ( projectService , 0 ) ;
953+ checkNumberOfInferredProjects ( projectService , 0 ) ;
954+ } ) ;
874955 } ) ;
875956}
0 commit comments