Merge pull request #25 from TerribleDev/pr-24

PR-24
This commit is contained in:
Tommy Parnell
2023-10-19 18:28:48 -04:00
committed by GitHub
3 changed files with 49 additions and 38 deletions

1
.gitignore vendored
View File

@@ -248,4 +248,5 @@ ModelManifest.xml
coverage.opencover.xml coverage.opencover.xml
coverage.json coverage.json
coverage.info coverage.info
.DS_Store
output output

View File

@@ -16,7 +16,7 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithPathSegment(pathWithSlashes); .WithPathSegment(pathWithSlashes);
Assert.Equal("http://awesome.com/" + expectedPath, url.Uri.ToString()); Assert.Equal("http://awesome.com/" + expectedPath, url.ToUriString());
} }
[Fact] [Fact]
@@ -25,7 +25,7 @@ namespace FluentUriBuilder.Tests
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithPathSegment("yodawg") .WithPathSegment("yodawg")
.WithPathSegment("/immahslash/"); .WithPathSegment("/immahslash/");
Assert.Equal("http://awesome.com/yodawg/immahslash/", url.Uri.ToString()); Assert.Equal("http://awesome.com/yodawg/immahslash/", url.ToUriString());
} }
[Fact] [Fact]
@@ -33,7 +33,7 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithParameter("awesome", "yodawg"); .WithParameter("awesome", "yodawg");
Assert.Equal("http://awesome.com/?awesome=yodawg", url.Uri.ToString()); Assert.Equal("http://awesome.com/?awesome=yodawg", url.ToUriString());
} }
[Fact] [Fact]
public void TestAddUrlParameterAsTupleList() public void TestAddUrlParameterAsTupleList()
@@ -43,7 +43,7 @@ namespace FluentUriBuilder.Tests
{ {
("awesome", "yodawg") ("awesome", "yodawg")
}); });
Assert.Equal("http://awesome.com/?awesome=yodawg", url.Uri.ToString()); Assert.Equal("http://awesome.com/?awesome=yodawg", url.ToUriString());
} }
[Fact] [Fact]
@@ -62,7 +62,7 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithParameter("awesome", "cool", "dawg"); .WithParameter("awesome", "cool", "dawg");
Assert.Equal("http://awesome.com/?awesome=cool,dawg", url.Uri.ToString()); Assert.Equal("http://awesome.com/?awesome=cool,dawg", url.ToUriString());
} }
[Fact] [Fact]
@@ -70,7 +70,7 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithParameter("awesome", new List<int>() { 1, 2 }.Cast<object>()); .WithParameter("awesome", new List<int>() { 1, 2 }.Cast<object>());
Assert.Equal("http://awesome.com/?awesome=1,2", url.Uri.ToString()); Assert.Equal("http://awesome.com/?awesome=1,2", url.ToUriString());
} }
[Fact] [Fact]
@@ -78,7 +78,7 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithParameter("awesome"); .WithParameter("awesome");
Assert.Equal("http://awesome.com/?awesome", url.Uri.ToString()); Assert.Equal("http://awesome.com/?awesome", url.ToUriString());
} }
[Fact] [Fact]
@@ -86,7 +86,7 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithFragment("awesome", "cool", "dawg"); .WithFragment("awesome", "cool", "dawg");
Assert.Equal("http://awesome.com/#awesome=cool,dawg", url.Uri.ToString()); Assert.Equal("http://awesome.com/#awesome=cool,dawg", url.ToUriString());
} }
[Fact] [Fact]
@@ -94,7 +94,7 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithFragment("awesome", new List<int>() { 1, 2 }.Cast<object>()); .WithFragment("awesome", new List<int>() { 1, 2 }.Cast<object>());
Assert.Equal("http://awesome.com/#awesome=1,2", url.Uri.ToString()); Assert.Equal("http://awesome.com/#awesome=1,2", url.ToUriString());
} }
[Fact] [Fact]
@@ -102,7 +102,7 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithFragment("awesome"); .WithFragment("awesome");
Assert.Equal("http://awesome.com/#awesome", url.Uri.ToString()); Assert.Equal("http://awesome.com/#awesome", url.ToUriString());
} }
[Fact] [Fact]
@@ -117,15 +117,15 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com:80") var url = new UriBuilder("http://awesome.com:80")
.WithoutDefaultPort(); .WithoutDefaultPort();
Assert.Equal("http://awesome.com/", url.Uri.ToString()); Assert.Equal("http://awesome.com/", url.ToUriString());
url = new UriBuilder("http://awesome.com:443") url = new UriBuilder("http://awesome.com:443")
.WithoutDefaultPort(); .WithoutDefaultPort();
Assert.Equal("http://awesome.com:443/", url.Uri.ToString()); Assert.Equal("http://awesome.com:443/", url.ToUriString());
url = new UriBuilder("https://awesome.com:443") url = new UriBuilder("https://awesome.com:443")
.WithoutDefaultPort(); .WithoutDefaultPort();
Assert.Equal("https://awesome.com/", url.Uri.ToString()); Assert.Equal("https://awesome.com/", url.ToUriString());
} }
[Fact] [Fact]
@@ -165,7 +165,7 @@ namespace FluentUriBuilder.Tests
.WithParameter("awesome", "yodawg") .WithParameter("awesome", "yodawg")
.WithParameter("fun", null) .WithParameter("fun", null)
.WithParameter("cool", string.Empty); .WithParameter("cool", string.Empty);
Assert.Equal("http://awesome.com/?awesome=yodawg&fun&cool", url.Uri.ToString()); Assert.Equal("http://awesome.com/?awesome=yodawg&fun&cool", url.ToUriString());
} }
[Fact] [Fact]
@@ -175,7 +175,7 @@ namespace FluentUriBuilder.Tests
.WithParameter("awesome", "yodawg") .WithParameter("awesome", "yodawg")
.WithParameter("supg", "no2") .WithParameter("supg", "no2")
.WithParameter("supgf", "no22"); .WithParameter("supgf", "no22");
Assert.Equal("http://awesome.com/?awesome=yodawg&supg=no2&supgf=no22", url.Uri.ToString()); Assert.Equal("http://awesome.com/?awesome=yodawg&supg=no2&supgf=no22", url.ToUriString());
} }
[Fact] [Fact]
@@ -189,7 +189,7 @@ namespace FluentUriBuilder.Tests
}; };
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithParameter(dictionary); .WithParameter(dictionary);
Assert.Equal("http://awesome.com/?yo=dawg&troll=toll&hammer", url.Uri.ToString()); Assert.Equal("http://awesome.com/?yo=dawg&troll=toll&hammer", url.ToUriString());
} }
[Fact] [Fact]
@@ -199,7 +199,7 @@ namespace FluentUriBuilder.Tests
.WithFragment("awesome", "yodawg") .WithFragment("awesome", "yodawg")
.WithFragment("fun", null) .WithFragment("fun", null)
.WithFragment("cool", string.Empty); .WithFragment("cool", string.Empty);
Assert.Equal("http://awesome.com/#awesome=yodawg&fun&cool", url.Uri.ToString()); Assert.Equal("http://awesome.com/#awesome=yodawg&fun&cool", url.ToUriString());
} }
[Fact] [Fact]
@@ -209,7 +209,7 @@ namespace FluentUriBuilder.Tests
.WithFragment("awesome", "yodawg") .WithFragment("awesome", "yodawg")
.WithFragment("supg", "no2") .WithFragment("supg", "no2")
.WithFragment("supgf", "no22"); .WithFragment("supgf", "no22");
Assert.Equal("http://awesome.com/#awesome=yodawg&supg=no2&supgf=no22", url.Uri.ToString()); Assert.Equal("http://awesome.com/#awesome=yodawg&supg=no2&supgf=no22", url.ToUriString());
} }
[Fact] [Fact]
@@ -223,7 +223,7 @@ namespace FluentUriBuilder.Tests
}; };
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithFragment(dictionary); .WithFragment(dictionary);
Assert.Equal("http://awesome.com/#yo=dawg&troll=toll&hammer", url.Uri.ToString()); Assert.Equal("http://awesome.com/#yo=dawg&troll=toll&hammer", url.ToUriString());
} }
[Fact] [Fact]
@@ -231,15 +231,8 @@ namespace FluentUriBuilder.Tests
{ {
var url = new UriBuilder("http://awesome.com") var url = new UriBuilder("http://awesome.com")
.WithParameter("yo", "dawg<"); .WithParameter("yo", "dawg<");
Assert.Equal("http://awesome.com/?yo=dawg%3C", url.ToEscapeString()); Assert.Equal("http://awesome.com/?yo=dawg<", url.ToUriString());
} }
[Fact]
public void TestToEscapedDataString()
{
var url = new UriBuilder("http://awesome.com")
.WithParameter("yo", "dawg<");
Assert.Equal("http%3A%2F%2Fawesome.com%2F%3Fyo%3Ddawg%3C", url.ToEscapeDataString());
}
} }
} }

