Skip to content

Commit

Permalink
Fix Url.Hash and Url.Search
Browse files Browse the repository at this point in the history
  • Loading branch information
kzrnm committed Dec 6, 2021
1 parent a5283d5 commit bc2e97e
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 2 deletions.
75 changes: 75 additions & 0 deletions src/AngleSharp.Core.Tests/Urls/UrlApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,39 @@ public void UrlHashhWithFragmentIsNotEmpty()
Assert.AreEqual("baz", url.Fragment);
}

[Test]
public void UrlHashAssigningStringWithHash()
{
var url = new Url("https://florian-rappl.de/foo/bar#baz");
Assert.AreEqual("#baz", url.Hash);
Assert.AreEqual("baz", url.Fragment);
url.Hash = "#foobar";
Assert.AreEqual("#foobar", url.Hash);
Assert.AreEqual("foobar", url.Fragment);
}

[Test]
public void UrlHashAssigningStringWithoutHash()
{
var url = new Url("https://florian-rappl.de/foo/bar#baz");
Assert.AreEqual("#baz", url.Hash);
Assert.AreEqual("baz", url.Fragment);
url.Hash = "foobar";
Assert.AreEqual("#foobar", url.Hash);
Assert.AreEqual("foobar", url.Fragment);
}

[Test]
public void UrlHashAssigningEmpty()
{
var url = new Url("https://florian-rappl.de/foo/bar#baz");
Assert.AreEqual("#baz", url.Hash);
Assert.AreEqual("baz", url.Fragment);
url.Hash = "";
Assert.AreEqual("", url.Hash);
Assert.AreEqual(null, url.Fragment);
}

[Test]
public void UrlPathnameIncludesSlash()
{
Expand Down Expand Up @@ -76,6 +109,48 @@ public void UrlParamsAreLive()
Assert.AreEqual("foo=bar", url.Query);
}

[Test]
public void UrlSearchAssigningStringWithoutQuestion()
{
var url = new Url("https://florian-rappl.de?qxz=bar");
Assert.AreEqual("bar", url.SearchParams.Get("qxz"));
Assert.AreEqual(true, url.SearchParams.Has("qxz"));
Assert.AreEqual(null, url.SearchParams.Get("foo"));
url.Search = "foo=bar";
Assert.AreEqual(null, url.SearchParams.Get("qxz"));
Assert.AreEqual(false, url.SearchParams.Has("qxz"));
Assert.AreEqual("bar", url.SearchParams.Get("foo"));
Assert.AreEqual("foo=bar", url.Query);
}

[Test]
public void UrlSearchAssigningStringWithQuestion()
{
var url = new Url("https://florian-rappl.de?qxz=bar");
Assert.AreEqual("bar", url.SearchParams.Get("qxz"));
Assert.AreEqual(true, url.SearchParams.Has("qxz"));
Assert.AreEqual(null, url.SearchParams.Get("foo"));
url.Search = "?foo=bar";
Assert.AreEqual(null, url.SearchParams.Get("qxz"));
Assert.AreEqual(false, url.SearchParams.Has("qxz"));
Assert.AreEqual("bar", url.SearchParams.Get("foo"));
Assert.AreEqual("foo=bar", url.Query);
}

[Test]
public void UrlSearchAssigningEmpty()
{
var url = new Url("https://florian-rappl.de?qxz=bar");
Assert.AreEqual("bar", url.SearchParams.Get("qxz"));
Assert.AreEqual(true, url.SearchParams.Has("qxz"));
Assert.AreEqual(null, url.SearchParams.Get("foo"));
url.Search = "";
Assert.AreEqual(null, url.SearchParams.Get("qxz"));
Assert.AreEqual(false, url.SearchParams.Has("qxz"));
Assert.AreEqual(null, url.SearchParams.Get("foo"));
Assert.AreEqual(null, url.Query);
}

[Test]
public void UrlParamsAreConnectedWhenAppend()
{
Expand Down
32 changes: 30 additions & 2 deletions src/AngleSharp/Dom/Url.cs
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,21 @@ public static Url Convert(Uri uri)
public String Hash
{
get => String.IsNullOrEmpty(_fragment) ? String.Empty : $"#{_fragment}";
set => Fragment = value;
set
{
if (String.IsNullOrEmpty(value))
{
Fragment = null;
}
else if (value[0] is '#')
{
Fragment = value.Substring(1);
}
else
{
Fragment = value;
}
}
}

/// <summary>
Expand Down Expand Up @@ -384,7 +398,21 @@ public String Protocol
public String Search
{
get => String.IsNullOrEmpty(_query) ? String.Empty : $"?{_query}";
set => Query = value;
set
{
if (String.IsNullOrEmpty(value))
{
Query = null;
}
else if (value[0] is '?')
{
Query = value.Substring(1);
}
else
{
Query = value;
}
}
}

/// <summary>
Expand Down

0 comments on commit bc2e97e

Please sign in to comment.