@@ -32,8 +32,7 @@ private static async Task TestSymbolFoundAsync(string inputLine, string code)
32
32
var reparsedResult = await StackTraceAnalyzer . AnalyzeAsync ( stackFrame . ToString ( ) , CancellationToken . None ) ;
33
33
Assert . Single ( reparsedResult . ParsedFrames ) ;
34
34
35
- var reparsedFrame = reparsedResult . ParsedFrames [ 0 ] as ParsedStackFrame ;
36
- AssertEx . NotNull ( reparsedFrame ) ;
35
+ var reparsedFrame = Assert . IsType < ParsedStackFrame > ( reparsedResult . ParsedFrames [ 0 ] ) ;
37
36
StackFrameUtils . AssertEqual ( stackFrame . Root , reparsedFrame . Root ) ;
38
37
39
38
// Get the definition for the parsed frame
@@ -820,9 +819,9 @@ class C
820
819
var result = await StackTraceAnalyzer . AnalyzeAsync ( line , CancellationToken . None ) ;
821
820
Assert . Equal ( 1 , result . ParsedFrames . Length ) ;
822
821
823
- var parsedFame = result . ParsedFrames . OfType < ParsedStackFrame > ( ) . Single ( ) ;
822
+ var parsedFrame = Assert . IsType < ParsedStackFrame > ( result . ParsedFrames [ 0 ] ) ;
824
823
var service = workspace . Services . GetRequiredService < IStackTraceExplorerService > ( ) ;
825
- var definition = await service . TryFindDefinitionAsync ( workspace . CurrentSolution , parsedFame , StackFrameSymbolPart . Method , CancellationToken . None ) ;
824
+ var definition = await service . TryFindDefinitionAsync ( workspace . CurrentSolution , parsedFrame , StackFrameSymbolPart . Method , CancellationToken . None ) ;
826
825
Assert . Null ( definition ) ;
827
826
}
828
827
@@ -850,13 +849,89 @@ public async Task TestMetadataSymbol()
850
849
var result = await StackTraceAnalyzer . AnalyzeAsync ( "at System.String.ToLower()" , CancellationToken . None ) ;
851
850
Assert . Single ( result . ParsedFrames ) ;
852
851
853
- var frame = result . ParsedFrames [ 0 ] as ParsedStackFrame ;
854
- AssertEx . NotNull ( frame ) ;
855
-
852
+ var frame = Assert . IsType < ParsedStackFrame > ( result . ParsedFrames [ 0 ] ) ;
856
853
var service = workspace . Services . GetRequiredService < IStackTraceExplorerService > ( ) ;
857
854
var definition = await service . TryFindDefinitionAsync ( workspace . CurrentSolution , frame , StackFrameSymbolPart . Method , CancellationToken . None ) ;
858
855
859
856
AssertEx . NotNull ( definition ) ;
860
857
Assert . Equal ( "String.ToLower" , definition . NameDisplayParts . ToVisibleDisplayString ( includeLeftToRightMarker : false ) ) ;
861
858
}
859
+
860
+ [ Fact ]
861
+ public async Task TestAdditionalFileExactMatchAsync ( )
862
+ {
863
+ using var workspace = TestWorkspace . Create (
864
+ """
865
+ <Workspace>
866
+ <Project Language="C#" CommonReferences="true">
867
+ <Document>
868
+ class C
869
+ {
870
+ void M() {}
871
+ }
872
+ </Document>
873
+ <AdditionalDocument FilePath="C:/path/to/Component.razor">
874
+ @page "/"
875
+
876
+ @code
877
+ {
878
+ void M()
879
+ {
880
+ }
881
+ }
882
+ </AdditionalDocument>
883
+ </Project>
884
+ </Workspace>
885
+ """ ) ;
886
+
887
+ var result = await StackTraceAnalyzer . AnalyzeAsync ( "at Path.To.Component.M() in C:/path/to/Component.razor:line 5" , CancellationToken . None ) ;
888
+ Assert . Single ( result . ParsedFrames ) ;
889
+
890
+ var frame = Assert . IsType < ParsedStackFrame > ( result . ParsedFrames [ 0 ] ) ;
891
+ var service = workspace . Services . GetRequiredService < IStackTraceExplorerService > ( ) ;
892
+ var ( document , line ) = service . GetDocumentAndLine ( workspace . CurrentSolution , frame ) ;
893
+ Assert . Equal ( 5 , line ) ;
894
+
895
+ AssertEx . NotNull ( document ) ;
896
+ Assert . Equal ( @"C:/path/to/Component.razor" , document . FilePath ) ;
897
+ }
898
+
899
+ [ Fact ]
900
+ public async Task TestAdditionalFileNameMatchAsync ( )
901
+ {
902
+ using var workspace = TestWorkspace . Create (
903
+ """
904
+ <Workspace>
905
+ <Project Language="C#" CommonReferences="true">
906
+ <Document>
907
+ class C
908
+ {
909
+ void M() {}
910
+ }
911
+ </Document>
912
+ <AdditionalDocument FilePath="C:/path/to/Component.razor" Name="Component.razor">
913
+ @page "/"
914
+
915
+ @code
916
+ {
917
+ void M()
918
+ {
919
+ }
920
+ }
921
+ </AdditionalDocument>
922
+ </Project>
923
+ </Workspace>
924
+ """ ) ;
925
+
926
+ var result = await StackTraceAnalyzer . AnalyzeAsync ( "at Path.To.Component.M() in Component.razor:line 5" , CancellationToken . None ) ;
927
+ Assert . Single ( result . ParsedFrames ) ;
928
+
929
+ var frame = Assert . IsType < ParsedStackFrame > ( result . ParsedFrames [ 0 ] ) ;
930
+ var service = workspace . Services . GetRequiredService < IStackTraceExplorerService > ( ) ;
931
+ var ( document , line ) = service . GetDocumentAndLine ( workspace . CurrentSolution , frame ) ;
932
+ Assert . Equal ( 5 , line ) ;
933
+
934
+ AssertEx . NotNull ( document ) ;
935
+ Assert . Equal ( @"C:/path/to/Component.razor" , document . FilePath ) ;
936
+ }
862
937
}
0 commit comments