Files
Common-VS2019/SacsCoreUnitTests/Standard/Base/Utils/StringUtil_Tester.cs
T
2026-09-14 18:31:46 +01:00

220 lines
8.4 KiB
C#

using System;
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Sarand.Net.Standard.Base.Utils;
namespace Sarand.UnitTests.Core.Base.Utils
{
[TestClass]
public class StringUtil_Tester
{
// --- Data Members ---
private Random random = new Random();
// --- Empty and Blank Values ---
[TestMethod]
public void StringUtil_IsEmpty()
{
// Leading spaces.
Assert.AreEqual(true, StringUtil.IsEmpty(null));
Assert.AreEqual(true, StringUtil.IsEmpty(""));
Assert.AreEqual(false, StringUtil.IsEmpty(" "));
Assert.AreEqual(false, StringUtil.IsEmpty("A"));
Assert.AreEqual(false, StringUtil.IsEmpty("Abc"));
Assert.AreEqual(true, "".IsEmpty());
Assert.AreEqual(false, "Abc".IsEmpty());
}
[TestMethod]
public void StringUtil_IsBlank()
{
// Leading spaces.
Assert.AreEqual(true, StringUtil.IsBlank(null));
Assert.AreEqual(true, StringUtil.IsBlank(""));
Assert.AreEqual(true, StringUtil.IsBlank(" "));
Assert.AreEqual(true, StringUtil.IsBlank(" "));
Assert.AreEqual(true, StringUtil.IsBlank(" \n\t "));
Assert.AreEqual(false, StringUtil.IsBlank("A"));
Assert.AreEqual(false, StringUtil.IsBlank("Abc"));
Assert.AreEqual(true, "".IsBlank());
Assert.AreEqual(true, " ".IsBlank());
Assert.AreEqual(false, "Abc".IsBlank());
}
// --- Regular Expression Matching ---
[TestMethod]
public void StringUtil_IsMatch()
{
// IsMatch.
Assert.AreEqual(true, "ABCDEF".IsMatch("ABCDEF"));
Assert.AreEqual(true, "ABCDEF".IsMatch("^ABCDEF$"));
Assert.AreEqual(true, "ABCDEF".IsMatchCI("AbCdEf"));
Assert.AreEqual(true, "ABCDEF".IsMatchCI("^AbCdEf$"));
Assert.AreEqual(true, "ABCDEF".IsMatch("^ABC"));
Assert.AreEqual(true, "ABCDEF".IsMatchCI("AbC"));
Assert.AreEqual(true, "ABCDEF".IsMatch("CDE"));
Assert.AreEqual(true, "ABCDEF".IsMatchCI("cDe"));
Assert.AreEqual(true, "ABCDEF".IsMatch("CDE", System.Text.RegularExpressions.RegexOptions.None));
Assert.AreEqual(true, "ABCDEF".IsMatch(new Regex("CDE", System.Text.RegularExpressions.RegexOptions.None)));
Assert.AreEqual(true, "ABCDEF".IsMatch(new Regex("cDe", System.Text.RegularExpressions.RegexOptions.IgnoreCase)));
// IsMatch with escaped content.
Assert.AreEqual(true, "ABC\\sDEF".IsMatch("\\\\s"));
Assert.AreEqual(true, "AB(CD)EF".IsMatch("(..)"));
Assert.AreEqual(true, "AB(CD)EF".IsMatch("\\(CD\\)"));
// Not match.
Assert.AreEqual(false, "ABCDEF".IsMatch("cDe"));
Assert.AreEqual(false, "ABCDEF".IsMatchCI("eFg"));
Assert.AreEqual(false, "ABCDEF".IsMatch("cDe", System.Text.RegularExpressions.RegexOptions.None));
Assert.AreEqual(false, "ABCDEF".IsMatch(new Regex("cDe", System.Text.RegularExpressions.RegexOptions.None)));
}
[TestMethod]
public void StringUtil_Match()
{
// Match.
Assert.AreEqual("CDE", "ABCDEF".GetMatch("CDE"));
Assert.AreEqual("CDE", "ABCDEF".GetMatchCI("cDe"));
Assert.AreEqual("CDE", "ABCDEF".Match("CDE", System.Text.RegularExpressions.RegexOptions.None).Value);
Assert.AreEqual("CDE", "ABCDEF".Match(new Regex("CDE", System.Text.RegularExpressions.RegexOptions.None)).Value);
Assert.AreEqual("CDE", "ABCDEF".Match(new Regex("cDe", System.Text.RegularExpressions.RegexOptions.IgnoreCase)).Value);
// Match with escaped content.
Assert.AreEqual(" ", "ABC DEF".GetMatch("\\s"));
Assert.AreEqual("\\s", "ABC\\sDEF".GetMatch("\\\\s"));
Assert.AreEqual("AB", "AB(CD)EF".GetMatch("(..)"));
Assert.AreEqual("(CD)", "AB(CD)EF".GetMatch("\\(..\\)"));
Assert.AreEqual("(CD)", "AB(CD)EF".GetMatch("\\(CD\\)"));
// Not match.
Assert.AreEqual(null, "ABCDEF".GetMatch("cDe"));
Assert.AreEqual(null, "ABCDEF".GetMatch("eFg"));
Assert.AreEqual("", "ABCDEF".Match("cDe", System.Text.RegularExpressions.RegexOptions.None).Value);
Assert.AreEqual("", "ABCDEF".Match(new Regex("cDe", System.Text.RegularExpressions.RegexOptions.None)).Value);
}
[TestMethod]
public void StringUtil_Matches()
{
// Match.
Assert.AreEqual(1, "ABCDEF".GetMatches("CDE").Count);
Assert.AreEqual(1, "ABCDEF".GetMatchesCI("cDe").Count);
Assert.AreEqual(1, "ABCDEF".Matches("CDE", System.Text.RegularExpressions.RegexOptions.None).Count);
Assert.AreEqual(1, "ABCDEF".Matches(new Regex("CDE", System.Text.RegularExpressions.RegexOptions.None)).Count);
Assert.AreEqual(1, "ABCDEF".Matches(new Regex("cDe", System.Text.RegularExpressions.RegexOptions.IgnoreCase)).Count);
// Match with escaped content.
Assert.AreEqual(1, "ABC DEF".GetMatchesCI("\\s").Count);
Assert.AreEqual(1, "ABC\\sDEF".GetMatchesCI("\\\\s").Count);
Assert.AreEqual(4, "AB(CD)EF".GetMatchesCI("(..)").Count);
Assert.AreEqual("D)", "AB(CD)EF".GetMatchesCI("(..)")[2]);
Assert.AreEqual(1, "AB(CD)EF".GetMatchesCI("\\(..\\)").Count);
Assert.AreEqual(1, "AB(CD)EF".GetMatchesCI("\\(CD\\)").Count);
// Not match.
Assert.AreEqual(0, "ABCDEF".GetMatches("cDe").Count);
Assert.AreEqual(0, "ABCDEF".GetMatches("eFg").Count);
Assert.AreEqual(0, "ABCDEF".Matches("cDe", System.Text.RegularExpressions.RegexOptions.None).Count);
Assert.AreEqual(0, "ABCDEF".Matches(new Regex("cDe", System.Text.RegularExpressions.RegexOptions.None)).Count);
}
[TestMethod]
public void StringUtil_MatchCount()
{
// Match.
Assert.AreEqual(1, "ABCDEF".GetMatchCount("CDE"));
Assert.AreEqual(1, "ABCDEF".MatchesCount(new Regex("CDE")));
Assert.AreEqual(2, "ABCDEFGHICDEJKL".GetMatchCount("CDE"));
Assert.AreEqual(2, "ABCDEFGHICDEJKL".MatchesCount(new Regex("CDE")));
}
// --- Padding ---
[TestMethod]
public void StringUtil_PadLeft()
{
// Leading spaces.
Assert.AreEqual(" ", "".PadLeft(3, ' '));
Assert.AreEqual(" A", "A".PadLeft(3, ' '));
Assert.AreEqual(" AB", "AB".PadLeft(3, ' '));
Assert.AreEqual("ABC", "ABC".PadLeft(3, ' '));
Assert.AreEqual("ABCD", "ABCD".PadLeft(3, ' '));
// Leading zeroes.
Assert.AreEqual("00", "".PadLeft(2, '0'));
Assert.AreEqual("01", "1".PadLeft(2, '0'));
Assert.AreEqual("123", "123".PadLeft(3, '0'));
Assert.AreEqual("0123", "123".PadLeft(4, '0'));
Assert.AreEqual("00123", "123".PadLeft(5, '0'));
}
[TestMethod]
public void StringUtil_PadRight()
{
// Leading spaces.
Assert.AreEqual(" ", "".PadRight(3, ' '));
Assert.AreEqual("A ", "A".PadRight(3, ' '));
Assert.AreEqual("AB ", "AB".PadRight(3, ' '));
Assert.AreEqual("ABC", "ABC".PadRight(3, ' '));
Assert.AreEqual("ABCD", "ABCD".PadRight(3, ' '));
// Trailing zeroes.
Assert.AreEqual("00", "".PadRight(2, '0'));
Assert.AreEqual("10", "1".PadRight(2, '0'));
Assert.AreEqual("12", "12".PadRight(2, '0'));
Assert.AreEqual("123", "123".PadRight(3, '0'));
Assert.AreEqual("1230", "123".PadRight(4, '0'));
Assert.AreEqual("12300", "123".PadRight(5, '0'));
}
// --- Safe Substrings ---
[TestMethod]
public void StringUtil_SubstringSafe()
{
Assert.AreEqual("", StringUtil.SubstringSafe(null, 0));
Assert.AreEqual("", StringUtil.SubstringSafe("", 0));
Assert.AreEqual("", "".SubstringSafe(0));
// Right portion from start position.
Assert.AreEqual("abc", "abc".SubstringSafe(-3));
Assert.AreEqual("abc", "abc".SubstringSafe(-2));
Assert.AreEqual("abc", "abc".SubstringSafe(-1));
Assert.AreEqual("abc", "abc".SubstringSafe(0));
Assert.AreEqual("bc", "abc".SubstringSafe(1));
Assert.AreEqual("c", "abc".SubstringSafe(2));
Assert.AreEqual("", "abc".SubstringSafe(3));
// Zero length.
Assert.AreEqual("", StringUtil.SubstringSafe(null, 0, 0));
Assert.AreEqual("", StringUtil.SubstringSafe("", 0, 0));
Assert.AreEqual("", "".SubstringSafe(0, 0));
Assert.AreEqual("", "abc".SubstringSafe(-1, 0));
Assert.AreEqual("", "abc".SubstringSafe(0, 0));
Assert.AreEqual("", "abc".SubstringSafe(1, 0));
Assert.AreEqual("", "abc".SubstringSafe(2, 0));
Assert.AreEqual("", "abc".SubstringSafe(3, 0));
Assert.AreEqual("", "abc".SubstringSafe(4, 0));
// Mid portion.
Assert.AreEqual("abc", "abcde".SubstringSafe(0, 3));
Assert.AreEqual("bcd", "abcde".SubstringSafe(1, 3));
Assert.AreEqual("cde", "abcde".SubstringSafe(2, 3));
// Excessive length.
Assert.AreEqual("abcde", "abcde".SubstringSafe(-1, 12));
Assert.AreEqual("abcde", "abcde".SubstringSafe(0, 12));
Assert.AreEqual("bcde", "abcde".SubstringSafe(1, 12));
Assert.AreEqual("cde", "abcde".SubstringSafe(2, 12));
Assert.AreEqual("de", "abcde".SubstringSafe(3, 12));
Assert.AreEqual("e", "abcde".SubstringSafe(4, 12));
Assert.AreEqual("", "abcde".SubstringSafe(5, 12));
}
// --- The End ---
}
}