View File

@@ -1,4 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.SqlTypes;
using System.IO;
using System.Linq;
using System.Text; using System.Text;
namespace System namespace System
@@ -266,24 +269,38 @@ namespace System
/// <returns></returns> /// <returns></returns>
public static string ToEscapeDataString(this UriBuilder bld) => Uri.EscapeDataString(bld.Uri.ToString()); public static string ToEscapeDataString(this UriBuilder bld) => Uri.EscapeDataString(bld.Uri.ToString());
/// <summary>
/// Returns the Uri string
/// </summary>
/// <param name="bld"></param>
/// <exception cref="ArgumentNullException"></exception>
/// <returns></returns>
public static string ToUriString(this UriBuilder bld) => bld.Uri.ToString();
/// <summary> /// <summary>
/// Appends x-www-form-urlencoded key and valuesEnum into initialValue. /// Appends x-www-form-urlencoded key and valuesEnum into initialValue.
/// </summary> /// </summary>
/// <exception cref="ArgumentNullException"></exception> /// <exception cref="ArgumentNullException"></exception>
private static string AppendKeyValue(this string intitialValue, string key, IEnumerable<object> valuesEnum) private static string AppendKeyValue(this string intitialValue, string key, IEnumerable<object> valuesEnum)
{ {
var sb = new StringBuilder($"{intitialValue}{key}"); var encodedKey = Uri.EscapeDataString(key);
var validValueHit = false;
foreach (var value in valuesEnum) var sb = new StringBuilder($"{intitialValue}{encodedKey}");
var Values = (
from x in valuesEnum
let v = x?.ToString()
where !string.IsNullOrWhiteSpace(v)
select Uri.EscapeDataString(v)
).ToArray();
if (Values.Length > 0)
{ {
var toSValue = value?.ToString(); sb.Append("=");
if (string.IsNullOrWhiteSpace(toSValue)) continue; sb.Append(string.Join(",", Values));
// we can't just have an = sign since its valid to have query string paramters with no value;
if (!validValueHit) toSValue = "=" + value;
validValueHit = true;
sb.Append($"{toSValue},");
} }
return sb.ToString().TrimEnd(',');
return sb.ToString();
} }
} }
} }