Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions UnitTests/DataAssemblyTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ public void LookupRddl()
*/
Assert.NotNull(res);
Assert.NotNull(res.Stream);
Assert.NotNull(res.Uri);
Assert.That(res.Uri.Scheme == "pack");
Assert.NotNull(res.ResolvedUri);
Assert.That(res.ResolvedUri.Scheme == "pack");
}

/*
Expand Down
33 changes: 31 additions & 2 deletions UnitTests/ResolverTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void LookupSystem() {
IResourceResponse rsrc = resolver.ResolveEntity(null, null, "https://example.com/sample/1.0/sample.dtd", null);

Assert.NotNull(rsrc.Stream);
Assert.AreEqual(result, rsrc.Uri);
Assert.AreEqual(result, rsrc.ResolvedUri);
} catch (Exception ex) {
Console.WriteLine(ex.Message);
Assert.Fail();
Expand All @@ -63,9 +63,38 @@ public void LookupSystemAsUri() {
try {
Uri result = UriUtils.Resolve(TEST_ROOT_DIRECTORY, "UnitTests/resources/sample10/sample.dtd");
IResourceResponse rsrc = resolver.ResolveEntity(null, null, "https://example.com/sample/1.0/uri.dtd", null);
Assert.NotNull(rsrc.Stream);
Assert.AreEqual(result, rsrc.ResolvedUri);
} catch (Exception) {
Assert.Fail();
}
}

[Test]
public void LookupUri() {
try
{
IResourceResponse rsrc = resolver.ResolveUri("XMLSchema.xsd", "http://www.w3.org/TR/xmlschema11-1/");
Assert.NotNull(rsrc.Uri);
Assert.NotNull(rsrc.ResolvedUri);
Assert.NotNull(rsrc.Stream);

Assert.AreEqual(new Uri("http://www.w3.org/TR/xmlschema11-1/XMLSchema.xsd"), rsrc.Uri);
Assert.AreEqual("pack", rsrc.ResolvedUri.Scheme);
} catch (Exception) {
Assert.Fail();
}
}

[Test]
public void LookupRedirectedUri() {
try
{
IResourceResponse rsrc = resolver.ResolveUri("https://www.w3.org/TR/1999/WD-font-19990902");
Assert.NotNull(rsrc.Uri);
Assert.NotNull(rsrc.ResolvedUri);
Assert.NotNull(rsrc.Stream);
Assert.AreEqual(result, rsrc.Uri);
Assert.NotNull(rsrc.Encoding);
} catch (Exception) {
Assert.Fail();
}
Expand Down
27 changes: 20 additions & 7 deletions XmlResolver/ResourceAccess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,19 @@ private static IResourceResponse _getHttpResource(IResourceRequest request, Uri
}

var rsrc = new ResourceResponse(request, resolvedUri);

var pos = ctype.IndexOf("charset=", StringComparison.Ordinal);
if (pos > 0)
{
var charset = ctype.Substring(pos + 8);
pos = charset.IndexOf(";", StringComparison.Ordinal);
if (pos > 0)
{
charset = charset.Substring(0, pos);
}
rsrc.Encoding = charset;
}
rsrc.ContentType = ctype;
rsrc.SetHeaders(headers);
rsrc.Stream = resp.Content.ReadAsStream();
rsrc.StatusCode = 200;
Expand Down Expand Up @@ -219,13 +232,13 @@ private static (Uri resolvedUri, HttpResponseMessage resp) _getHttpResponse(Uri

throw CreateHttpRequestException("Failed to read resource", status);

HttpRequestException CreateHttpRequestException(string text, HttpStatusCode statusCode)
{
#if NETSTANDARD2_0
return new HttpRequestException($"{text} ({statusCode})");
#else
return new HttpRequestException(text, null, statusCode);
#endif
HttpRequestException CreateHttpRequestException(string text, HttpStatusCode statusCode)
{
#if NETSTANDARD2_0
return new HttpRequestException($"{text} ({statusCode})");
#else
return new HttpRequestException(text, null, statusCode);
#endif
}
}

Expand Down
2 changes: 1 addition & 1 deletion XmlResolver/ResourceResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ internal ResourceResponse(IResourceRequest request, Uri? uri = null)
{
Request = request;
Rejected = false;
Uri = uri;
Uri = request.GetAbsoluteUri();
ResolvedUri = uri;
Resolved = uri != null;
}
Expand Down