@@ -685,10 +685,10 @@ namespace FourSlash {
685
685
}
686
686
687
687
public verifyGoToDefinitionIs ( endMarker : ArrayOrSingle < string > ) {
688
- this . verifyGoToXWorker ( toArray ( endMarker ) , ( ) => this . getGoToDefinition ( ) ) ;
688
+ this . verifyGoToXWorker ( /*startMarker*/ undefined , toArray ( endMarker ) , ( ) => this . getGoToDefinition ( ) ) ;
689
689
}
690
690
691
- public verifyGoToDefinition ( arg0 : any , endMarkerNames ?: ArrayOrSingle < string > | { file : string } ) {
691
+ public verifyGoToDefinition ( arg0 : any , endMarkerNames ?: ArrayOrSingle < string | { marker : string , unverified ?: boolean } > | { file : string , unverified ?: boolean } ) {
692
692
this . verifyGoToX ( arg0 , endMarkerNames , ( ) => this . getGoToDefinitionAndBoundSpan ( ) ) ;
693
693
}
694
694
@@ -705,7 +705,7 @@ namespace FourSlash {
705
705
this . languageService . getTypeDefinitionAtPosition ( this . activeFile . fileName , this . currentCaretPosition ) ) ;
706
706
}
707
707
708
- private verifyGoToX ( arg0 : any , endMarkerNames : ArrayOrSingle < string > | { file : string } | undefined , getDefs : ( ) => readonly ts . DefinitionInfo [ ] | ts . DefinitionInfoAndBoundSpan | undefined ) {
708
+ private verifyGoToX ( arg0 : any , endMarkerNames : ArrayOrSingle < string | { marker : string , unverified ?: boolean } > | { file : string , unverified ?: boolean } | undefined , getDefs : ( ) => readonly ts . DefinitionInfo [ ] | ts . DefinitionInfoAndBoundSpan | undefined ) {
709
709
if ( endMarkerNames ) {
710
710
this . verifyGoToXPlain ( arg0 , endMarkerNames , getDefs ) ;
711
711
}
@@ -725,7 +725,7 @@ namespace FourSlash {
725
725
}
726
726
}
727
727
728
- private verifyGoToXPlain ( startMarkerNames : ArrayOrSingle < string > , endMarkerNames : ArrayOrSingle < string > | { file : string } , getDefs : ( ) => readonly ts . DefinitionInfo [ ] | ts . DefinitionInfoAndBoundSpan | undefined ) {
728
+ private verifyGoToXPlain ( startMarkerNames : ArrayOrSingle < string > , endMarkerNames : ArrayOrSingle < string | { marker : string , unverified ?: boolean } > | { file : string , unverified ?: boolean } , getDefs : ( ) => readonly ts . DefinitionInfo [ ] | ts . DefinitionInfoAndBoundSpan | undefined ) {
729
729
for ( const start of toArray ( startMarkerNames ) ) {
730
730
this . verifyGoToXSingle ( start , endMarkerNames , getDefs ) ;
731
731
}
@@ -737,12 +737,12 @@ namespace FourSlash {
737
737
}
738
738
}
739
739
740
- private verifyGoToXSingle ( startMarkerName : string , endMarkerNames : ArrayOrSingle < string > | { file : string } , getDefs : ( ) => readonly ts . DefinitionInfo [ ] | ts . DefinitionInfoAndBoundSpan | undefined ) {
740
+ private verifyGoToXSingle ( startMarkerName : string , endMarkerNames : ArrayOrSingle < string | { marker : string , unverified ?: boolean } > | { file : string , unverified ?: boolean } , getDefs : ( ) => readonly ts . DefinitionInfo [ ] | ts . DefinitionInfoAndBoundSpan | undefined ) {
741
741
this . goToMarker ( startMarkerName ) ;
742
- this . verifyGoToXWorker ( toArray ( endMarkerNames ) , getDefs , startMarkerName ) ;
742
+ this . verifyGoToXWorker ( startMarkerName , toArray ( endMarkerNames ) , getDefs , startMarkerName ) ;
743
743
}
744
744
745
- private verifyGoToXWorker ( endMarkers : readonly ( string | { file : string } ) [ ] , getDefs : ( ) => readonly ts . DefinitionInfo [ ] | ts . DefinitionInfoAndBoundSpan | undefined , startMarkerName ?: string ) {
745
+ private verifyGoToXWorker ( startMarker : string | undefined , endMarkers : readonly ( string | { marker ?: string , file ? : string , unverified ?: boolean } ) [ ] , getDefs : ( ) => readonly ts . DefinitionInfo [ ] | ts . DefinitionInfoAndBoundSpan | undefined , startMarkerName ?: string ) {
746
746
const defs = getDefs ( ) ;
747
747
let definitions : readonly ts . DefinitionInfo [ ] ;
748
748
let testName : string ;
@@ -763,8 +763,11 @@ namespace FourSlash {
763
763
}
764
764
765
765
ts . zipWith ( endMarkers , definitions , ( endMarkerOrFileResult , definition , i ) => {
766
- const expectedFileName = typeof endMarkerOrFileResult === "string" ? this . getMarkerByName ( endMarkerOrFileResult ) . fileName : endMarkerOrFileResult . file ;
767
- const expectedPosition = typeof endMarkerOrFileResult === "string" ? this . getMarkerByName ( endMarkerOrFileResult ) . position : 0 ;
766
+ const markerName = typeof endMarkerOrFileResult === "string" ? endMarkerOrFileResult : endMarkerOrFileResult . marker ;
767
+ const marker = markerName !== undefined ? this . getMarkerByName ( markerName ) : undefined ;
768
+ const expectedFileName = marker ?. fileName || typeof endMarkerOrFileResult !== "string" && endMarkerOrFileResult . file ;
769
+ ts . Debug . assert ( typeof expectedFileName === "string" ) ;
770
+ const expectedPosition = marker ?. position || 0 ;
768
771
if ( ts . comparePaths ( expectedFileName , definition . fileName , /*ignoreCase*/ true ) !== ts . Comparison . EqualTo || expectedPosition !== definition . textSpan . start ) {
769
772
const filesToDisplay = ts . deduplicate ( [ expectedFileName , definition . fileName ] , ts . equateValues ) ;
770
773
const markers = [ { text : "EXPECTED" , fileName : expectedFileName , position : expectedPosition } , { text : "ACTUAL" , fileName : definition . fileName , position : definition . textSpan . start } ] ;
@@ -777,7 +780,15 @@ namespace FourSlash {
777
780
return `// @Filename: ${ fileName } \n${ fileContent } ` ;
778
781
} ) . join ( "\n\n" ) ;
779
782
780
- this . raiseError ( `${ testName } failed for definition ${ endMarkerOrFileResult } (${ i } ): expected ${ expectedFileName } at ${ expectedPosition } , got ${ definition . fileName } at ${ definition . textSpan . start } \n\n${ text } \n` ) ;
783
+ this . raiseError ( `${ testName } failed for definition ${ markerName || expectedFileName } (${ i } ): expected ${ expectedFileName } at ${ expectedPosition } , got ${ definition . fileName } at ${ definition . textSpan . start } \n\n${ text } \n` ) ;
784
+ }
785
+ if ( definition . unverified && ( typeof endMarkerOrFileResult === "string" || ! endMarkerOrFileResult . unverified ) ) {
786
+ const isFileResult = typeof endMarkerOrFileResult !== "string" && ! ! endMarkerOrFileResult . file ;
787
+ this . raiseError (
788
+ `${ testName } failed for definition ${ markerName || expectedFileName } (${ i } ): The actual definition was an \`unverified\` result. Use:\n\n` +
789
+ ` verify.goToDefinition(${ startMarker === undefined ? "startMarker" : `"${ startMarker } "` } , { ${ isFileResult ? `file: "${ expectedFileName } "` : `marker: "${ markerName } "` } , unverified: true })\n\n` +
790
+ `if this is expected.`
791
+ ) ;
781
792
}
782
793
} ) ;
783
794
}
0 commit comments