@@ -2917,6 +2917,52 @@ namespace ts.projectSystem {
2917
2917
function checkSnapLength ( snap : IScriptSnapshot , expectedLength : number ) {
2918
2918
assert . equal ( snap . getLength ( ) , expectedLength , "Incorrect snapshot size" ) ;
2919
2919
}
2920
+
2921
+ function verifyOpenFileWorks ( useCaseSensitiveFileNames : boolean ) {
2922
+ const file1 : FileOrFolder = {
2923
+ path : "/a/b/src/app.ts" ,
2924
+ content : "let x = 10;"
2925
+ } ;
2926
+ const file2 : FileOrFolder = {
2927
+ path : "/a/B/lib/module2.ts" ,
2928
+ content : "let z = 10;"
2929
+ } ;
2930
+ const configFile : FileOrFolder = {
2931
+ path : "/a/b/tsconfig.json" ,
2932
+ content : ""
2933
+ } ;
2934
+ const configFile2 : FileOrFolder = {
2935
+ path : "/a/tsconfig.json" ,
2936
+ content : ""
2937
+ } ;
2938
+ const host = createServerHost ( [ file1 , file2 , configFile , configFile2 ] , {
2939
+ useCaseSensitiveFileNames
2940
+ } ) ;
2941
+ const service = createProjectService ( host ) ;
2942
+
2943
+ // Open file1 -> configFile
2944
+ verifyConfigFileName ( file1 , "/a" , configFile ) ;
2945
+ verifyConfigFileName ( file1 , "/a/b" , configFile ) ;
2946
+ verifyConfigFileName ( file1 , "/a/B" , useCaseSensitiveFileNames ? undefined : configFile ) ;
2947
+
2948
+ // Open file2 use root "/a/b"
2949
+ verifyConfigFileName ( file2 , "/a" , useCaseSensitiveFileNames ? configFile2 : configFile ) ;
2950
+ verifyConfigFileName ( file2 , "/a/b" , useCaseSensitiveFileNames ? undefined : configFile ) ;
2951
+ verifyConfigFileName ( file2 , "/a/B" , useCaseSensitiveFileNames ? undefined : configFile ) ;
2952
+
2953
+ function verifyConfigFileName ( file : FileOrFolder , projectRoot : string , expectedConfigFile : FileOrFolder | undefined ) {
2954
+ const { configFileName } = service . openClientFile ( file . path , /*fileContent*/ undefined , /*scriptKind*/ undefined , projectRoot ) ;
2955
+ assert . equal ( configFileName , expectedConfigFile && expectedConfigFile . path ) ;
2956
+ service . closeClientFile ( file . path ) ;
2957
+ }
2958
+ }
2959
+ it ( "works when project root is used with case-sensitive system" , ( ) => {
2960
+ verifyOpenFileWorks ( /*useCaseSensitiveFileNames*/ true ) ;
2961
+ } ) ;
2962
+
2963
+ it ( "works when project root is used with case-insensitive system" , ( ) => {
2964
+ verifyOpenFileWorks ( /*useCaseSensitiveFileNames*/ false ) ;
2965
+ } ) ;
2920
2966
} ) ;
2921
2967
2922
2968
describe ( "Language service" , ( ) => {
0 commit comments