@@ -13,6 +13,8 @@ namespace Egil.RazorComponents.Testing
1313{
1414 public class RazerComponentTestRenderer : IDisposable
1515 {
16+ private const string RenderResultsElement = "RenderResults" ;
17+
1618 private readonly IDispatcher _dispatcher = Renderer . CreateDefaultDispatcher ( ) ;
1719 private readonly Func < string , string > _encoder = ( t ) => HtmlEncoder . Default . Encode ( t ) ;
1820
@@ -39,7 +41,7 @@ private IReadOnlyList<TestRenderResult> GetTestResults(HtmlRenderer htmlRenderer
3941 {
4042 var renderTask = _dispatcher . InvokeAsync ( ( ) => htmlRenderer . RenderComponentAsync < RenderFragmentWrapper > ( parameterCollection ) ) ;
4143 var renderResult = GetResult ( renderTask ) ;
42- return ParseRawXml ( string . Concat ( renderResult . Tokens ) ) ;
44+ return ProcessRenderResult ( string . Concat ( renderResult . Tokens ) ) ;
4345 }
4446
4547 private static ComponentRenderedText GetResult ( Task < ComponentRenderedText > task )
@@ -57,15 +59,12 @@ private static ComponentRenderedText GetResult(Task<ComponentRenderedText> task)
5759 }
5860 }
5961
60- private static IReadOnlyList < TestRenderResult > ParseRawXml ( string renderResults )
62+ private static IReadOnlyList < TestRenderResult > ProcessRenderResult ( string renderResults )
6163 {
62- const string renderResultsElement = "RenderResults" ;
63-
64- var xml = new XmlDocument ( ) ;
65- xml . LoadXml ( $ "<{ renderResultsElement } >{ renderResults } </{ renderResultsElement } >") ;
64+ var xml = LoadRenderResult ( renderResults ) ;
6665
6766 var result = new List < TestRenderResult > ( ) ;
68- foreach ( XmlNode ? node in xml . SelectNodes ( $ "{ renderResultsElement } /{ Fact . ElementName } ") )
67+ foreach ( XmlNode ? node in xml . SelectNodes ( $ "{ RenderResultsElement } /{ Fact . ElementName } ") )
6968 {
7069 if ( node is null ) continue ;
7170
@@ -80,5 +79,21 @@ private static IReadOnlyList<TestRenderResult> ParseRawXml(string renderResults)
8079
8180 return result . AsReadOnly ( ) ;
8281 }
82+
83+ private static XmlDocument LoadRenderResult ( string renderResults )
84+ {
85+ var renderResultXml = $ "<{ RenderResultsElement } >{ renderResults } </{ RenderResultsElement } >";
86+ var xml = new XmlDocument ( ) ;
87+ try
88+ {
89+ xml . LoadXml ( renderResultXml ) ;
90+ return xml ;
91+ }
92+ catch ( XmlException ex )
93+ {
94+ throw new RazorComponentRenderResultParseException ( $ "An error occurred while trying to parse the " +
95+ $ "render result of the test. Result XML: { Environment . NewLine } { renderResultXml } ", ex ) ;
96+ }
97+ }
8398 }
8499}
0 commit comments