public void TestEqualsMethodLargeSwapped() { IRRuleTokenContainer firstPart = tokenizer.Tokenize("BYSETPOS=1;FREQ=DAILY;INTERVAL=1;BYMONTHDAY=1"); IRRuleTokenContainer secondPart = tokenizer.Tokenize("INTERVAL=1;BYMONTHDAY=1;FREQ=DAILY;BYSETPOS=1"); Assert.AreEqual(firstPart, secondPart); }
public void TestEqualsMethodDifferentValues() { IRRuleTokenContainer firstPart = tokenizer.Tokenize("BYSETPOS=1;FREQ=WEEKLY;INTERVAL=1;BYMONTHDAY=1"); IRRuleTokenContainer secondPart = tokenizer.Tokenize("INTERVAL=1;BYMONTHDAY=1;FREQ=YEARLY;BYSETPOS=1"); Assert.AreNotEqual(firstPart, secondPart); }
public void TestEqualsMethodComplex() { IRRuleTokenContainer firstPart = tokenizer.Tokenize("FREQ=DAILY;INTERVAL=1"); IRRuleTokenContainer secondPart = tokenizer.Tokenize("INTERVAL=1;FREQ=DAILY;BYSETPOS=1"); Assert.AreNotEqual(firstPart, secondPart); }
public void TestEqualsMethodSwapped() { IRRuleTokenContainer firstPart = tokenizer.Tokenize("FREQ=DAILY;INTERVAL=1"); IRRuleTokenContainer secondPart = tokenizer.Tokenize("INTERVAL=1;FREQ=DAILY"); Assert.AreEqual(firstPart, secondPart); }
private void EnsureSingleExistenceUntilCount(IRRuleTokenContainer tokenContainer) { if (tokenContainer.GetUntil() != null && tokenContainer.GetCount() != null) { throw new RRuleValidationException("RRule part 'UNTIL' and 'COUNT' are present at the same time"); } }
private void EnsureFreqExistence(IRRuleTokenContainer tokenContainer) { if (tokenContainer.GetFreq() == null) { throw new RRuleValidationException("Required rrule part 'FREQ' is not present"); } }
public string BuildText(IRRuleTokenContainer tokenContainer) { var resultString = BuildFrequency(tokenContainer); var freqValue = (FreqToken.FreqValue)tokenContainer.GetFreq().GetValue(); if (freqValue == FreqToken.FreqValue.WEEKLY) { resultString += " " + BuildWeeklyDays(tokenContainer); } else if (freqValue == FreqToken.FreqValue.MONTHLY && tokenContainer.GetByMontDay() != null) { resultString += " " + BuildMonthlyOnDay(tokenContainer); } else if (freqValue == FreqToken.FreqValue.MONTHLY && tokenContainer.GetBySetPos() != null && tokenContainer.GetByDay() != null) { resultString += " " + BuildMonthlyOnNumberedDay(tokenContainer); } else if (freqValue == FreqToken.FreqValue.YEARLY && tokenContainer.GetByMonth() != null && tokenContainer.GetByMontDay() != null) { resultString += " " + BuildYearlyOnDay(tokenContainer); } else if (freqValue == FreqToken.FreqValue.YEARLY && tokenContainer.GetByDay() != null && tokenContainer.GetBySetPos() != null && tokenContainer.GetByMonth() != null) { resultString += " " + BuildYearlyOnNumbered(tokenContainer); } if (tokenContainer.GetStart() != null) { var ending = _buildStartDate(tokenContainer); if (ending != null) { resultString += ", " + ending; } } // Endings if (tokenContainer.GetUntil() != null) { var ending = _buildUntilDateEnding(tokenContainer); if (ending != null) { resultString += ", " + ending; } } else if (tokenContainer.GetCount() != null) { var ending = BuildCountEnding(tokenContainer); if (ending != null) { resultString += ", " + ending; } } return(CapitalizeFirstLetter(resultString.Trim())); }
public void TestByDay() { IRRuleTokenContainer tokenContainer = tokenizer.Tokenize("FREQ=DAILY;BYDAY=MO,TU,WE,SA"); Assert.AreEqual(2, tokenContainer.RuleCount()); Assert.NotNull(tokenContainer.GetByDay()); Assert.AreEqual(4, ((ByDayToken.DayList)tokenContainer.GetByDay().GetValue()).GetDayList().Count); }
public void TestBySetPos() { IRRuleTokenContainer tokenContainer = tokenizer.Tokenize("FREQ=DAILY;BYSETPOS=10"); Assert.AreEqual(2, tokenContainer.RuleCount()); Assert.NotNull(tokenContainer.GetBySetPos()); Assert.AreEqual(10, (int)tokenContainer.GetBySetPos().GetValue()); }
public void TestByMonth() { IRRuleTokenContainer tokenContainer = tokenizer.Tokenize("FREQ=DAILY;BYMONTH=12"); Assert.AreEqual(2, tokenContainer.RuleCount()); Assert.NotNull(tokenContainer.GetByMonth()); Assert.AreEqual(12, tokenContainer.GetByMonth().GetValue()); }
public void TestInterval() { IRRuleTokenContainer tokenContainer = tokenizer.Tokenize("FREQ=DAILY;INTERVAL=1"); Assert.AreEqual(2, tokenContainer.RuleCount()); Assert.NotNull(tokenContainer.GetInterval()); Assert.AreEqual(1, (int)tokenContainer.GetInterval().GetValue()); }
public void TestFreq() { IRRuleTokenContainer tokenContainer = tokenizer.Tokenize("FREQ=DAILY"); Assert.AreEqual(1, tokenContainer.RuleCount()); Assert.NotNull(tokenContainer.GetFreq()); Assert.AreEqual(FreqToken.FreqValue.DAILY, tokenContainer.GetFreq().GetValue()); }
public void testByMonthDay() { IRRuleTokenContainer tokenContainer = tokenizer.Tokenize("FREQ=DAILY;BYMONTHDAY=2"); Assert.AreEqual(2, tokenContainer.RuleCount()); Assert.NotNull(tokenContainer.GetByMontDay()); Assert.AreEqual(2, (int)tokenContainer.GetByMontDay().GetValue()); }
public void TestUntil() { IRRuleTokenContainer tokenContainer = tokenizer.Tokenize("FREQ=DAILY;UNTIL=20181023T220000Z"); Assert.AreEqual(2, tokenContainer.RuleCount()); Assert.NotNull(tokenContainer.GetUntil()); Assert.AreEqual(new DateTime(2018, 10, 23, 22, 0, 0), ((ValueWrapper)tokenContainer.GetUntil().GetValue()).getLocalDateTime()); }
/* ---- MONTHLY ---- */ private string BuildMonthlyOnDay(IRRuleTokenContainer tokenContainer) { var byMonthDay = tokenContainer.GetByMontDay(); if (byMonthDay == null) { return(""); } return(_fragmentTranslator.GetTranslatedFragment(ETranslationFragment.ON) + " " + _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.DAY) + " " + byMonthDay.GetValue()); }
public void TestMergeDoNotOverride() { IRRuleTokenContainer firstPart = tokenizer.Tokenize("FREQ=WEEKLY;INTERVAL=1"); IRRuleTokenContainer secondPart = tokenizer.Tokenize("FREQ=YEARLY;INTERVAL=1;BYMONTHDAY=1;BYSETPOS=1"); // Merge secondPart into firstPart firstPart.Merge(secondPart); Assert.NotNull(firstPart.GetFreq()); Assert.AreNotEqual(secondPart.GetFreq(), firstPart.GetFreq()); Assert.AreNotEqual(secondPart.GetInterval(), firstPart.GetInterval()); }
public void TestComplex() { IRRuleTokenContainer tokenContainer = tokenizer.Tokenize("FREQ=YEARLY;BYDAY=TU;BYSETPOS=1;BYMONTH=4;UNTIL=20181023T220000Z"); Assert.AreEqual(5, tokenContainer.RuleCount()); Assert.NotNull(tokenContainer.GetFreq()); Assert.NotNull(tokenContainer.GetByDay()); Assert.NotNull(tokenContainer.GetBySetPos()); Assert.NotNull(tokenContainer.GetByMonth()); Assert.NotNull(tokenContainer.GetUntil()); Assert.AreEqual(FreqToken.FreqValue.YEARLY, tokenContainer.GetFreq().GetValue()); }
private string _buildStartDate(IRRuleTokenContainer pTokenContainer) { var startToken = pTokenContainer.GetStart(); if (startToken == null) { return(null); } string result = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.DTSTART); result += $" {_dateFormatting.FormatFullDate(((ValueWrapper)startToken.GetValue()).getLocalDateTime())}"; return(result); }
public void TestToStringMethod( [Values( "FREQ=WEEKLY;BYDAY=MO,TU", "FREQ=YEARLY;BYMONTHDAY=1", "FREQ=YEARLY;BYSETPOS=1", "FREQ=YEARLY;COUNT=1", "FREQ=YEARLY;INTERVAL=1", "FREQ=YEARLY;UNTIL=20181023T220000Z")] string input) { IRRuleTokenContainer container = tokenizer.Tokenize(input); Assert.AreEqual(input, container.ToString()); }
/* ---- ENDINGS ---- */ private string _buildUntilDateEnding(IRRuleTokenContainer pTokenContainer) { var untilToken = pTokenContainer.GetUntil(); if (untilToken == null) { return(null); } string result = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.UNTIL); result += $" {_dateFormatting.FormatFullDate(((ValueWrapper)untilToken.GetValue()).getLocalDateTime())}"; return(result); }
/* ---- WEEKLY ---- */ private string BuildWeeklyDays(IRRuleTokenContainer tokenContainer) { var byDay = tokenContainer.GetByDay(); if (byDay == null) { return(""); } var result = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.ON) + " "; result += _dayListingFormatting.FormatDayListing(((ByDayToken.DayList)byDay.GetValue()).GetDayList().ToList()); return(result); }
private string BuildCountEnding(IRRuleTokenContainer pTokenContainer) { var countToken = pTokenContainer.GetCount(); if (countToken == null) { return(null); } if (((int)countToken.GetValue()) == 1) { return(null); } return($"{countToken.GetValue()} {_fragmentTranslator.GetTranslatedFragment(ETranslationFragment.TIMES)}"); }
/* ---- YEARLY ---- */ private string BuildYearlyOnDay(IRRuleTokenContainer tokenContainer) { var byMonthToken = tokenContainer.GetByMonth(); var byMonthDayToken = tokenContainer.GetByMontDay(); if (byMonthDayToken == null || byMonthToken == null) { return(""); } var result = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.ON); result += " " + _dateFormatting.FormatMonthDay(new DateTime(DateTime.Now.Year, (int)byMonthToken.GetValue(), (int)byMonthDayToken.GetValue())); return(result); }
public void TestMergeSimple() { IRRuleTokenContainer firstPart = tokenizer.Tokenize("FREQ=WEEKLY;INTERVAL=1"); IRRuleTokenContainer secondPart = tokenizer.Tokenize("FREQ=YEARLY;INTERVAL=1;BYMONTHDAY=1;BYSETPOS=1"); // Merge secondPart into firstPart firstPart.Merge(secondPart); Assert.NotNull(firstPart.GetFreq()); Assert.NotNull(firstPart.GetByMontDay()); Assert.NotNull(firstPart.GetBySetPos()); Assert.NotNull(firstPart.GetByMontDay()); Assert.AreEqual(secondPart.GetByMontDay(), firstPart.GetByMontDay()); Assert.AreEqual(secondPart.GetBySetPos(), firstPart.GetBySetPos()); }
private string BuildMonthlyOnNumberedDay(IRRuleTokenContainer tokenContainer) { var byDayToken = tokenContainer.GetByDay(); var bySetPosToken = tokenContainer.GetBySetPos(); if (byDayToken == null || bySetPosToken == null) { return(""); } var result = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.ON); result += " " + TranslateSetPosNumber((int)bySetPosToken.GetValue()); result += " " + _dateFormatting.FormatDay(((ByDayToken.DayList)byDayToken.GetValue()).GetDayList()[0]); return(result); }
public void Merge(IRRuleTokenContainer tokenContainer) { if (tokenContainer.GetFreq() != null && GetFreq() == null) { AddOrUpdateToken(tokenContainer.GetFreq()); } if (tokenContainer.GetUntil() != null && GetUntil() == null) { AddOrUpdateToken(tokenContainer.GetUntil()); } if (tokenContainer.GetCount() != null && GetCount() == null) { AddOrUpdateToken(tokenContainer.GetCount()); } if (tokenContainer.GetInterval() != null && GetInterval() == null) { AddOrUpdateToken(tokenContainer.GetInterval()); } if (tokenContainer.GetByDay() != null && GetByDay() == null) { AddOrUpdateToken(tokenContainer.GetByDay()); } if (tokenContainer.GetByMontDay() != null && GetByMontDay() == null) { AddOrUpdateToken(tokenContainer.GetByMontDay()); } if (tokenContainer.GetByMonth() != null && GetByMonth() == null) { AddOrUpdateToken(tokenContainer.GetByMonth()); } if (tokenContainer.GetBySetPos() != null && GetBySetPos() == null) { AddOrUpdateToken(tokenContainer.GetBySetPos()); } }
private string BuildText(IRRuleTokenContainer tokenContainer) { return(_textBuilder.BuildText(tokenContainer)); }
public void TestCases( [Values( "FREQ=DAILY;INTERVAL=5", "FREQ=WEEKLY;INTERVAL=5", "FREQ=MONTHLY;INTERVAL=5", "FREQ=YEARLY;INTERVAL=5", "FREQ=DAILY;INTERVAL=1", "FREQ=WEEKLY;INTERVAL=1", "FREQ=MONTHLY;INTERVAL=1", "FREQ=YEARLY;INTERVAL=1", "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU", "FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,TU", "FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,TU,WE,SA", "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=5", "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=15", "FREQ=MONTHLY;INTERVAL=2;BYMONTHDAY=15", "FREQ=MONTHLY;INTERVAL=2;BYDAY=MO;BYSETPOS=-1", "FREQ=MONTHLY;INTERVAL=2;BYDAY=MO;BYSETPOS=1", "FREQ=MONTHLY;INTERVAL=2;BYDAY=SA;BYSETPOS=3", "FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=1", "FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=5", "FREQ=YEARLY;BYDAY=SU;BYSETPOS=1;BYMONTH=1", "FREQ=YEARLY;BYDAY=WE;BYSETPOS=-1;BYMONTH=4", "FREQ=DAILY;INTERVAL=1;COUNT=2", "FREQ=WEEKLY;INTERVAL=1;COUNT=1", "FREQ=MONTHLY;INTERVAL=1;UNTIL=20181023T220000Z" )] string rrule, [Values( "Every 5 days", "Every 5 weeks", "Every 5 months", "Every 5 years", "Daily", "Weekly", "Monthly", "Annually", "Weekly on Monday, Tuesday", "Every 2 weeks on Monday, Tuesday", "Every 2 weeks on Mon, Tue, Wed, Sat", "Monthly on day 5", "Monthly on day 15", "Every 2 months on day 15", "Every 2 months on last Monday", "Every 2 months on first Monday", "Every 2 months on third Saturday", "Annually on January 1", "Annually on April 5", "Annually on first Sunday of January", "Annually on last Wednesday of April", "Daily, 2 times", "Weekly", "Monthly, until Tuesday, October 23, 2018" )] string expectedResult) { IRRuleTokenContainer tokenContainer = tokenizer.Tokenize(rrule); Assert.AreEqual(expectedResult, textBuilder.BuildText(tokenContainer)); }
public void ValidateRRuleParts(IRRuleTokenContainer tokenContainer) { EnsureFreqExistence(tokenContainer); EnsureSingleExistenceUntilCount(tokenContainer); }
/* ---- FREQUENCY ---- */ private string BuildFrequency(IRRuleTokenContainer tokenContainer) { var freqValue = (FreqToken.FreqValue)tokenContainer.GetFreq().GetValue(); int interval = 1; if (tokenContainer.GetInterval() != null) { interval = (int)tokenContainer.GetInterval().GetValue(); } string value = null; if (interval == 1) { switch (freqValue) { case FreqToken.FreqValue.DAILY: value = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.DAILY); break; case FreqToken.FreqValue.WEEKLY: value = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.WEEKLY); break; case FreqToken.FreqValue.MONTHLY: value = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.MONTHLY); break; case FreqToken.FreqValue.YEARLY: value = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.YEARLY); break; } } else { value = _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.EVERY) + " " + interval + " "; switch (freqValue) { case FreqToken.FreqValue.DAILY: value += _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.DAYS); break; case FreqToken.FreqValue.WEEKLY: value += _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.WEEKS); break; case FreqToken.FreqValue.MONTHLY: value += _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.MONTHS); break; case FreqToken.FreqValue.YEARLY: value += _fragmentTranslator.GetTranslatedFragment(ETranslationFragment.YEARS); break; } } if (value == null) { return(""); } return(value); }