@@ -3893,6 +3893,96 @@ namespace ts.projectSystem {
3893
3893
assert . equal ( snap2 . getText ( 0 , snap2 . getLength ( ) ) , f1 . content , "content should be equal to the content of original file" ) ;
3894
3894
3895
3895
} ) ;
3896
+
3897
+ it ( "should work when script info doesnt have any project open" , ( ) => {
3898
+ const f1 = {
3899
+ path : "/a/b/app.ts" ,
3900
+ content : "let x = 1"
3901
+ } ;
3902
+ const tmp = {
3903
+ path : "/a/b/app.tmp" ,
3904
+ content : "const y = 42"
3905
+ } ;
3906
+ const host = createServerHost ( [ f1 , tmp , libFile ] ) ;
3907
+ const session = createSession ( host ) ;
3908
+ const openContent = "let z = 1" ;
3909
+ // send open request
3910
+ session . executeCommandSeq ( < server . protocol . OpenRequest > {
3911
+ command : server . protocol . CommandTypes . Open ,
3912
+ arguments : { file : f1 . path , fileContent : openContent }
3913
+ } ) ;
3914
+
3915
+ const projectService = session . getProjectService ( ) ;
3916
+ checkNumberOfProjects ( projectService , { inferredProjects : 1 } ) ;
3917
+ const info = projectService . getScriptInfo ( f1 . path ) ;
3918
+ assert . isDefined ( info ) ;
3919
+ checkScriptInfoContents ( openContent , "contents set during open request" ) ;
3920
+
3921
+ // send close request
3922
+ session . executeCommandSeq ( < server . protocol . CloseRequest > {
3923
+ command : server . protocol . CommandTypes . Close ,
3924
+ arguments : { file : f1 . path }
3925
+ } ) ;
3926
+ checkScriptInfoAndProjects ( 0 , f1 . content , "contents of closed file" ) ;
3927
+
3928
+ // Can reload contents of the file when its not open and has no project
3929
+ // reload from temp file
3930
+ session . executeCommandSeq ( < server . protocol . ReloadRequest > {
3931
+ command : server . protocol . CommandTypes . Reload ,
3932
+ arguments : { file : f1 . path , tmpfile : tmp . path }
3933
+ } ) ;
3934
+ checkScriptInfoAndProjects ( 0 , tmp . content , "contents of temp file" ) ;
3935
+
3936
+ // reload from own file
3937
+ session . executeCommandSeq ( < server . protocol . ReloadRequest > {
3938
+ command : server . protocol . CommandTypes . Reload ,
3939
+ arguments : { file : f1 . path }
3940
+ } ) ;
3941
+ checkScriptInfoAndProjects ( 0 , f1 . content , "contents of closed file" ) ;
3942
+
3943
+ // Open file again without setting its content
3944
+ session . executeCommandSeq ( < server . protocol . OpenRequest > {
3945
+ command : server . protocol . CommandTypes . Open ,
3946
+ arguments : { file : f1 . path }
3947
+ } ) ;
3948
+ checkScriptInfoAndProjects ( 1 , f1 . content , "contents of file when opened without specifying contents" ) ;
3949
+ const snap = info . getSnapshot ( ) ;
3950
+
3951
+ // send close request
3952
+ session . executeCommandSeq ( < server . protocol . CloseRequest > {
3953
+ command : server . protocol . CommandTypes . Close ,
3954
+ arguments : { file : f1 . path }
3955
+ } ) ;
3956
+ checkScriptInfoAndProjects ( 0 , f1 . content , "contents of closed file" ) ;
3957
+ assert . strictEqual ( info . getSnapshot ( ) , snap ) ;
3958
+
3959
+ // reload from temp file
3960
+ session . executeCommandSeq ( < server . protocol . ReloadRequest > {
3961
+ command : server . protocol . CommandTypes . Reload ,
3962
+ arguments : { file : f1 . path , tmpfile : tmp . path }
3963
+ } ) ;
3964
+ checkScriptInfoAndProjects ( 0 , tmp . content , "contents of temp file" ) ;
3965
+ assert . notStrictEqual ( info . getSnapshot ( ) , snap ) ;
3966
+
3967
+ // reload from own file
3968
+ session . executeCommandSeq ( < server . protocol . ReloadRequest > {
3969
+ command : server . protocol . CommandTypes . Reload ,
3970
+ arguments : { file : f1 . path }
3971
+ } ) ;
3972
+ checkScriptInfoAndProjects ( 0 , f1 . content , "contents of closed file" ) ;
3973
+ assert . notStrictEqual ( info . getSnapshot ( ) , snap ) ;
3974
+
3975
+ function checkScriptInfoAndProjects ( inferredProjects : number , contentsOfInfo : string , captionForContents : string ) {
3976
+ checkNumberOfProjects ( projectService , { inferredProjects } ) ;
3977
+ assert . strictEqual ( projectService . getScriptInfo ( f1 . path ) , info ) ;
3978
+ checkScriptInfoContents ( contentsOfInfo , captionForContents ) ;
3979
+ }
3980
+
3981
+ function checkScriptInfoContents ( contentsOfInfo : string , captionForContents : string ) {
3982
+ const snap = info . getSnapshot ( ) ;
3983
+ assert . equal ( snap . getText ( 0 , snap . getLength ( ) ) , contentsOfInfo , "content should be equal to " + captionForContents ) ;
3984
+ }
3985
+ } ) ;
3896
3986
} ) ;
3897
3987
3898
3988
describe ( "Inferred projects" , ( ) => {
0 commit comments