reactredux/webapi/Tests/Extensions/StringExtensionsTests.cs

256 lines
7.6 KiB
C#

using System;
using System.Text;
using System.Linq;
using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.DependencyInjection;
using Xunit;
using ExtensionMethods;
using ExtensionsTests.Abstractions;
using System.IO;
using System.Threading.Tasks;
namespace ExtensionsTests {
public class StringExtensions : ServicesBase {
private readonly Configuration _configuration;
public StringExtensions() {
_configuration = ServiceProvider.GetService<IOptions<Configuration>>()?.Value
?? throw new NullReferenceException("Configuration not found");
}
[Fact]
public void Like() => "http://maks-it.com".Like("https:?//maks*.com");
[Fact]
public void Left() => string.Equals("https://maks-it.com".Left(4), "http");
[Fact]
public void Right() => string.Equals("https://maks-it.com".Right(4), ".com");
[Fact]
public void Mid() => string.Equals("https://maks-it.com".Mid(8, 7), "maks-it");
[Fact]
public void ToInteger() {
var value = "0".ToInteger();
Assert.True(value.GetType() == typeof(int) && value == 0);
}
[Fact]
public void IsInteger() {
Assert.True("123".IsInteger() && !"abc123".IsInteger());
}
[Fact]
public void Prepend() {
var sb = new StringBuilder("123").Prepend("abc");
Assert.Equal("abc123", sb.ToString());
}
private enum DummyEnum {
[Display(Name = "First member")]
Member1,
[Display(Name = "Second member")]
Member2
}
[Fact]
public void ToEnum() {
Assert.True(DummyEnum.Member1 == "First member".ToEnum<DummyEnum>() && DummyEnum.Member2 == "Member2".ToEnum<DummyEnum>());
}
[Fact]
public void ToNullableEnum() => Assert.True(null == "".ToNullableEnum<DummyEnum>() || DummyEnum.Member1 == "Member1".ToNullableEnum<DummyEnum>());
[Fact]
public void ToNull() => Assert.True(null == "".ToNull() && string.Equals("test", "test".ToNull()));
[Fact]
public void ToLong() {
var value = "0".ToLong();
Assert.True(value.GetType() == typeof(long) && value == 0);
}
[Fact]
public void ToNullableLong() {
var value = "0".ToNullableLong();
Assert.True(value == 0 && value.GetType() == typeof(long) && "".ToNullableLong() == null);
}
[Fact]
public void ToInt() {
var value = "0".ToInt();
Assert.True(value.GetType() == typeof(int) && value == 0);
}
[Fact]
public void ToNullableInt() {
var value = "0".ToNullableInt();
Assert.True(value.GetType() == typeof(int) && value == 0 && "".ToNullableInt() == null);
}
[Fact]
public void ToUint() {
var value = "0".ToUint();
Assert.True(value.GetType() == typeof(uint) && value == 0);
}
[Fact]
public void ToNullableUint() {
var value = "0".ToNullableUint();
Assert.True(value.GetType() == typeof(uint) && value == 0 && "".ToNullableUint() == null);
}
[Fact]
public void ToDecimal() {
var value = "0".ToDecimal();
Assert.True(value.GetType() == typeof(decimal) && value == 0);
}
[Fact]
public void ToNullableDecimal() {
var value = "0".ToNullableDecimal();
Assert.True(value.GetType() == typeof(decimal) && "".ToNullableDecimal() == null);
}
[Fact]
public void ToDouble() {
var value = "0".ToDouble();
Assert.True(value.GetType() == typeof(double) && value == 0);
}
[Fact]
public void ToNullableDouble() {
var value = "0".ToNullableDouble();
Assert.True(value.GetType() == typeof(double) && value == 0 && "".ToNullableDouble() == null);
}
[Fact]
public void ToDate() {
var value = "05/08/1988".ToDate();
Assert.True(value.GetType() == typeof(DateTime) && value == new DateTime(1988, 08, 05));
}
[Fact]
public void ToNullableDate() {
var value = "05/08/1988".ToDate();
Assert.True(value.GetType() == typeof(DateTime) && value == new DateTime(1988, 08, 05) && "".ToNullableDate() == null);
}
[Fact]
public void ToDateTime() {
var value = "05/08/1988 00:30:00".ToDateTime();
Assert.True(value.GetType() == typeof(DateTime) && value == new DateTime(1988, 08, 05, 00, 30, 00));
}
[Fact]
public void ToNullableDateTime() {
var value = "05/08/1988 00:30:00".ToDateTime();
Assert.True(value.GetType() == typeof(DateTime) && value == new DateTime(1988, 08, 05, 00, 30, 00) && "".ToNullableDateTime() == null);
}
[Fact]
public void ToBool() {
Assert.True("true".ToBool() && !"false".ToBool());
}
[Fact]
public void ToNullalbeBool() {
Assert.True("true".ToNullableBool().Value && !"false".ToNullableBool().Value && "".ToNullableBool() == null);
}
[Fact]
public void ToGuid() {
var value = "7a11f6ed-d1b6-4d38-9f66-738762c4fde6".ToGuid();
Assert.True(value.GetType() == typeof(Guid));
}
[Fact]
public void ToNullableGuid() => Assert.Null("".ToNullableGuid());
[Fact]
public void StringSplit() => Assert.True(new string[] { "hello", "world" }.SequenceEqual("hello, world".StringSplit(',')));
[Fact]
public void ToTitle() => Assert.Equal("Maks-IT", "maks-IT".ToTitle());
[Fact]
public void ExtractUrls() => Assert.True(new string[] { "https://maks-it.com/123", "https://git.maks-it.com/123" }
.SequenceEqual(
"Here are some urls that we have to extract! This one: https://maks-it.com/123 and this one too https://git.maks-it.com/123"
.ExtractUrls().Select(x => x.AbsoluteUri.ToString()
)));
[Fact]
public void Format() => Assert.Equal("MAKS-IT is a consulting company", "{0} is a consulting company".Format("MAKS-IT"));
[Fact]
public void Excerpt() => Assert.Equal("M...", "MAKS-IT".Excerpt(4));
private class DummyClass {
public string Test { get; set; }
}
[Fact]
public void ToObject() {
var obj = "{ \"Test\": \"Test\" }".ToObject<DummyClass>();
Assert.Equal("Test", obj.Test);
}
public static IEnumerable<object[]> GetEmailValidationData() {
var allData = new List<object[]> {
new object [] { "BAR.SPORT.SAS.@LEGALMAIL.IT", false },
new object [] { "DANICONFCOM@PEC..IT", false },
new object [] { "FRANCESCOF..90@PEC.IT", false },
new object [] { "grecoornellas.a.s.@pec.it", false },
new object [] { "lavillamar.@pec.libero.it", false },
new object [] { "podda.pietro.@tiscali.it", false },
new object [] { "scads.r.l.@legalmail.it", false },
new object [] { "ALESSANDRO.DOTTI@ARCHIWORLDPEC.IT", true },
new object [] { "alessandro.durante@mastertrucksrl.it", true },
new object [] { "alessandro.elia@pec.lottomatica.it", true },
new object [] { "ALESSANDRO.EMILIANI@PEC.IT", true },
new object [] { "alessandro.falco@pec.lottomatica.it", true },
new object [] { "ALESSANDRO.FANNI@PEC.IT", true },
new object [] { "ALESSANDRO.FASULO@PEC.IT", true }
};
return allData;
}
[Theory]
[MemberData(nameof(GetEmailValidationData))]
public void IsValidEmail(string email, bool expected) {
var result = email.IsValidEmail();
Assert.Equal(expected, result);
}
[Fact]
public void HTMLToPlainText() {
var html = @"<Grid>
<RichTextBox>
<FlowDocument>
<p name=""p1"">Hello</p>
<p name=""p2"">World!</p>
</FlowDocument>
</RichTextBox>
</Grid>";
var result = html.HTMLToPlainText();
var expected = "Hello \nWorld!";
Assert.True(string.Compare(expected, result) == 0);
}
}
}