Skip to content

Commit 96edd4e

Browse files
committed
Wrapper xml parsing in try/catch to provide better error message to unit test runner
1 parent 22ba6b0 commit 96edd4e

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

src/Egil.RazorComponents.Testing.Library.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<RepositoryUrl>https://github.com/egil/razor-components-testing-library</RepositoryUrl>
1515
<PackageProjectUrl>https://github.com/egil/razor-components-testing-library</PackageProjectUrl>
1616
<PackageTags>razor-components unit-testing testing blazor blazor-server-side blazor-client-side</PackageTags>
17-
<Version>0.1.0-preview7-19365-7-2</Version>
17+
<Version>0.1.0-preview7-19365-7-3</Version>
1818
<Authors>Egil Hansen</Authors>
1919
<Company>Egil Hansen</Company>
2020
<Product>Razor Component Testing Library</Product>

src/RazerComponentTestRenderer.cs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Runtime.Serialization;
3+
using Xunit.Sdk;
4+
5+
namespace Egil.RazorComponents.Testing
6+
{
7+
public class RazorComponentRenderResultParseException : XunitException
8+
{
9+
public RazorComponentRenderResultParseException(string userMessage, Exception innerException) : base(userMessage, innerException)
10+
{
11+
}
12+
}
13+
}

0 commit comments

Comments
 (0)