From 51481d2da24a938056a1b70bd6e6e61ce2ea60eb Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 13 Oct 2018 17:46:36 +0000 Subject: [PATCH] add GetNthIndexOfCharShould tests (#581) --- .../Extensions/StringExtensions.cs | 9 +++-- .../Collection/AddIfNotNullOrEmptyShould.cs | 5 +-- .../Extensions/Collection/AddRangeShould.cs | 5 +-- .../String/GetNthIndexOfCharShould.cs | 35 +++++++++++++++++++ .../String/IsValidHttpOrHttpsUrlShould.cs | 10 +++--- 5 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 tests/FilterLists.Services.Tests/Extensions/String/GetNthIndexOfCharShould.cs diff --git a/src/FilterLists.Services/Extensions/StringExtensions.cs b/src/FilterLists.Services/Extensions/StringExtensions.cs index 5374618be..bc7b7b885 100644 --- a/src/FilterLists.Services/Extensions/StringExtensions.cs +++ b/src/FilterLists.Services/Extensions/StringExtensions.cs @@ -9,7 +9,12 @@ public static bool IsValidHttpOrHttpsUrl(this string source) => Uri.TryCreate(source, UriKind.Absolute, out var uriResult) && new[] {Uri.UriSchemeHttps, Uri.UriSchemeHttp}.Contains(uriResult.Scheme); - public static int GetNthIndexOfChar(this string s, int n, char t) => - s.TakeWhile(c => (n -= c == t ? 1 : 0) > 0).Count(); + public static int GetNthIndexOfChar(this string s, int n, char t) + { + if (n < 1) + throw new ArgumentOutOfRangeException(); + var nthIndexOfChar = s.TakeWhile(c => (n -= c == t ? 1 : 0) > 0).Count(); + return nthIndexOfChar == s.Length ? -1 : nthIndexOfChar; + } } } \ No newline at end of file diff --git a/tests/FilterLists.Services.Tests/Extensions/Collection/AddIfNotNullOrEmptyShould.cs b/tests/FilterLists.Services.Tests/Extensions/Collection/AddIfNotNullOrEmptyShould.cs index 96917dd1d..bd7dcbff6 100644 --- a/tests/FilterLists.Services.Tests/Extensions/Collection/AddIfNotNullOrEmptyShould.cs +++ b/tests/FilterLists.Services.Tests/Extensions/Collection/AddIfNotNullOrEmptyShould.cs @@ -7,10 +7,7 @@ namespace FilterLists.Services.Tests.Extensions.Collection { public class AddIfNotNullOrEmptyShould { - public AddIfNotNullOrEmptyShould() => - sut = new Collection(); - - private readonly ICollection sut; + private readonly ICollection sut = new Collection(); private string item; [Fact] diff --git a/tests/FilterLists.Services.Tests/Extensions/Collection/AddRangeShould.cs b/tests/FilterLists.Services.Tests/Extensions/Collection/AddRangeShould.cs index 15f8ca802..8bdf93db4 100644 --- a/tests/FilterLists.Services.Tests/Extensions/Collection/AddRangeShould.cs +++ b/tests/FilterLists.Services.Tests/Extensions/Collection/AddRangeShould.cs @@ -8,10 +8,7 @@ namespace FilterLists.Services.Tests.Extensions.Collection { public class AddRangeShould { - public AddRangeShould() => - sut = new Collection(); - - private readonly ICollection sut; + private readonly ICollection sut = new Collection(); private IEnumerable range; [Fact] diff --git a/tests/FilterLists.Services.Tests/Extensions/String/GetNthIndexOfCharShould.cs b/tests/FilterLists.Services.Tests/Extensions/String/GetNthIndexOfCharShould.cs new file mode 100644 index 000000000..051d9ed0f --- /dev/null +++ b/tests/FilterLists.Services.Tests/Extensions/String/GetNthIndexOfCharShould.cs @@ -0,0 +1,35 @@ +using System; +using FilterLists.Services.Extensions; +using Xunit; + +namespace FilterLists.Services.Tests.Extensions.String +{ + public class GetNthIndexOfCharShould + { + private const string Sut = "abcdeabcde"; + + [Theory] + [InlineData(1, 'a', 0)] + [InlineData(2, 'a', 5)] + public void ReturnNthIndexOfCharIfExists(int n, char c, int expectedIndex) + { + Assert.Equal(expectedIndex, Sut.GetNthIndexOfChar(n, c)); + } + + [Theory] + [InlineData(3, 'a')] + [InlineData(1, 'f')] + public void ReturnNegativeOneIfDoesNotExist(int n, char c) + { + Assert.Equal(-1, Sut.GetNthIndexOfChar(n, c)); + } + + [Theory] + [InlineData(0, 'a')] + [InlineData(-1, 'a')] + public void ThrowArgumentOutOfRangeExceptionIfInvalidN(int n, char c) + { + Assert.Throws(() => Sut.GetNthIndexOfChar(n, c)); + } + } +} \ No newline at end of file diff --git a/tests/FilterLists.Services.Tests/Extensions/String/IsValidHttpOrHttpsUrlShould.cs b/tests/FilterLists.Services.Tests/Extensions/String/IsValidHttpOrHttpsUrlShould.cs index ab932740c..55176e62f 100644 --- a/tests/FilterLists.Services.Tests/Extensions/String/IsValidHttpOrHttpsUrlShould.cs +++ b/tests/FilterLists.Services.Tests/Extensions/String/IsValidHttpOrHttpsUrlShould.cs @@ -5,11 +5,13 @@ namespace FilterLists.Services.Tests.Extensions.String { public class IsValidHttpOrHttpsUrlShould { - [Fact] - public void ReturnFalseIfNotHttpOrHttps() + [Theory] + [InlineData("abp://www.google.com")] + [InlineData("www.google.com")] + [InlineData("google")] + public void ReturnFalseIfNotHttpOrHttps(string url) { - const string abp = "abp://www.google.com"; - Assert.False(abp.IsValidHttpOrHttpsUrl()); + Assert.False(url.IsValidHttpOrHttpsUrl()); } [Fact]