Skip to content

Commit c5e8db5

Browse files
committed
Wired DOM parser to exceptions
1 parent 99f734c commit c5e8db5

3 files changed

Lines changed: 21 additions & 10 deletions

File tree

src/AngleSharp.Js.Tests/AngleSharp.Js.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
<ItemGroup>
1818
<PackageReference Include="AngleSharp.Css" Version="0.12.0" />
19+
<PackageReference Include="AngleSharp.Xml" Version="0.12.0" />
1920
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
2021
<PackageReference Include="NUnit" Version="3.11.0" />
2122
<PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />

src/AngleSharp.Js.Tests/ComponentTests.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace AngleSharp.Js.Tests
22
{
3-
using Jint;
3+
using AngleSharp.Xml;
44
using NUnit.Framework;
55
using System;
66
using System.Threading.Tasks;
@@ -11,7 +11,7 @@ public class ComponentTests
1111
private static async Task<String> RunScriptComponent(String script)
1212
{
1313
var service = new JsScriptingService();
14-
var cfg = Configuration.Default.With(service);
14+
var cfg = Configuration.Default.WithXml().With(service);
1515
var html = String.Concat("<!doctype html><script>", script, "</script>");
1616
var document = await BrowsingContext.New(cfg).OpenAsync(m => m.Content(html));
1717
var value = service.GetOrCreateJint(document).GetValue("assert");
@@ -41,16 +41,14 @@ public async Task DomParserShouldWorkWithXml()
4141
}
4242

4343
[Test]
44-
public void DomParserShouldNotWorkWithMathMl()
44+
public async Task DomParserShouldWorkWithMathMl()
4545
{
4646
var script = @"var xmlSource = '<math> <mrow> <msup><mi> a </mi><mn>2</mn></msup> <mo> + </mo> <msup><mi> b </mi><mn>2</mn></msup> <mo> = </mo> <msup><mi> c </mi><mn>2</mn></msup> </mrow> </math>';
4747
var parser = new DOMParser();
4848
var doc = parser.parseFromString(xmlSource, 'application/mathml+xml');
49-
var assert = 'failed';";
50-
Assert.CatchAsync<ArgumentException>(async () =>
51-
{
52-
var value = await RunScriptComponent(script);
53-
});
49+
var assert = 'success';";
50+
var value = await RunScriptComponent(script);
51+
Assert.AreEqual("success", value);
5452
}
5553

5654
[Test]

src/AngleSharp.Js/Dom/DomParser.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,20 @@ public IDocument Parse(String str, String type)
5252
{ HeaderNames.ContentType, type },
5353
},
5454
};
55-
var task = factory.CreateAsync(ctx, new CreateDocumentOptions(response), default);
56-
return task.Result;
55+
56+
try
57+
{
58+
var task = factory.CreateAsync(ctx, new CreateDocumentOptions(response), default);
59+
var document = task.Result;
60+
return document;
61+
}
62+
catch (Exception ex)
63+
{
64+
var message = ex.InnerException?.Message ?? ex.Message ?? "Something went wrong.";
65+
var sourceText = String.Empty;
66+
var error = $"<parsererror xmlns=\"http://www.mozilla.org/newlayout/xml/parsererror.xml\">{message}<sourcetext>{sourceText}</sourcetext></parsererror>";
67+
return Parse(error, MimeTypeNames.Xml);
68+
}
5769
}
5870
}
5971
}

0 commit comments

Comments
 (0)