Skip to content

Commit 2d5ecd4

Browse files
committed
Implemented address selection and added tests #13
1 parent d17b5d8 commit 2d5ecd4

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed

src/AngleSharp.Io.Tests/AngleSharp.Io.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
</ItemGroup>
7474
<ItemGroup>
7575
<Compile Include="Helper.cs" />
76+
<Compile Include="Network\AboutTests.cs" />
7677
<Compile Include="Network\FileRequesterTests.cs" />
7778
<Compile Include="Network\FtpRequesterTests.cs" />
7879
<Compile Include="Network\HttpClientRequesterTests.cs" />
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
namespace AngleSharp.Io.Tests.Network
2+
{
3+
using AngleSharp.Network;
4+
using AngleSharp.Network.Default;
5+
using Io.Network;
6+
using NUnit.Framework;
7+
using System.Collections.Generic;
8+
using System.Threading;
9+
using System.Threading.Tasks;
10+
11+
[TestFixture]
12+
public class AboutTests
13+
{
14+
[Test]
15+
public async Task InvokeAboutSettingsLowercaseShouldWorkFine()
16+
{
17+
var about = new AboutRequester();
18+
var requests = new List<IRequest>();
19+
var req = new Request
20+
{
21+
Address = Url.Create("about://settings"),
22+
Method = HttpMethod.Get
23+
};
24+
25+
about.SetRoute("settings", (request, cancel) =>
26+
{
27+
requests.Add(request);
28+
return Task.FromResult(default(IResponse));
29+
});
30+
31+
var response = await about.RequestAsync(req, CancellationToken.None);
32+
Assert.IsNull(response);
33+
Assert.AreEqual(1, requests.Count);
34+
}
35+
36+
[Test]
37+
public async Task InvokeAboutSettingsUppercaseShouldWorkFine()
38+
{
39+
var about = new AboutRequester();
40+
var requests = new List<IRequest>();
41+
var req = new Request
42+
{
43+
Address = Url.Create("about://Settings"),
44+
Method = HttpMethod.Get
45+
};
46+
47+
about.SetRoute("settings", (request, cancel) =>
48+
{
49+
requests.Add(request);
50+
return Task.FromResult(default(IResponse));
51+
});
52+
53+
var response = await about.RequestAsync(req, CancellationToken.None);
54+
Assert.IsNull(response);
55+
Assert.AreEqual(1, requests.Count);
56+
}
57+
58+
[Test]
59+
public async Task InvokeAboutUnsetUrlShouldNotFire()
60+
{
61+
var about = new AboutRequester();
62+
var requests = new List<IRequest>();
63+
var req = new Request
64+
{
65+
Address = Url.Create("about://bookmarks"),
66+
Method = HttpMethod.Get
67+
};
68+
69+
about.SetRoute("settings", (request, cancel) =>
70+
{
71+
requests.Add(request);
72+
return Task.FromResult(default(IResponse));
73+
});
74+
75+
var response = await about.RequestAsync(req, CancellationToken.None);
76+
Assert.IsNull(response);
77+
Assert.AreEqual(0, requests.Count);
78+
}
79+
}
80+
}

src/AngleSharp.Io/Network/AboutRequester.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class AboutRequester : IRequester
1818
/// </summary>
1919
public AboutRequester()
2020
{
21-
_routes = new Dictionary<String, Func<IRequest, CancellationToken, Task<IResponse>>>();
21+
_routes = new Dictionary<String, Func<IRequest, CancellationToken, Task<IResponse>>>(StringComparer.InvariantCultureIgnoreCase);
2222
}
2323

2424
/// <summary>
@@ -51,7 +51,8 @@ public Func<IRequest, CancellationToken, Task<IResponse>> GetRoute(String addres
5151
/// <returns>The task that will eventually give the response data.</returns>
5252
public Task<IResponse> RequestAsync(IRequest request, CancellationToken cancel)
5353
{
54-
var route = GetRoute(request.Address.Data);
54+
var address = GetAddress(request.Address.Data);
55+
var route = GetRoute(address);
5556

5657
if (route != null)
5758
{
@@ -70,5 +71,14 @@ public Boolean SupportsProtocol(String protocol)
7071
{
7172
return !String.IsNullOrEmpty(protocol) && protocol.Equals("about");
7273
}
74+
75+
private static String GetAddress(String data)
76+
{
77+
var skip = 0;
78+
79+
while (data.Length > skip && data[skip] == '/' && skip++ < 2) ;
80+
81+
return data.Remove(0, skip);
82+
}
7383
}
7484
}

0 commit comments

Comments
 (0)