/// <summary> /// Parse a year match expression. /// <example> /// Valid expression are: /// * => Every year /// 2020 => Exactly that year /// ..2030 => Every year until 2030 comprised /// 2020.. => Every year starting from 2020 /// 2020..2030 => Every year between 2020 and 2030 /// */Leap => Every leap year /// 2020..2030/Leap => Every leap year between 2020 and 2030 /// */NotLeap => Every non leap year /// 2020..2030/2 => Starting from 2020 every 2 years until 2030 /// 2020../2 => Starting from 2020 every 2 years /// 2020../NotLeap => Starting from 2020 every NonLeap year /// 2020..2030%2 => Every year which reminder modulo 2 is zero between 2020 and 2030 /// 2020..%3 => Starting from 2020 every year which reminder modulo 3 is zero /// </example> /// </summary> public override bool TryParse(string value, out IYearMatcher yearMatcher) { if (RangeYearMatcher.TryParse(value, out var rangeYearMatcher)) { yearMatcher = rangeYearMatcher; return(true); } if (PeriodicYearMatcher.TryParse(value, out var periodYearMatcher)) { yearMatcher = periodYearMatcher; return(true); } if (ModuloYearMatcher.TryParse(value, out var moduloYearMatcher)) { yearMatcher = moduloYearMatcher; return(true); } if (LeapYearMatcher.TryParse(value, out var leapYearMatcher)) { yearMatcher = leapYearMatcher; return(true); } if (NotLeapYearMatcher.TryParse(value, out var notLeapYearMatcher)) { yearMatcher = notLeapYearMatcher; return(true); } yearMatcher = default; return(false); }
public void CtorTests() { var obj = new RangeYearMatcher(null, null); Assert.IsNotNull(obj, "Any year"); Assert.IsNull(obj.Left); Assert.IsNull(obj.Right); obj = new RangeYearMatcher(2000, null); Assert.IsNotNull(obj, "Any year greater than or equal"); Assert.AreEqual(2000, obj.Left.Value); Assert.IsNull(obj.Right); obj = new RangeYearMatcher(null, 2000); Assert.IsNotNull(obj, "Any year less than or equal"); Assert.IsNull(obj.Left); Assert.AreEqual(2000, obj.Right.Value); obj = new RangeYearMatcher(2000, 2000); Assert.IsNotNull(obj, "Exact year"); Assert.AreEqual(2000, obj.Left.Value); Assert.AreEqual(2000, obj.Right.Value); obj = new RangeYearMatcher(2000, 3000); Assert.IsNotNull(obj, "Finite range"); Assert.AreEqual(2000, obj.Left.Value); Assert.AreEqual(3000, obj.Right.Value); Assert.ThrowsException <ArgumentOutOfRangeException>(() => new RangeYearMatcher(-100, null), "Non negative first year"); Assert.ThrowsException <ArgumentOutOfRangeException>(() => new RangeYearMatcher(null, -100), "Non negative last year"); Assert.ThrowsException <ArgumentOutOfRangeException>(() => new RangeYearMatcher(3000, 2000), "Invalid range"); }
public void TryParseTests() { // Testing object factory Assert.IsTrue(RangeYearMatcher.TryParse("1..4", out var obj)); Assert.IsNotNull(obj); Assert.AreEqual(1, obj.Left); Assert.AreEqual(4, obj.Right); Assert.IsTrue(RangeYearMatcher.TryParse("*", out obj)); Assert.IsNotNull(obj); Assert.IsNull(obj.Left); Assert.IsNull(obj.Right); }
public void MatchTests() { var dt1000 = new DateTime(1000, 1, 1); var dt2000 = new DateTime(2000, 1, 1); var dt2010 = new DateTime(2010, 1, 1); var dt3000 = new DateTime(3000, 1, 1); var dt9000 = new DateTime(9000, 1, 1); var obj = new RangeYearMatcher(null, null); Assert.IsTrue(obj.Match(dt1000)); Assert.IsTrue(obj.Match(dt2000)); Assert.IsTrue(obj.Match(dt2010)); Assert.IsTrue(obj.Match(dt3000)); Assert.IsTrue(obj.Match(dt9000)); obj = new RangeYearMatcher(2000, null); Assert.IsFalse(obj.Match(dt1000)); Assert.IsTrue(obj.Match(dt2000)); Assert.IsTrue(obj.Match(dt2010)); Assert.IsTrue(obj.Match(dt3000)); Assert.IsTrue(obj.Match(dt9000)); obj = new RangeYearMatcher(null, 2000); Assert.IsTrue(obj.Match(dt1000)); Assert.IsTrue(obj.Match(dt2000)); Assert.IsFalse(obj.Match(dt2010)); Assert.IsFalse(obj.Match(dt3000)); Assert.IsFalse(obj.Match(dt9000)); obj = new RangeYearMatcher(2000, 2000); Assert.IsFalse(obj.Match(dt1000)); Assert.IsTrue(obj.Match(dt2000)); Assert.IsFalse(obj.Match(dt2010)); Assert.IsFalse(obj.Match(dt3000)); Assert.IsFalse(obj.Match(dt9000)); obj = new RangeYearMatcher(2000, 3000); Assert.IsFalse(obj.Match(dt1000)); Assert.IsTrue(obj.Match(dt2000)); Assert.IsTrue(obj.Match(dt2010)); Assert.IsTrue(obj.Match(dt3000)); Assert.IsFalse(obj.Match(dt9000)); }
public void OpenRangeCheckTests() { var obj = new RangeYearMatcher(null, null); Assert.IsTrue(obj.IsLeftOpenRange); Assert.IsTrue(obj.IsRightOpenRange); Assert.IsTrue(obj.IsOpenRange); Assert.IsTrue(obj.IsLeftRightOpenRange); Assert.IsFalse(obj.IsClosedRange); Assert.IsFalse(obj.IsOneYear); obj = new RangeYearMatcher(2000, null); Assert.IsFalse(obj.IsLeftOpenRange); Assert.IsTrue(obj.IsRightOpenRange); Assert.IsTrue(obj.IsOpenRange); Assert.IsFalse(obj.IsLeftRightOpenRange); Assert.IsFalse(obj.IsClosedRange); Assert.IsFalse(obj.IsOneYear); obj = new RangeYearMatcher(null, 2000); Assert.IsTrue(obj.IsLeftOpenRange); Assert.IsFalse(obj.IsRightOpenRange); Assert.IsTrue(obj.IsOpenRange); Assert.IsFalse(obj.IsLeftRightOpenRange); Assert.IsFalse(obj.IsClosedRange); Assert.IsFalse(obj.IsOneYear); obj = new RangeYearMatcher(2000, 2000); Assert.IsFalse(obj.IsLeftOpenRange); Assert.IsFalse(obj.IsRightOpenRange); Assert.IsFalse(obj.IsOpenRange); Assert.IsFalse(obj.IsLeftRightOpenRange); Assert.IsTrue(obj.IsClosedRange); Assert.IsTrue(obj.IsOneYear); obj = new RangeYearMatcher(2000, 3000); Assert.IsFalse(obj.IsLeftOpenRange); Assert.IsFalse(obj.IsRightOpenRange); Assert.IsFalse(obj.IsOpenRange); Assert.IsFalse(obj.IsLeftRightOpenRange); Assert.IsTrue(obj.IsClosedRange); Assert.IsFalse(obj.IsOneYear); }