@@ -661,8 +661,9 @@ namespace Harness.LanguageService {
661661 } 
662662
663663 editScript ( fileName : string ,  start : number ,  end : number ,  newText : string )  { 
664+  const  changeArgs  =  this . client . createChangeFileRequestArgs ( fileName ,  start ,  end ,  newText ) ; 
664665 super . editScript ( fileName ,  start ,  end ,  newText ) ; 
665-  this . client . changeFile ( fileName ,  start ,   end ,   newText ) ; 
666+  this . client . changeFile ( fileName ,  changeArgs ) ; 
666667 } 
667668 } 
668669
@@ -719,8 +720,8 @@ namespace Harness.LanguageService {
719720 return  this . host . getCurrentDirectory ( ) ; 
720721 } 
721722
722-  getDirectories ( ) : string [ ]  { 
723-  return  [ ] ; 
723+  getDirectories ( path :  string ) : string [ ]  { 
724+  return  this . host . getDirectories ( path ) ; 
724725 } 
725726
726727 getEnvironmentVariable ( name : string ) : string  { 
@@ -890,9 +891,16 @@ namespace Harness.LanguageService {
890891 } 
891892 } 
892893
894+  class  FourslashSession  extends  ts . server . Session  { 
895+  getText ( fileName : string )  { 
896+  return  ts . getSnapshotText ( this . projectService . getDefaultProjectForFile ( ts . server . toNormalizedPath ( fileName ) ,  /*ensureProject*/  true ) ! . getScriptSnapshot ( fileName ) ! ) ; 
897+  } 
898+  } 
899+ 
893900 export  class  ServerLanguageServiceAdapter  implements  LanguageServiceAdapter  { 
894901 private  host : SessionClientHost ; 
895902 private  client : ts . server . SessionClient ; 
903+  private  server : FourslashSession ; 
896904 constructor ( cancellationToken ?: ts . HostCancellationToken ,  options ?: ts . CompilerOptions )  { 
897905 // This is the main host that tests use to direct tests 
898906 const  clientHost  =  new  SessionClientHost ( cancellationToken ,  options ) ; 
@@ -912,11 +920,12 @@ namespace Harness.LanguageService {
912920 logger : serverHost , 
913921 canUseEvents : true 
914922 } ; 
915-  const  server  =  new  ts . server . Session ( opts ) ; 
923+  this . server  =  new  FourslashSession ( opts ) ; 
924+ 
916925
917926 // Fake the connection between the client and the server 
918927 serverHost . writeMessage  =  client . onMessage . bind ( client ) ; 
919-  clientHost . writeMessage  =  server . onMessage . bind ( server ) ; 
928+  clientHost . writeMessage  =  this . server . onMessage . bind ( this . server ) ; 
920929
921930 // Wire the client to the host to get notifications when a file is open 
922931 // or edited. 
@@ -930,5 +939,20 @@ namespace Harness.LanguageService {
930939 getLanguageService ( ) : ts . LanguageService  {  return  this . client ;  } 
931940 getClassifier ( ) : ts . Classifier  {  throw  new  Error ( "getClassifier is not available using the server interface." ) ;  } 
932941 getPreProcessedFileInfo ( ) : ts . PreProcessedFileInfo  {  throw  new  Error ( "getPreProcessedFileInfo is not available using the server interface." ) ;  } 
942+  assertTextConsistent ( fileName : string )  { 
943+  const  serverText  =  this . server . getText ( fileName ) ; 
944+  const  clientText  =  this . host . readFile ( fileName ) ; 
945+  ts . Debug . assert ( serverText  ===  clientText ,  [ 
946+  "Server and client text are inconsistent." , 
947+  "" , 
948+  "\x1b[1mServer\x1b[0m\x1b[31m:" , 
949+  serverText , 
950+  "" , 
951+  "\x1b[1mClient\x1b[0m\x1b[31m:" , 
952+  clientText , 
953+  "" , 
954+  "This probably means something is wrong with the fourslash infrastructure, not with the test." 
955+  ] . join ( ts . sys . newLine ) ) ; 
956+  } 
933957 } 
934958} 
0 commit comments