@@ -2917,6 +2917,52 @@ namespace ts.projectSystem {
29172917 function checkSnapLength ( snap : IScriptSnapshot , expectedLength : number ) {
29182918 assert . equal ( snap . getLength ( ) , expectedLength , "Incorrect snapshot size" ) ;
29192919 }
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+ } ) ;
29202966 } ) ;
29212967
29222968 describe ( "Language service" , ( ) => {
0 commit comments