# -*- coding: utf-8 -*- from __future__ import unicode_literals from ._common import WarningTestMixin, unittest import calendar from datetime import datetime, date from six import PY3 from dateutil.rrule import * class RRuleTest(WarningTestMixin, unittest.TestCase): def _rrulestr_reverse_test(self, rule): """ Call with an `rrule` and it will test that `str(rrule)` generates a string which generates the same `rrule` as the input when passed to `rrulestr()` """ rr_str = str(rule) rrulestr_rrule = rrulestr(rr_str) self.assertEqual(list(rule), list(rrulestr_rrule)) def testYearly(self): self.assertEqual(list(rrule(YEARLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0)]) def testYearlyInterval(self): self.assertEqual(list(rrule(YEARLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), datetime(2001, 9, 2, 9, 0)]) def testYearlyIntervalLarge(self): self.assertEqual(list(rrule(YEARLY, count=3, interval=100, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(2097, 9, 2, 9, 0), datetime(2197, 9, 2, 9, 0)]) def testYearlyByMonth(self): self.assertEqual(list(rrule(YEARLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 2, 9, 0), datetime(1998, 3, 2, 9, 0), datetime(1999, 1, 2, 9, 0)]) def testYearlyByMonthDay(self): self.assertEqual(list(rrule(YEARLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 3, 9, 0), datetime(1997, 10, 1, 9, 0), datetime(1997, 10, 3, 9, 0)]) def testYearlyByMonthAndMonthDay(self): self.assertEqual(list(rrule(YEARLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 5, 9, 0), datetime(1998, 1, 7, 9, 0), datetime(1998, 3, 5, 9, 0)]) def testYearlyByWeekDay(self): self.assertEqual(list(rrule(YEARLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testYearlyByNWeekDay(self): self.assertEqual(list(rrule(YEARLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 25, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 12, 31, 9, 0)]) def testYearlyByNWeekDayLarge(self): self.assertEqual(list(rrule(YEARLY, count=3, byweekday=(TU(3), TH(-3)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 11, 9, 0), datetime(1998, 1, 20, 9, 0), datetime(1998, 12, 17, 9, 0)]) def testYearlyByMonthAndWeekDay(self): self.assertEqual(list(rrule(YEARLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0)]) def testYearlyByMonthAndNWeekDay(self): self.assertEqual(list(rrule(YEARLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 29, 9, 0), datetime(1998, 3, 3, 9, 0)]) def testYearlyByMonthAndNWeekDayLarge(self): # This is interesting because the TH(-3) ends up before # the TU(3). self.assertEqual(list(rrule(YEARLY, count=3, bymonth=(1, 3), byweekday=(TU(3), TH(-3)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 15, 9, 0), datetime(1998, 1, 20, 9, 0), datetime(1998, 3, 12, 9, 0)]) def testYearlyByMonthDayAndWeekDay(self): self.assertEqual(list(rrule(YEARLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 2, 3, 9, 0), datetime(1998, 3, 3, 9, 0)]) def testYearlyByMonthAndMonthDayAndWeekDay(self): self.assertEqual(list(rrule(YEARLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 3, 3, 9, 0), datetime(2001, 3, 1, 9, 0)]) def testYearlyByYearDay(self): self.assertEqual(list(rrule(YEARLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 9, 0), datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0)]) def testYearlyByYearDayNeg(self): self.assertEqual(list(rrule(YEARLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 9, 0), datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0)]) def testYearlyByMonthAndYearDay(self): self.assertEqual(list(rrule(YEARLY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), datetime(1999, 4, 10, 9, 0), datetime(1999, 7, 19, 9, 0)]) def testYearlyByMonthAndYearDayNeg(self): self.assertEqual(list(rrule(YEARLY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), datetime(1999, 4, 10, 9, 0), datetime(1999, 7, 19, 9, 0)]) def testYearlyByWeekNo(self): self.assertEqual(list(rrule(YEARLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 5, 11, 9, 0), datetime(1998, 5, 12, 9, 0), datetime(1998, 5, 13, 9, 0)]) def testYearlyByWeekNoAndWeekDay(self): # That's a nice one. The first days of week number one # may be in the last year. self.assertEqual(list(rrule(YEARLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 29, 9, 0), datetime(1999, 1, 4, 9, 0), datetime(2000, 1, 3, 9, 0)]) def testYearlyByWeekNoAndWeekDayLarge(self): # Another nice test. The last days of week number 52/53 # may be in the next year. self.assertEqual(list(rrule(YEARLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 9, 0), datetime(1998, 12, 27, 9, 0), datetime(2000, 1, 2, 9, 0)]) def testYearlyByWeekNoAndWeekDayLast(self): self.assertEqual(list(rrule(YEARLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 9, 0), datetime(1999, 1, 3, 9, 0), datetime(2000, 1, 2, 9, 0)]) def testYearlyByEaster(self): self.assertEqual(list(rrule(YEARLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 12, 9, 0), datetime(1999, 4, 4, 9, 0), datetime(2000, 4, 23, 9, 0)]) def testYearlyByEasterPos(self): self.assertEqual(list(rrule(YEARLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 13, 9, 0), datetime(1999, 4, 5, 9, 0), datetime(2000, 4, 24, 9, 0)]) def testYearlyByEasterNeg(self): self.assertEqual(list(rrule(YEARLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 11, 9, 0), datetime(1999, 4, 3, 9, 0), datetime(2000, 4, 22, 9, 0)]) def testYearlyByWeekNoAndWeekDay53(self): self.assertEqual(list(rrule(YEARLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 12, 28, 9, 0), datetime(2004, 12, 27, 9, 0), datetime(2009, 12, 28, 9, 0)]) def testYearlyByHour(self): self.assertEqual(list(rrule(YEARLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0), datetime(1998, 9, 2, 6, 0), datetime(1998, 9, 2, 18, 0)]) def testYearlyByMinute(self): self.assertEqual(list(rrule(YEARLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1998, 9, 2, 9, 6)]) def testYearlyBySecond(self): self.assertEqual(list(rrule(YEARLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1998, 9, 2, 9, 0, 6)]) def testYearlyByHourAndMinute(self): self.assertEqual(list(rrule(YEARLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1998, 9, 2, 6, 6)]) def testYearlyByHourAndSecond(self): self.assertEqual(list(rrule(YEARLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1998, 9, 2, 6, 0, 6)]) def testYearlyByMinuteAndSecond(self): self.assertEqual(list(rrule(YEARLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6)]) def testYearlyByHourAndMinuteAndSecond(self): self.assertEqual(list(rrule(YEARLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6)]) def testYearlyBySetPos(self): self.assertEqual(list(rrule(YEARLY, count=3, bymonthday=15, byhour=(6, 18), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 11, 15, 18, 0), datetime(1998, 2, 15, 6, 0), datetime(1998, 11, 15, 18, 0)]) def testMonthly(self): self.assertEqual(list(rrule(MONTHLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 10, 2, 9, 0), datetime(1997, 11, 2, 9, 0)]) def testMonthlyInterval(self): self.assertEqual(list(rrule(MONTHLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 11, 2, 9, 0), datetime(1998, 1, 2, 9, 0)]) def testMonthlyIntervalLarge(self): self.assertEqual(list(rrule(MONTHLY, count=3, interval=18, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1999, 3, 2, 9, 0), datetime(2000, 9, 2, 9, 0)]) def testMonthlyByMonth(self): self.assertEqual(list(rrule(MONTHLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 2, 9, 0), datetime(1998, 3, 2, 9, 0), datetime(1999, 1, 2, 9, 0)]) def testMonthlyByMonthDay(self): self.assertEqual(list(rrule(MONTHLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 3, 9, 0), datetime(1997, 10, 1, 9, 0), datetime(1997, 10, 3, 9, 0)]) def testMonthlyByMonthAndMonthDay(self): self.assertEqual(list(rrule(MONTHLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 5, 9, 0), datetime(1998, 1, 7, 9, 0), datetime(1998, 3, 5, 9, 0)]) def testMonthlyByWeekDay(self): self.assertEqual(list(rrule(MONTHLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) # Third Monday of the month self.assertEqual(rrule(MONTHLY, byweekday=(MO(+3)), dtstart=datetime(1997, 9, 1)).between(datetime(1997, 9, 1), datetime(1997, 12, 1)), [datetime(1997, 9, 15, 0, 0), datetime(1997, 10, 20, 0, 0), datetime(1997, 11, 17, 0, 0)]) def testMonthlyByNWeekDay(self): self.assertEqual(list(rrule(MONTHLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 25, 9, 0), datetime(1997, 10, 7, 9, 0)]) def testMonthlyByNWeekDayLarge(self): self.assertEqual(list(rrule(MONTHLY, count=3, byweekday=(TU(3), TH(-3)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 11, 9, 0), datetime(1997, 9, 16, 9, 0), datetime(1997, 10, 16, 9, 0)]) def testMonthlyByMonthAndWeekDay(self): self.assertEqual(list(rrule(MONTHLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0)]) def testMonthlyByMonthAndNWeekDay(self): self.assertEqual(list(rrule(MONTHLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 29, 9, 0), datetime(1998, 3, 3, 9, 0)]) def testMonthlyByMonthAndNWeekDayLarge(self): self.assertEqual(list(rrule(MONTHLY, count=3, bymonth=(1, 3), byweekday=(TU(3), TH(-3)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 15, 9, 0), datetime(1998, 1, 20, 9, 0), datetime(1998, 3, 12, 9, 0)]) def testMonthlyByMonthDayAndWeekDay(self): self.assertEqual(list(rrule(MONTHLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 2, 3, 9, 0), datetime(1998, 3, 3, 9, 0)]) def testMonthlyByMonthAndMonthDayAndWeekDay(self): self.assertEqual(list(rrule(MONTHLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 3, 3, 9, 0), datetime(2001, 3, 1, 9, 0)]) def testMonthlyByYearDay(self): self.assertEqual(list(rrule(MONTHLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 9, 0), datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0)]) def testMonthlyByYearDayNeg(self): self.assertEqual(list(rrule(MONTHLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 9, 0), datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0)]) def testMonthlyByMonthAndYearDay(self): self.assertEqual(list(rrule(MONTHLY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), datetime(1999, 4, 10, 9, 0), datetime(1999, 7, 19, 9, 0)]) def testMonthlyByMonthAndYearDayNeg(self): self.assertEqual(list(rrule(MONTHLY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), datetime(1999, 4, 10, 9, 0), datetime(1999, 7, 19, 9, 0)]) def testMonthlyByWeekNo(self): self.assertEqual(list(rrule(MONTHLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 5, 11, 9, 0), datetime(1998, 5, 12, 9, 0), datetime(1998, 5, 13, 9, 0)]) def testMonthlyByWeekNoAndWeekDay(self): # That's a nice one. The first days of week number one # may be in the last year. self.assertEqual(list(rrule(MONTHLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 29, 9, 0), datetime(1999, 1, 4, 9, 0), datetime(2000, 1, 3, 9, 0)]) def testMonthlyByWeekNoAndWeekDayLarge(self): # Another nice test. The last days of week number 52/53 # may be in the next year. self.assertEqual(list(rrule(MONTHLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 9, 0), datetime(1998, 12, 27, 9, 0), datetime(2000, 1, 2, 9, 0)]) def testMonthlyByWeekNoAndWeekDayLast(self): self.assertEqual(list(rrule(MONTHLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 9, 0), datetime(1999, 1, 3, 9, 0), datetime(2000, 1, 2, 9, 0)]) def testMonthlyByWeekNoAndWeekDay53(self): self.assertEqual(list(rrule(MONTHLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 12, 28, 9, 0), datetime(2004, 12, 27, 9, 0), datetime(2009, 12, 28, 9, 0)]) def testMonthlyByEaster(self): self.assertEqual(list(rrule(MONTHLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 12, 9, 0), datetime(1999, 4, 4, 9, 0), datetime(2000, 4, 23, 9, 0)]) def testMonthlyByEasterPos(self): self.assertEqual(list(rrule(MONTHLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 13, 9, 0), datetime(1999, 4, 5, 9, 0), datetime(2000, 4, 24, 9, 0)]) def testMonthlyByEasterNeg(self): self.assertEqual(list(rrule(MONTHLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 11, 9, 0), datetime(1999, 4, 3, 9, 0), datetime(2000, 4, 22, 9, 0)]) def testMonthlyByHour(self): self.assertEqual(list(rrule(MONTHLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0), datetime(1997, 10, 2, 6, 0), datetime(1997, 10, 2, 18, 0)]) def testMonthlyByMinute(self): self.assertEqual(list(rrule(MONTHLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 10, 2, 9, 6)]) def testMonthlyBySecond(self): self.assertEqual(list(rrule(MONTHLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 10, 2, 9, 0, 6)]) def testMonthlyByHourAndMinute(self): self.assertEqual(list(rrule(MONTHLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 10, 2, 6, 6)]) def testMonthlyByHourAndSecond(self): self.assertEqual(list(rrule(MONTHLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 10, 2, 6, 0, 6)]) def testMonthlyByMinuteAndSecond(self): self.assertEqual(list(rrule(MONTHLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6)]) def testMonthlyByHourAndMinuteAndSecond(self): self.assertEqual(list(rrule(MONTHLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6)]) def testMonthlyBySetPos(self): self.assertEqual(list(rrule(MONTHLY, count=3, bymonthday=(13, 17), byhour=(6, 18), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 13, 18, 0), datetime(1997, 9, 17, 6, 0), datetime(1997, 10, 13, 18, 0)]) def testWeekly(self): self.assertEqual(list(rrule(WEEKLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testWeeklyInterval(self): self.assertEqual(list(rrule(WEEKLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 16, 9, 0), datetime(1997, 9, 30, 9, 0)]) def testWeeklyIntervalLarge(self): self.assertEqual(list(rrule(WEEKLY, count=3, interval=20, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1998, 1, 20, 9, 0), datetime(1998, 6, 9, 9, 0)]) def testWeeklyByMonth(self): self.assertEqual(list(rrule(WEEKLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 13, 9, 0), datetime(1998, 1, 20, 9, 0)]) def testWeeklyByMonthDay(self): self.assertEqual(list(rrule(WEEKLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 3, 9, 0), datetime(1997, 10, 1, 9, 0), datetime(1997, 10, 3, 9, 0)]) def testWeeklyByMonthAndMonthDay(self): self.assertEqual(list(rrule(WEEKLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 5, 9, 0), datetime(1998, 1, 7, 9, 0), datetime(1998, 3, 5, 9, 0)]) def testWeeklyByWeekDay(self): self.assertEqual(list(rrule(WEEKLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testWeeklyByNWeekDay(self): self.assertEqual(list(rrule(WEEKLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testWeeklyByMonthAndWeekDay(self): # This test is interesting, because it crosses the year # boundary in a weekly period to find day '1' as a # valid recurrence. self.assertEqual(list(rrule(WEEKLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0)]) def testWeeklyByMonthAndNWeekDay(self): self.assertEqual(list(rrule(WEEKLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0)]) def testWeeklyByMonthDayAndWeekDay(self): self.assertEqual(list(rrule(WEEKLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 2, 3, 9, 0), datetime(1998, 3, 3, 9, 0)]) def testWeeklyByMonthAndMonthDayAndWeekDay(self): self.assertEqual(list(rrule(WEEKLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 3, 3, 9, 0), datetime(2001, 3, 1, 9, 0)]) def testWeeklyByYearDay(self): self.assertEqual(list(rrule(WEEKLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 9, 0), datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0)]) def testWeeklyByYearDayNeg(self): self.assertEqual(list(rrule(WEEKLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 9, 0), datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0)]) def testWeeklyByMonthAndYearDay(self): self.assertEqual(list(rrule(WEEKLY, count=4, bymonth=(1, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 7, 19, 9, 0), datetime(1999, 1, 1, 9, 0), datetime(1999, 7, 19, 9, 0)]) def testWeeklyByMonthAndYearDayNeg(self): self.assertEqual(list(rrule(WEEKLY, count=4, bymonth=(1, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 7, 19, 9, 0), datetime(1999, 1, 1, 9, 0), datetime(1999, 7, 19, 9, 0)]) def testWeeklyByWeekNo(self): self.assertEqual(list(rrule(WEEKLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 5, 11, 9, 0), datetime(1998, 5, 12, 9, 0), datetime(1998, 5, 13, 9, 0)]) def testWeeklyByWeekNoAndWeekDay(self): # That's a nice one. The first days of week number one # may be in the last year. self.assertEqual(list(rrule(WEEKLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 29, 9, 0), datetime(1999, 1, 4, 9, 0), datetime(2000, 1, 3, 9, 0)]) def testWeeklyByWeekNoAndWeekDayLarge(self): # Another nice test. The last days of week number 52/53 # may be in the next year. self.assertEqual(list(rrule(WEEKLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 9, 0), datetime(1998, 12, 27, 9, 0), datetime(2000, 1, 2, 9, 0)]) def testWeeklyByWeekNoAndWeekDayLast(self): self.assertEqual(list(rrule(WEEKLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 9, 0), datetime(1999, 1, 3, 9, 0), datetime(2000, 1, 2, 9, 0)]) def testWeeklyByWeekNoAndWeekDay53(self): self.assertEqual(list(rrule(WEEKLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 12, 28, 9, 0), datetime(2004, 12, 27, 9, 0), datetime(2009, 12, 28, 9, 0)]) def testWeeklyByEaster(self): self.assertEqual(list(rrule(WEEKLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 12, 9, 0), datetime(1999, 4, 4, 9, 0), datetime(2000, 4, 23, 9, 0)]) def testWeeklyByEasterPos(self): self.assertEqual(list(rrule(WEEKLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 13, 9, 0), datetime(1999, 4, 5, 9, 0), datetime(2000, 4, 24, 9, 0)]) def testWeeklyByEasterNeg(self): self.assertEqual(list(rrule(WEEKLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 11, 9, 0), datetime(1999, 4, 3, 9, 0), datetime(2000, 4, 22, 9, 0)]) def testWeeklyByHour(self): self.assertEqual(list(rrule(WEEKLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 9, 6, 0), datetime(1997, 9, 9, 18, 0)]) def testWeeklyByMinute(self): self.assertEqual(list(rrule(WEEKLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 9, 9, 9, 6)]) def testWeeklyBySecond(self): self.assertEqual(list(rrule(WEEKLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 9, 9, 0, 6)]) def testWeeklyByHourAndMinute(self): self.assertEqual(list(rrule(WEEKLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 9, 9, 6, 6)]) def testWeeklyByHourAndSecond(self): self.assertEqual(list(rrule(WEEKLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 9, 6, 0, 6)]) def testWeeklyByMinuteAndSecond(self): self.assertEqual(list(rrule(WEEKLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6)]) def testWeeklyByHourAndMinuteAndSecond(self): self.assertEqual(list(rrule(WEEKLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6)]) def testWeeklyBySetPos(self): self.assertEqual(list(rrule(WEEKLY, count=3, byweekday=(TU, TH), byhour=(6, 18), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 4, 6, 0), datetime(1997, 9, 9, 18, 0)]) def testDaily(self): self.assertEqual(list(rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0)]) def testDailyInterval(self): self.assertEqual(list(rrule(DAILY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 6, 9, 0)]) def testDailyIntervalLarge(self): self.assertEqual(list(rrule(DAILY, count=3, interval=92, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 12, 3, 9, 0), datetime(1998, 3, 5, 9, 0)]) def testDailyByMonth(self): self.assertEqual(list(rrule(DAILY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 2, 9, 0), datetime(1998, 1, 3, 9, 0)]) def testDailyByMonthDay(self): self.assertEqual(list(rrule(DAILY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 3, 9, 0), datetime(1997, 10, 1, 9, 0), datetime(1997, 10, 3, 9, 0)]) def testDailyByMonthAndMonthDay(self): self.assertEqual(list(rrule(DAILY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 5, 9, 0), datetime(1998, 1, 7, 9, 0), datetime(1998, 3, 5, 9, 0)]) def testDailyByWeekDay(self): self.assertEqual(list(rrule(DAILY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testDailyByNWeekDay(self): self.assertEqual(list(rrule(DAILY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testDailyByMonthAndWeekDay(self): self.assertEqual(list(rrule(DAILY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0)]) def testDailyByMonthAndNWeekDay(self): self.assertEqual(list(rrule(DAILY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0)]) def testDailyByMonthDayAndWeekDay(self): self.assertEqual(list(rrule(DAILY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 2, 3, 9, 0), datetime(1998, 3, 3, 9, 0)]) def testDailyByMonthAndMonthDayAndWeekDay(self): self.assertEqual(list(rrule(DAILY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 3, 3, 9, 0), datetime(2001, 3, 1, 9, 0)]) def testDailyByYearDay(self): self.assertEqual(list(rrule(DAILY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 9, 0), datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0)]) def testDailyByYearDayNeg(self): self.assertEqual(list(rrule(DAILY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 9, 0), datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0)]) def testDailyByMonthAndYearDay(self): self.assertEqual(list(rrule(DAILY, count=4, bymonth=(1, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 7, 19, 9, 0), datetime(1999, 1, 1, 9, 0), datetime(1999, 7, 19, 9, 0)]) def testDailyByMonthAndYearDayNeg(self): self.assertEqual(list(rrule(DAILY, count=4, bymonth=(1, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 9, 0), datetime(1998, 7, 19, 9, 0), datetime(1999, 1, 1, 9, 0), datetime(1999, 7, 19, 9, 0)]) def testDailyByWeekNo(self): self.assertEqual(list(rrule(DAILY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 5, 11, 9, 0), datetime(1998, 5, 12, 9, 0), datetime(1998, 5, 13, 9, 0)]) def testDailyByWeekNoAndWeekDay(self): # That's a nice one. The first days of week number one # may be in the last year. self.assertEqual(list(rrule(DAILY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 29, 9, 0), datetime(1999, 1, 4, 9, 0), datetime(2000, 1, 3, 9, 0)]) def testDailyByWeekNoAndWeekDayLarge(self): # Another nice test. The last days of week number 52/53 # may be in the next year. self.assertEqual(list(rrule(DAILY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 9, 0), datetime(1998, 12, 27, 9, 0), datetime(2000, 1, 2, 9, 0)]) def testDailyByWeekNoAndWeekDayLast(self): self.assertEqual(list(rrule(DAILY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 9, 0), datetime(1999, 1, 3, 9, 0), datetime(2000, 1, 2, 9, 0)]) def testDailyByWeekNoAndWeekDay53(self): self.assertEqual(list(rrule(DAILY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 12, 28, 9, 0), datetime(2004, 12, 27, 9, 0), datetime(2009, 12, 28, 9, 0)]) def testDailyByEaster(self): self.assertEqual(list(rrule(DAILY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 12, 9, 0), datetime(1999, 4, 4, 9, 0), datetime(2000, 4, 23, 9, 0)]) def testDailyByEasterPos(self): self.assertEqual(list(rrule(DAILY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 13, 9, 0), datetime(1999, 4, 5, 9, 0), datetime(2000, 4, 24, 9, 0)]) def testDailyByEasterNeg(self): self.assertEqual(list(rrule(DAILY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 11, 9, 0), datetime(1999, 4, 3, 9, 0), datetime(2000, 4, 22, 9, 0)]) def testDailyByHour(self): self.assertEqual(list(rrule(DAILY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 3, 6, 0), datetime(1997, 9, 3, 18, 0)]) def testDailyByMinute(self): self.assertEqual(list(rrule(DAILY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 9, 3, 9, 6)]) def testDailyBySecond(self): self.assertEqual(list(rrule(DAILY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 3, 9, 0, 6)]) def testDailyByHourAndMinute(self): self.assertEqual(list(rrule(DAILY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 9, 3, 6, 6)]) def testDailyByHourAndSecond(self): self.assertEqual(list(rrule(DAILY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 3, 6, 0, 6)]) def testDailyByMinuteAndSecond(self): self.assertEqual(list(rrule(DAILY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6)]) def testDailyByHourAndMinuteAndSecond(self): self.assertEqual(list(rrule(DAILY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6)]) def testDailyBySetPos(self): self.assertEqual(list(rrule(DAILY, count=3, byhour=(6, 18), byminute=(15, 45), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 15), datetime(1997, 9, 3, 6, 45), datetime(1997, 9, 3, 18, 15)]) def testHourly(self): self.assertEqual(list(rrule(HOURLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 10, 0), datetime(1997, 9, 2, 11, 0)]) def testHourlyInterval(self): self.assertEqual(list(rrule(HOURLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 11, 0), datetime(1997, 9, 2, 13, 0)]) def testHourlyIntervalLarge(self): self.assertEqual(list(rrule(HOURLY, count=3, interval=769, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 10, 4, 10, 0), datetime(1997, 11, 5, 11, 0)]) def testHourlyByMonth(self): self.assertEqual(list(rrule(HOURLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0)]) def testHourlyByMonthDay(self): self.assertEqual(list(rrule(HOURLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 3, 0, 0), datetime(1997, 9, 3, 1, 0), datetime(1997, 9, 3, 2, 0)]) def testHourlyByMonthAndMonthDay(self): self.assertEqual(list(rrule(HOURLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 5, 0, 0), datetime(1998, 1, 5, 1, 0), datetime(1998, 1, 5, 2, 0)]) def testHourlyByWeekDay(self): self.assertEqual(list(rrule(HOURLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 10, 0), datetime(1997, 9, 2, 11, 0)]) def testHourlyByNWeekDay(self): self.assertEqual(list(rrule(HOURLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 10, 0), datetime(1997, 9, 2, 11, 0)]) def testHourlyByMonthAndWeekDay(self): self.assertEqual(list(rrule(HOURLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0)]) def testHourlyByMonthAndNWeekDay(self): self.assertEqual(list(rrule(HOURLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0)]) def testHourlyByMonthDayAndWeekDay(self): self.assertEqual(list(rrule(HOURLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0)]) def testHourlyByMonthAndMonthDayAndWeekDay(self): self.assertEqual(list(rrule(HOURLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0)]) def testHourlyByYearDay(self): self.assertEqual(list(rrule(HOURLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 0, 0), datetime(1997, 12, 31, 1, 0), datetime(1997, 12, 31, 2, 0), datetime(1997, 12, 31, 3, 0)]) def testHourlyByYearDayNeg(self): self.assertEqual(list(rrule(HOURLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 0, 0), datetime(1997, 12, 31, 1, 0), datetime(1997, 12, 31, 2, 0), datetime(1997, 12, 31, 3, 0)]) def testHourlyByMonthAndYearDay(self): self.assertEqual(list(rrule(HOURLY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 0, 0), datetime(1998, 4, 10, 1, 0), datetime(1998, 4, 10, 2, 0), datetime(1998, 4, 10, 3, 0)]) def testHourlyByMonthAndYearDayNeg(self): self.assertEqual(list(rrule(HOURLY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 0, 0), datetime(1998, 4, 10, 1, 0), datetime(1998, 4, 10, 2, 0), datetime(1998, 4, 10, 3, 0)]) def testHourlyByWeekNo(self): self.assertEqual(list(rrule(HOURLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 5, 11, 0, 0), datetime(1998, 5, 11, 1, 0), datetime(1998, 5, 11, 2, 0)]) def testHourlyByWeekNoAndWeekDay(self): self.assertEqual(list(rrule(HOURLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 29, 0, 0), datetime(1997, 12, 29, 1, 0), datetime(1997, 12, 29, 2, 0)]) def testHourlyByWeekNoAndWeekDayLarge(self): self.assertEqual(list(rrule(HOURLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 0, 0), datetime(1997, 12, 28, 1, 0), datetime(1997, 12, 28, 2, 0)]) def testHourlyByWeekNoAndWeekDayLast(self): self.assertEqual(list(rrule(HOURLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 0, 0), datetime(1997, 12, 28, 1, 0), datetime(1997, 12, 28, 2, 0)]) def testHourlyByWeekNoAndWeekDay53(self): self.assertEqual(list(rrule(HOURLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 12, 28, 0, 0), datetime(1998, 12, 28, 1, 0), datetime(1998, 12, 28, 2, 0)]) def testHourlyByEaster(self): self.assertEqual(list(rrule(HOURLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 12, 0, 0), datetime(1998, 4, 12, 1, 0), datetime(1998, 4, 12, 2, 0)]) def testHourlyByEasterPos(self): self.assertEqual(list(rrule(HOURLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 13, 0, 0), datetime(1998, 4, 13, 1, 0), datetime(1998, 4, 13, 2, 0)]) def testHourlyByEasterNeg(self): self.assertEqual(list(rrule(HOURLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 11, 0, 0), datetime(1998, 4, 11, 1, 0), datetime(1998, 4, 11, 2, 0)]) def testHourlyByHour(self): self.assertEqual(list(rrule(HOURLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 3, 6, 0), datetime(1997, 9, 3, 18, 0)]) def testHourlyByMinute(self): self.assertEqual(list(rrule(HOURLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 9, 2, 10, 6)]) def testHourlyBySecond(self): self.assertEqual(list(rrule(HOURLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 2, 10, 0, 6)]) def testHourlyByHourAndMinute(self): self.assertEqual(list(rrule(HOURLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 9, 3, 6, 6)]) def testHourlyByHourAndSecond(self): self.assertEqual(list(rrule(HOURLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 3, 6, 0, 6)]) def testHourlyByMinuteAndSecond(self): self.assertEqual(list(rrule(HOURLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6)]) def testHourlyByHourAndMinuteAndSecond(self): self.assertEqual(list(rrule(HOURLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6)]) def testHourlyBySetPos(self): self.assertEqual(list(rrule(HOURLY, count=3, byminute=(15, 45), bysecond=(15, 45), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 15, 45), datetime(1997, 9, 2, 9, 45, 15), datetime(1997, 9, 2, 10, 15, 45)]) def testMinutely(self): self.assertEqual(list(rrule(MINUTELY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 9, 1), datetime(1997, 9, 2, 9, 2)]) def testMinutelyInterval(self): self.assertEqual(list(rrule(MINUTELY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 9, 2), datetime(1997, 9, 2, 9, 4)]) def testMinutelyIntervalLarge(self): self.assertEqual(list(rrule(MINUTELY, count=3, interval=1501, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 10, 1), datetime(1997, 9, 4, 11, 2)]) def testMinutelyByMonth(self): self.assertEqual(list(rrule(MINUTELY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2)]) def testMinutelyByMonthDay(self): self.assertEqual(list(rrule(MINUTELY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 3, 0, 0), datetime(1997, 9, 3, 0, 1), datetime(1997, 9, 3, 0, 2)]) def testMinutelyByMonthAndMonthDay(self): self.assertEqual(list(rrule(MINUTELY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 5, 0, 0), datetime(1998, 1, 5, 0, 1), datetime(1998, 1, 5, 0, 2)]) def testMinutelyByWeekDay(self): self.assertEqual(list(rrule(MINUTELY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 9, 1), datetime(1997, 9, 2, 9, 2)]) def testMinutelyByNWeekDay(self): self.assertEqual(list(rrule(MINUTELY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 9, 1), datetime(1997, 9, 2, 9, 2)]) def testMinutelyByMonthAndWeekDay(self): self.assertEqual(list(rrule(MINUTELY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2)]) def testMinutelyByMonthAndNWeekDay(self): self.assertEqual(list(rrule(MINUTELY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2)]) def testMinutelyByMonthDayAndWeekDay(self): self.assertEqual(list(rrule(MINUTELY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2)]) def testMinutelyByMonthAndMonthDayAndWeekDay(self): self.assertEqual(list(rrule(MINUTELY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2)]) def testMinutelyByYearDay(self): self.assertEqual(list(rrule(MINUTELY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 0, 0), datetime(1997, 12, 31, 0, 1), datetime(1997, 12, 31, 0, 2), datetime(1997, 12, 31, 0, 3)]) def testMinutelyByYearDayNeg(self): self.assertEqual(list(rrule(MINUTELY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 0, 0), datetime(1997, 12, 31, 0, 1), datetime(1997, 12, 31, 0, 2), datetime(1997, 12, 31, 0, 3)]) def testMinutelyByMonthAndYearDay(self): self.assertEqual(list(rrule(MINUTELY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 0, 0), datetime(1998, 4, 10, 0, 1), datetime(1998, 4, 10, 0, 2), datetime(1998, 4, 10, 0, 3)]) def testMinutelyByMonthAndYearDayNeg(self): self.assertEqual(list(rrule(MINUTELY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 0, 0), datetime(1998, 4, 10, 0, 1), datetime(1998, 4, 10, 0, 2), datetime(1998, 4, 10, 0, 3)]) def testMinutelyByWeekNo(self): self.assertEqual(list(rrule(MINUTELY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 5, 11, 0, 0), datetime(1998, 5, 11, 0, 1), datetime(1998, 5, 11, 0, 2)]) def testMinutelyByWeekNoAndWeekDay(self): self.assertEqual(list(rrule(MINUTELY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 29, 0, 0), datetime(1997, 12, 29, 0, 1), datetime(1997, 12, 29, 0, 2)]) def testMinutelyByWeekNoAndWeekDayLarge(self): self.assertEqual(list(rrule(MINUTELY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 0, 0), datetime(1997, 12, 28, 0, 1), datetime(1997, 12, 28, 0, 2)]) def testMinutelyByWeekNoAndWeekDayLast(self): self.assertEqual(list(rrule(MINUTELY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 0, 0), datetime(1997, 12, 28, 0, 1), datetime(1997, 12, 28, 0, 2)]) def testMinutelyByWeekNoAndWeekDay53(self): self.assertEqual(list(rrule(MINUTELY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 12, 28, 0, 0), datetime(1998, 12, 28, 0, 1), datetime(1998, 12, 28, 0, 2)]) def testMinutelyByEaster(self): self.assertEqual(list(rrule(MINUTELY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 12, 0, 0), datetime(1998, 4, 12, 0, 1), datetime(1998, 4, 12, 0, 2)]) def testMinutelyByEasterPos(self): self.assertEqual(list(rrule(MINUTELY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 13, 0, 0), datetime(1998, 4, 13, 0, 1), datetime(1998, 4, 13, 0, 2)]) def testMinutelyByEasterNeg(self): self.assertEqual(list(rrule(MINUTELY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 11, 0, 0), datetime(1998, 4, 11, 0, 1), datetime(1998, 4, 11, 0, 2)]) def testMinutelyByHour(self): self.assertEqual(list(rrule(MINUTELY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 2, 18, 1), datetime(1997, 9, 2, 18, 2)]) def testMinutelyByMinute(self): self.assertEqual(list(rrule(MINUTELY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 9, 2, 10, 6)]) def testMinutelyBySecond(self): self.assertEqual(list(rrule(MINUTELY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 2, 9, 1, 6)]) def testMinutelyByHourAndMinute(self): self.assertEqual(list(rrule(MINUTELY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 9, 3, 6, 6)]) def testMinutelyByHourAndSecond(self): self.assertEqual(list(rrule(MINUTELY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 2, 18, 1, 6)]) def testMinutelyByMinuteAndSecond(self): self.assertEqual(list(rrule(MINUTELY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6)]) def testMinutelyByHourAndMinuteAndSecond(self): self.assertEqual(list(rrule(MINUTELY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6)]) def testMinutelyBySetPos(self): self.assertEqual(list(rrule(MINUTELY, count=3, bysecond=(15, 30, 45), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 15), datetime(1997, 9, 2, 9, 0, 45), datetime(1997, 9, 2, 9, 1, 15)]) def testSecondly(self): self.assertEqual(list(rrule(SECONDLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 2, 9, 0, 1), datetime(1997, 9, 2, 9, 0, 2)]) def testSecondlyInterval(self): self.assertEqual(list(rrule(SECONDLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 2, 9, 0, 2), datetime(1997, 9, 2, 9, 0, 4)]) def testSecondlyIntervalLarge(self): self.assertEqual(list(rrule(SECONDLY, count=3, interval=90061, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 3, 10, 1, 1), datetime(1997, 9, 4, 11, 2, 2)]) def testSecondlyByMonth(self): self.assertEqual(list(rrule(SECONDLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2)]) def testSecondlyByMonthDay(self): self.assertEqual(list(rrule(SECONDLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 3, 0, 0, 0), datetime(1997, 9, 3, 0, 0, 1), datetime(1997, 9, 3, 0, 0, 2)]) def testSecondlyByMonthAndMonthDay(self): self.assertEqual(list(rrule(SECONDLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 5, 0, 0, 0), datetime(1998, 1, 5, 0, 0, 1), datetime(1998, 1, 5, 0, 0, 2)]) def testSecondlyByWeekDay(self): self.assertEqual(list(rrule(SECONDLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 2, 9, 0, 1), datetime(1997, 9, 2, 9, 0, 2)]) def testSecondlyByNWeekDay(self): self.assertEqual(list(rrule(SECONDLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 2, 9, 0, 1), datetime(1997, 9, 2, 9, 0, 2)]) def testSecondlyByMonthAndWeekDay(self): self.assertEqual(list(rrule(SECONDLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2)]) def testSecondlyByMonthAndNWeekDay(self): self.assertEqual(list(rrule(SECONDLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2)]) def testSecondlyByMonthDayAndWeekDay(self): self.assertEqual(list(rrule(SECONDLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2)]) def testSecondlyByMonthAndMonthDayAndWeekDay(self): self.assertEqual(list(rrule(SECONDLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2)]) def testSecondlyByYearDay(self): self.assertEqual(list(rrule(SECONDLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 0, 0, 0), datetime(1997, 12, 31, 0, 0, 1), datetime(1997, 12, 31, 0, 0, 2), datetime(1997, 12, 31, 0, 0, 3)]) def testSecondlyByYearDayNeg(self): self.assertEqual(list(rrule(SECONDLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 31, 0, 0, 0), datetime(1997, 12, 31, 0, 0, 1), datetime(1997, 12, 31, 0, 0, 2), datetime(1997, 12, 31, 0, 0, 3)]) def testSecondlyByMonthAndYearDay(self): self.assertEqual(list(rrule(SECONDLY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 0, 0, 0), datetime(1998, 4, 10, 0, 0, 1), datetime(1998, 4, 10, 0, 0, 2), datetime(1998, 4, 10, 0, 0, 3)]) def testSecondlyByMonthAndYearDayNeg(self): self.assertEqual(list(rrule(SECONDLY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 10, 0, 0, 0), datetime(1998, 4, 10, 0, 0, 1), datetime(1998, 4, 10, 0, 0, 2), datetime(1998, 4, 10, 0, 0, 3)]) def testSecondlyByWeekNo(self): self.assertEqual(list(rrule(SECONDLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 5, 11, 0, 0, 0), datetime(1998, 5, 11, 0, 0, 1), datetime(1998, 5, 11, 0, 0, 2)]) def testSecondlyByWeekNoAndWeekDay(self): self.assertEqual(list(rrule(SECONDLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 29, 0, 0, 0), datetime(1997, 12, 29, 0, 0, 1), datetime(1997, 12, 29, 0, 0, 2)]) def testSecondlyByWeekNoAndWeekDayLarge(self): self.assertEqual(list(rrule(SECONDLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 0, 0, 0), datetime(1997, 12, 28, 0, 0, 1), datetime(1997, 12, 28, 0, 0, 2)]) def testSecondlyByWeekNoAndWeekDayLast(self): self.assertEqual(list(rrule(SECONDLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 12, 28, 0, 0, 0), datetime(1997, 12, 28, 0, 0, 1), datetime(1997, 12, 28, 0, 0, 2)]) def testSecondlyByWeekNoAndWeekDay53(self): self.assertEqual(list(rrule(SECONDLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 12, 28, 0, 0, 0), datetime(1998, 12, 28, 0, 0, 1), datetime(1998, 12, 28, 0, 0, 2)]) def testSecondlyByEaster(self): self.assertEqual(list(rrule(SECONDLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 12, 0, 0, 0), datetime(1998, 4, 12, 0, 0, 1), datetime(1998, 4, 12, 0, 0, 2)]) def testSecondlyByEasterPos(self): self.assertEqual(list(rrule(SECONDLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 13, 0, 0, 0), datetime(1998, 4, 13, 0, 0, 1), datetime(1998, 4, 13, 0, 0, 2)]) def testSecondlyByEasterNeg(self): self.assertEqual(list(rrule(SECONDLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 4, 11, 0, 0, 0), datetime(1998, 4, 11, 0, 0, 1), datetime(1998, 4, 11, 0, 0, 2)]) def testSecondlyByHour(self): self.assertEqual(list(rrule(SECONDLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0, 0), datetime(1997, 9, 2, 18, 0, 1), datetime(1997, 9, 2, 18, 0, 2)]) def testSecondlyByMinute(self): self.assertEqual(list(rrule(SECONDLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6, 0), datetime(1997, 9, 2, 9, 6, 1), datetime(1997, 9, 2, 9, 6, 2)]) def testSecondlyBySecond(self): self.assertEqual(list(rrule(SECONDLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 2, 9, 1, 6)]) def testSecondlyByHourAndMinute(self): self.assertEqual(list(rrule(SECONDLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6, 0), datetime(1997, 9, 2, 18, 6, 1), datetime(1997, 9, 2, 18, 6, 2)]) def testSecondlyByHourAndSecond(self): self.assertEqual(list(rrule(SECONDLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 2, 18, 1, 6)]) def testSecondlyByMinuteAndSecond(self): self.assertEqual(list(rrule(SECONDLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6)]) def testSecondlyByHourAndMinuteAndSecond(self): self.assertEqual(list(rrule(SECONDLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6)]) def testSecondlyByHourAndMinuteAndSecondBug(self): # This explores a bug found by Mathieu Bridon. self.assertEqual(list(rrule(SECONDLY, count=3, bysecond=(0,), byminute=(1,), dtstart=datetime(2010, 3, 22, 12, 1))), [datetime(2010, 3, 22, 12, 1), datetime(2010, 3, 22, 13, 1), datetime(2010, 3, 22, 14, 1)]) def testLongIntegers(self): if not PY3: # There is no longs in python3 self.assertEqual(list(rrule(MINUTELY, count=long(2), interval=long(2), bymonth=long(2), byweekday=long(3), byhour=long(6), byminute=long(6), bysecond=long(6), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 2, 5, 6, 6, 6), datetime(1998, 2, 12, 6, 6, 6)]) self.assertEqual(list(rrule(YEARLY, count=long(2), bymonthday=long(5), byweekno=long(2), dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1998, 1, 5, 9, 0), datetime(2004, 1, 5, 9, 0)]) def testHourlyBadRRule(self): """ When `byhour` is specified with `freq=HOURLY`, there are certain combinations of `dtstart` and `byhour` which result in an rrule with no valid values. See https://github.com/dateutil/dateutil/issues/4 """ self.assertRaises(ValueError, rrule, HOURLY, **dict(interval=4, byhour=(7, 11, 15, 19), dtstart=datetime(1997, 9, 2, 9, 0))) def testMinutelyBadRRule(self): """ See :func:`testHourlyBadRRule` for details. """ self.assertRaises(ValueError, rrule, MINUTELY, **dict(interval=12, byminute=(10, 11, 25, 39, 50), dtstart=datetime(1997, 9, 2, 9, 0))) def testSecondlyBadRRule(self): """ See :func:`testHourlyBadRRule` for details. """ self.assertRaises(ValueError, rrule, SECONDLY, **dict(interval=10, bysecond=(2, 15, 37, 42, 59), dtstart=datetime(1997, 9, 2, 9, 0))) def testMinutelyBadComboRRule(self): """ Certain values of :param:`interval` in :class:`rrule`, when combined with certain values of :param:`byhour` create rules which apply to no valid dates. The library should detect this case in the iterator and raise a :exception:`ValueError`. """ # In Python 2.7 you can use a context manager for this. def make_bad_rrule(): list(rrule(MINUTELY, interval=120, byhour=(10, 12, 14, 16), count=2, dtstart=datetime(1997, 9, 2, 9, 0))) self.assertRaises(ValueError, make_bad_rrule) def testSecondlyBadComboRRule(self): """ See :func:`testMinutelyBadComboRRule' for details. """ # In Python 2.7 you can use a context manager for this. def make_bad_minute_rrule(): list(rrule(SECONDLY, interval=360, byminute=(10, 28, 49), count=4, dtstart=datetime(1997, 9, 2, 9, 0))) def make_bad_hour_rrule(): list(rrule(SECONDLY, interval=43200, byhour=(2, 10, 18, 23), count=4, dtstart=datetime(1997, 9, 2, 9, 0))) self.assertRaises(ValueError, make_bad_minute_rrule) self.assertRaises(ValueError, make_bad_hour_rrule) def testBadUntilCountRRule(self): """ See rfc-2445 4.3.10 - This checks for the deprecation warning, and will eventually check for an error. """ with self.assertWarns(DeprecationWarning): rrule(DAILY, dtstart=datetime(1997, 9, 2, 9, 0), count=3, until=datetime(1997, 9, 4, 9, 0)) def testUntilNotMatching(self): self.assertEqual(list(rrule(DAILY, dtstart=datetime(1997, 9, 2, 9, 0), until=datetime(1997, 9, 5, 8, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0)]) def testUntilMatching(self): self.assertEqual(list(rrule(DAILY, dtstart=datetime(1997, 9, 2, 9, 0), until=datetime(1997, 9, 4, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0)]) def testUntilSingle(self): self.assertEqual(list(rrule(DAILY, dtstart=datetime(1997, 9, 2, 9, 0), until=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0)]) def testUntilEmpty(self): self.assertEqual(list(rrule(DAILY, dtstart=datetime(1997, 9, 2, 9, 0), until=datetime(1997, 9, 1, 9, 0))), []) def testUntilWithDate(self): self.assertEqual(list(rrule(DAILY, dtstart=datetime(1997, 9, 2, 9, 0), until=date(1997, 9, 5))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0)]) def testWkStIntervalMO(self): self.assertEqual(list(rrule(WEEKLY, count=3, interval=2, byweekday=(TU, SU), wkst=MO, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 7, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testWkStIntervalSU(self): self.assertEqual(list(rrule(WEEKLY, count=3, interval=2, byweekday=(TU, SU), wkst=SU, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 14, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testDTStartIsDate(self): self.assertEqual(list(rrule(DAILY, count=3, dtstart=date(1997, 9, 2))), [datetime(1997, 9, 2, 0, 0), datetime(1997, 9, 3, 0, 0), datetime(1997, 9, 4, 0, 0)]) def testDTStartWithMicroseconds(self): self.assertEqual(list(rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0, 0, 500000))), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0)]) def testMaxYear(self): self.assertEqual(list(rrule(YEARLY, count=3, bymonth=2, bymonthday=31, dtstart=datetime(9997, 9, 2, 9, 0, 0))), []) def testGetItem(self): self.assertEqual(rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))[0], datetime(1997, 9, 2, 9, 0)) def testGetItemNeg(self): self.assertEqual(rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))[-1], datetime(1997, 9, 4, 9, 0)) def testGetItemSlice(self): self.assertEqual(rrule(DAILY, # count=3, dtstart=datetime(1997, 9, 2, 9, 0))[1:2], [datetime(1997, 9, 3, 9, 0)]) def testGetItemSliceEmpty(self): self.assertEqual(rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))[:], [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0)]) def testGetItemSliceStep(self): self.assertEqual(rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))[::-2], [datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 2, 9, 0)]) def testCount(self): self.assertEqual(rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0)).count(), 3) def testContains(self): rr = rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0)) self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True) def testContainsNot(self): rr = rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0)) self.assertEqual(datetime(1997, 9, 3, 9, 0) not in rr, False) def testBefore(self): self.assertEqual(rrule(DAILY, # count=5 dtstart=datetime(1997, 9, 2, 9, 0)).before(datetime(1997, 9, 5, 9, 0)), datetime(1997, 9, 4, 9, 0)) def testBeforeInc(self): self.assertEqual(rrule(DAILY, #count=5, dtstart=datetime(1997, 9, 2, 9, 0)) .before(datetime(1997, 9, 5, 9, 0), inc=True), datetime(1997, 9, 5, 9, 0)) def testAfter(self): self.assertEqual(rrule(DAILY, #count=5, dtstart=datetime(1997, 9, 2, 9, 0)) .after(datetime(1997, 9, 4, 9, 0)), datetime(1997, 9, 5, 9, 0)) def testAfterInc(self): self.assertEqual(rrule(DAILY, #count=5, dtstart=datetime(1997, 9, 2, 9, 0)) .after(datetime(1997, 9, 4, 9, 0), inc=True), datetime(1997, 9, 4, 9, 0)) def testXAfter(self): self.assertEqual(list(rrule(DAILY, dtstart=datetime(1997, 9, 2, 9, 0)) .xafter(datetime(1997, 9, 8, 9, 0), count=12)), [datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 10, 9, 0), datetime(1997, 9, 11, 9, 0), datetime(1997, 9, 12, 9, 0), datetime(1997, 9, 13, 9, 0), datetime(1997, 9, 14, 9, 0), datetime(1997, 9, 15, 9, 0), datetime(1997, 9, 16, 9, 0), datetime(1997, 9, 17, 9, 0), datetime(1997, 9, 18, 9, 0), datetime(1997, 9, 19, 9, 0), datetime(1997, 9, 20, 9, 0)]) def testXAfterInc(self): self.assertEqual(list(rrule(DAILY, dtstart=datetime(1997, 9, 2, 9, 0)) .xafter(datetime(1997, 9, 8, 9, 0), count=12, inc=True)), [datetime(1997, 9, 8, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 10, 9, 0), datetime(1997, 9, 11, 9, 0), datetime(1997, 9, 12, 9, 0), datetime(1997, 9, 13, 9, 0), datetime(1997, 9, 14, 9, 0), datetime(1997, 9, 15, 9, 0), datetime(1997, 9, 16, 9, 0), datetime(1997, 9, 17, 9, 0), datetime(1997, 9, 18, 9, 0), datetime(1997, 9, 19, 9, 0)]) def testBetween(self): self.assertEqual(rrule(DAILY, #count=5, dtstart=datetime(1997, 9, 2, 9, 0)) .between(datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 6, 9, 0)), [datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 5, 9, 0)]) def testBetweenInc(self): self.assertEqual(rrule(DAILY, #count=5, dtstart=datetime(1997, 9, 2, 9, 0)) .between(datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 6, 9, 0), inc=True), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 5, 9, 0), datetime(1997, 9, 6, 9, 0)]) def testCachePre(self): rr = rrule(DAILY, count=15, cache=True, dtstart=datetime(1997, 9, 2, 9, 0)) self.assertEqual(list(rr), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 5, 9, 0), datetime(1997, 9, 6, 9, 0), datetime(1997, 9, 7, 9, 0), datetime(1997, 9, 8, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 10, 9, 0), datetime(1997, 9, 11, 9, 0), datetime(1997, 9, 12, 9, 0), datetime(1997, 9, 13, 9, 0), datetime(1997, 9, 14, 9, 0), datetime(1997, 9, 15, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testCachePost(self): rr = rrule(DAILY, count=15, cache=True, dtstart=datetime(1997, 9, 2, 9, 0)) for x in rr: pass self.assertEqual(list(rr), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 5, 9, 0), datetime(1997, 9, 6, 9, 0), datetime(1997, 9, 7, 9, 0), datetime(1997, 9, 8, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 10, 9, 0), datetime(1997, 9, 11, 9, 0), datetime(1997, 9, 12, 9, 0), datetime(1997, 9, 13, 9, 0), datetime(1997, 9, 14, 9, 0), datetime(1997, 9, 15, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testCachePostInternal(self): rr = rrule(DAILY, count=15, cache=True, dtstart=datetime(1997, 9, 2, 9, 0)) for x in rr: pass self.assertEqual(rr._cache, [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 5, 9, 0), datetime(1997, 9, 6, 9, 0), datetime(1997, 9, 7, 9, 0), datetime(1997, 9, 8, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 10, 9, 0), datetime(1997, 9, 11, 9, 0), datetime(1997, 9, 12, 9, 0), datetime(1997, 9, 13, 9, 0), datetime(1997, 9, 14, 9, 0), datetime(1997, 9, 15, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testCachePreContains(self): rr = rrule(DAILY, count=3, cache=True, dtstart=datetime(1997, 9, 2, 9, 0)) self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True) def testCachePostContains(self): rr = rrule(DAILY, count=3, cache=True, dtstart=datetime(1997, 9, 2, 9, 0)) for x in rr: pass self.assertEqual(datetime(1997, 9, 3, 9, 0) in rr, True) def testStr(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=3\n" )), [datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0)]) def testStrType(self): self.assertEqual(isinstance(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=3\n" ), rrule), True) def testStrForceSetType(self): self.assertEqual(isinstance(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=3\n" , forceset=True), rruleset), True) def testStrSetType(self): self.assertEqual(isinstance(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n" "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n" ), rruleset), True) def testStrCase(self): self.assertEqual(list(rrulestr( "dtstart:19970902T090000\n" "rrule:freq=yearly;count=3\n" )), [datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0)]) def testStrSpaces(self): self.assertEqual(list(rrulestr( " DTSTART:19970902T090000 " " RRULE:FREQ=YEARLY;COUNT=3 " )), [datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0)]) def testStrSpacesAndLines(self): self.assertEqual(list(rrulestr( " DTSTART:19970902T090000 \n" " \n" " RRULE:FREQ=YEARLY;COUNT=3 \n" )), [datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0)]) def testStrNoDTStart(self): self.assertEqual(list(rrulestr( "RRULE:FREQ=YEARLY;COUNT=3\n" , dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0)]) def testStrValueOnly(self): self.assertEqual(list(rrulestr( "FREQ=YEARLY;COUNT=3\n" , dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0)]) def testStrUnfold(self): self.assertEqual(list(rrulestr( "FREQ=YEA\n RLY;COUNT=3\n", unfold=True, dtstart=datetime(1997, 9, 2, 9, 0))), [datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0)]) def testStrSet(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n" "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n" )), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testStrSetDate(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TU\n" "RDATE:19970904T090000\n" "RDATE:19970909T090000\n" )), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testStrSetExRule(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n" "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n" )), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testStrSetExDate(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n" "EXDATE:19970904T090000\n" "EXDATE:19970911T090000\n" "EXDATE:19970918T090000\n" )), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testStrSetDateAndExDate(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RDATE:19970902T090000\n" "RDATE:19970904T090000\n" "RDATE:19970909T090000\n" "RDATE:19970911T090000\n" "RDATE:19970916T090000\n" "RDATE:19970918T090000\n" "EXDATE:19970904T090000\n" "EXDATE:19970911T090000\n" "EXDATE:19970918T090000\n" )), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testStrSetDateAndExRule(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RDATE:19970902T090000\n" "RDATE:19970904T090000\n" "RDATE:19970909T090000\n" "RDATE:19970911T090000\n" "RDATE:19970916T090000\n" "RDATE:19970918T090000\n" "EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n" )), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testStrKeywords(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=3;INTERVAL=3;" "BYMONTH=3;BYWEEKDAY=TH;BYMONTHDAY=3;" "BYHOUR=3;BYMINUTE=3;BYSECOND=3\n" )), [datetime(2033, 3, 3, 3, 3, 3), datetime(2039, 3, 3, 3, 3, 3), datetime(2072, 3, 3, 3, 3, 3)]) def testStrNWeekDay(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;COUNT=3;BYDAY=1TU,-1TH\n" )), [datetime(1997, 12, 25, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 12, 31, 9, 0)]) def testStrUntil(self): self.assertEqual(list(rrulestr( "DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;" "UNTIL=19990101T000000;BYDAY=1TU,-1TH\n" )), [datetime(1997, 12, 25, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 12, 31, 9, 0)]) def testStrInvalidUntil(self): with self.assertRaises(ValueError): list(rrulestr("DTSTART:19970902T090000\n" "RRULE:FREQ=YEARLY;" "UNTIL=TheCowsComeHome;BYDAY=1TU,-1TH\n")) def testStrEmptyByDay(self): with self.assertRaises(ValueError): list(rrulestr("DTSTART:19970902T090000\n" "FREQ=WEEKLY;" "BYDAY=;" # This part is invalid "WKST=SU")) def testStrInvalidByDay(self): with self.assertRaises(ValueError): list(rrulestr("DTSTART:19970902T090000\n" "FREQ=WEEKLY;" "BYDAY=-1OK;" # This part is invalid "WKST=SU")) def testBadBySetPos(self): self.assertRaises(ValueError, rrule, MONTHLY, count=1, bysetpos=0, dtstart=datetime(1997, 9, 2, 9, 0)) def testBadBySetPosMany(self): self.assertRaises(ValueError, rrule, MONTHLY, count=1, bysetpos=(-1, 0, 1), dtstart=datetime(1997, 9, 2, 9, 0)) # Tests to ensure that str(rrule) works def testToStrYearly(self): rule = rrule(YEARLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0)) self._rrulestr_reverse_test(rule) def testToStrYearlyInterval(self): rule = rrule(YEARLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0)) self._rrulestr_reverse_test(rule) def testToStrYearlyByMonth(self): rule = rrule(YEARLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0)) self._rrulestr_reverse_test(rule) def testToStrYearlyByMonth(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMonthDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMonthAndMonthDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByWeekDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByNWeekDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByNWeekDayLarge(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byweekday=(TU(3), TH(-3)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMonthAndWeekDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMonthAndNWeekDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMonthAndNWeekDayLarge(self): # This is interesting because the TH(-3) ends up before # the TU(3). self._rrulestr_reverse_test(rrule(YEARLY, count=3, bymonth=(1, 3), byweekday=(TU(3), TH(-3)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMonthAndMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByYearDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByYearDayNeg(self): self._rrulestr_reverse_test(rrule(YEARLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMonthAndYearDay(self): self._rrulestr_reverse_test(rrule(YEARLY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMonthAndYearDayNeg(self): self._rrulestr_reverse_test(rrule(YEARLY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByWeekNo(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByWeekNoAndWeekDay(self): # That's a nice one. The first days of week number one # may be in the last year. self._rrulestr_reverse_test(rrule(YEARLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByWeekNoAndWeekDayLarge(self): # Another nice test. The last days of week number 52/53 # may be in the next year. self._rrulestr_reverse_test(rrule(YEARLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByWeekNoAndWeekDayLast(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByEaster(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByEasterPos(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByEasterNeg(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByWeekNoAndWeekDay53(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByHour(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMinute(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyBySecond(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByHourAndMinute(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByHourAndSecond(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyByHourAndMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrYearlyBySetPos(self): self._rrulestr_reverse_test(rrule(YEARLY, count=3, bymonthday=15, byhour=(6, 18), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthly(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyInterval(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyIntervalLarge(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, interval=18, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonth(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonthDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonthAndMonthDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByWeekDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) # Third Monday of the month self.assertEqual(rrule(MONTHLY, byweekday=(MO(+3)), dtstart=datetime(1997, 9, 1)).between(datetime(1997, 9, 1), datetime(1997, 12, 1)), [datetime(1997, 9, 15, 0, 0), datetime(1997, 10, 20, 0, 0), datetime(1997, 11, 17, 0, 0)]) def testToStrMonthlyByNWeekDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByNWeekDayLarge(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byweekday=(TU(3), TH(-3)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonthAndWeekDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonthAndNWeekDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonthAndNWeekDayLarge(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bymonth=(1, 3), byweekday=(TU(3), TH(-3)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonthAndMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByYearDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByYearDayNeg(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonthAndYearDay(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMonthAndYearDayNeg(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByWeekNo(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByWeekNoAndWeekDay(self): # That's a nice one. The first days of week number one # may be in the last year. self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByWeekNoAndWeekDayLarge(self): # Another nice test. The last days of week number 52/53 # may be in the next year. self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByWeekNoAndWeekDayLast(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByWeekNoAndWeekDay53(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByEaster(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByEasterPos(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByEasterNeg(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByHour(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMinute(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyBySecond(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByHourAndMinute(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByHourAndSecond(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyByHourAndMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMonthlyBySetPos(self): self._rrulestr_reverse_test(rrule(MONTHLY, count=3, bymonthday=(13, 17), byhour=(6, 18), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeekly(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyInterval(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyIntervalLarge(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, interval=20, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMonth(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMonthDay(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMonthAndMonthDay(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByWeekDay(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByNWeekDay(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMonthAndWeekDay(self): # This test is interesting, because it crosses the year # boundary in a weekly period to find day '1' as a # valid recurrence. self._rrulestr_reverse_test(rrule(WEEKLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMonthAndNWeekDay(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMonthAndMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByYearDay(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByYearDayNeg(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMonthAndYearDay(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=4, bymonth=(1, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMonthAndYearDayNeg(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=4, bymonth=(1, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByWeekNo(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByWeekNoAndWeekDay(self): # That's a nice one. The first days of week number one # may be in the last year. self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByWeekNoAndWeekDayLarge(self): # Another nice test. The last days of week number 52/53 # may be in the next year. self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByWeekNoAndWeekDayLast(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByWeekNoAndWeekDay53(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByEaster(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByEasterPos(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByEasterNeg(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByHour(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMinute(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyBySecond(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByHourAndMinute(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByHourAndSecond(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyByHourAndMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrWeeklyBySetPos(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, byweekday=(TU, TH), byhour=(6, 18), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDaily(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyInterval(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyIntervalLarge(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, interval=92, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMonth(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMonthDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMonthAndMonthDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByWeekDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByNWeekDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMonthAndWeekDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMonthAndNWeekDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMonthAndMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByYearDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByYearDayNeg(self): self._rrulestr_reverse_test(rrule(DAILY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMonthAndYearDay(self): self._rrulestr_reverse_test(rrule(DAILY, count=4, bymonth=(1, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMonthAndYearDayNeg(self): self._rrulestr_reverse_test(rrule(DAILY, count=4, bymonth=(1, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByWeekNo(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByWeekNoAndWeekDay(self): # That's a nice one. The first days of week number one # may be in the last year. self._rrulestr_reverse_test(rrule(DAILY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByWeekNoAndWeekDayLarge(self): # Another nice test. The last days of week number 52/53 # may be in the next year. self._rrulestr_reverse_test(rrule(DAILY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByWeekNoAndWeekDayLast(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByWeekNoAndWeekDay53(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByEaster(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByEasterPos(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByEasterNeg(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByHour(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMinute(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyBySecond(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByHourAndMinute(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByHourAndSecond(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyByHourAndMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrDailyBySetPos(self): self._rrulestr_reverse_test(rrule(DAILY, count=3, byhour=(6, 18), byminute=(15, 45), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourly(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyInterval(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyIntervalLarge(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, interval=769, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMonth(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMonthDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMonthAndMonthDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByWeekDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByNWeekDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMonthAndWeekDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMonthAndNWeekDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMonthAndMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByYearDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByYearDayNeg(self): self._rrulestr_reverse_test(rrule(HOURLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMonthAndYearDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMonthAndYearDayNeg(self): self._rrulestr_reverse_test(rrule(HOURLY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByWeekNo(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByWeekNoAndWeekDay(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByWeekNoAndWeekDayLarge(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByWeekNoAndWeekDayLast(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByWeekNoAndWeekDay53(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByEaster(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByEasterPos(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByEasterNeg(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByHour(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMinute(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyBySecond(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByHourAndMinute(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByHourAndSecond(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyByHourAndMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrHourlyBySetPos(self): self._rrulestr_reverse_test(rrule(HOURLY, count=3, byminute=(15, 45), bysecond=(15, 45), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutely(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyInterval(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyIntervalLarge(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, interval=1501, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMonth(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMonthDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMonthAndMonthDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByWeekDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByNWeekDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMonthAndWeekDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMonthAndNWeekDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMonthAndMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByYearDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByYearDayNeg(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMonthAndYearDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMonthAndYearDayNeg(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByWeekNo(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByWeekNoAndWeekDay(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByWeekNoAndWeekDayLarge(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByWeekNoAndWeekDayLast(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByWeekNoAndWeekDay53(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByEaster(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByEasterPos(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByEasterNeg(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByHour(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMinute(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyBySecond(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByHourAndMinute(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByHourAndSecond(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyByHourAndMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrMinutelyBySetPos(self): self._rrulestr_reverse_test(rrule(MINUTELY, count=3, bysecond=(15, 30, 45), bysetpos=(3, -3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondly(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyInterval(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, interval=2, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyIntervalLarge(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, interval=90061, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMonth(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, bymonth=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMonthDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, bymonthday=(1, 3), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMonthAndMonthDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, bymonth=(1, 3), bymonthday=(5, 7), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByWeekDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByNWeekDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMonthAndWeekDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, bymonth=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMonthAndNWeekDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, bymonth=(1, 3), byweekday=(TU(1), TH(-1)), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMonthAndMonthDayAndWeekDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, bymonth=(1, 3), bymonthday=(1, 3), byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByYearDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=4, byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByYearDayNeg(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=4, byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMonthAndYearDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=4, bymonth=(4, 7), byyearday=(1, 100, 200, 365), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMonthAndYearDayNeg(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=4, bymonth=(4, 7), byyearday=(-365, -266, -166, -1), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByWeekNo(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byweekno=20, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByWeekNoAndWeekDay(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byweekno=1, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByWeekNoAndWeekDayLarge(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byweekno=52, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByWeekNoAndWeekDayLast(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byweekno=-1, byweekday=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByWeekNoAndWeekDay53(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byweekno=53, byweekday=MO, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByEaster(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byeaster=0, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByEasterPos(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byeaster=1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByEasterNeg(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byeaster=-1, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByHour(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byhour=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMinute(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyBySecond(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByHourAndMinute(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byhour=(6, 18), byminute=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByHourAndSecond(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byhour=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByHourAndMinuteAndSecond(self): self._rrulestr_reverse_test(rrule(SECONDLY, count=3, byhour=(6, 18), byminute=(6, 18), bysecond=(6, 18), dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrSecondlyByHourAndMinuteAndSecondBug(self): # This explores a bug found by Mathieu Bridon. self._rrulestr_reverse_test(rrule(SECONDLY, count=3, bysecond=(0,), byminute=(1,), dtstart=datetime(2010, 3, 22, 12, 1))) def testToStrWithWkSt(self): self._rrulestr_reverse_test(rrule(WEEKLY, count=3, wkst=SU, dtstart=datetime(1997, 9, 2, 9, 0))) def testToStrLongIntegers(self): if not PY3: # There is no longs in python3 self._rrulestr_reverse_test(rrule(MINUTELY, count=long(2), interval=long(2), bymonth=long(2), byweekday=long(3), byhour=long(6), byminute=long(6), bysecond=long(6), dtstart=datetime(1997, 9, 2, 9, 0))) self._rrulestr_reverse_test(rrule(YEARLY, count=long(2), bymonthday=long(5), byweekno=long(2), dtstart=datetime(1997, 9, 2, 9, 0))) def testReplaceIfSet(self): rr = rrule(YEARLY, count=1, bymonthday=5, dtstart=datetime(1997, 1, 1)) newrr = rr.replace(bymonthday=6) self.assertEqual(list(rr), [datetime(1997, 1, 5)]) self.assertEqual(list(newrr), [datetime(1997, 1, 6)]) def testReplaceIfNotSet(self): rr = rrule(YEARLY, count=1, dtstart=datetime(1997, 1, 1)) newrr = rr.replace(bymonthday=6) self.assertEqual(list(rr), [datetime(1997, 1, 1)]) self.assertEqual(list(newrr), [datetime(1997, 1, 6)]) class RRuleSetTest(unittest.TestCase): def testSet(self): rrset = rruleset() rrset.rrule(rrule(YEARLY, count=2, byweekday=TU, dtstart=datetime(1997, 9, 2, 9, 0))) rrset.rrule(rrule(YEARLY, count=1, byweekday=TH, dtstart=datetime(1997, 9, 2, 9, 0))) self.assertEqual(list(rrset), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testSetDate(self): rrset = rruleset() rrset.rrule(rrule(YEARLY, count=1, byweekday=TU, dtstart=datetime(1997, 9, 2, 9, 0))) rrset.rdate(datetime(1997, 9, 4, 9)) rrset.rdate(datetime(1997, 9, 9, 9)) self.assertEqual(list(rrset), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testSetExRule(self): rrset = rruleset() rrset.rrule(rrule(YEARLY, count=6, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) rrset.exrule(rrule(YEARLY, count=3, byweekday=TH, dtstart=datetime(1997, 9, 2, 9, 0))) self.assertEqual(list(rrset), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testSetExDate(self): rrset = rruleset() rrset.rrule(rrule(YEARLY, count=6, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) rrset.exdate(datetime(1997, 9, 4, 9)) rrset.exdate(datetime(1997, 9, 11, 9)) rrset.exdate(datetime(1997, 9, 18, 9)) self.assertEqual(list(rrset), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testSetExDateRevOrder(self): rrset = rruleset() rrset.rrule(rrule(MONTHLY, count=5, bymonthday=10, dtstart=datetime(2004, 1, 1, 9, 0))) rrset.exdate(datetime(2004, 4, 10, 9, 0)) rrset.exdate(datetime(2004, 2, 10, 9, 0)) self.assertEqual(list(rrset), [datetime(2004, 1, 10, 9, 0), datetime(2004, 3, 10, 9, 0), datetime(2004, 5, 10, 9, 0)]) def testSetDateAndExDate(self): rrset = rruleset() rrset.rdate(datetime(1997, 9, 2, 9)) rrset.rdate(datetime(1997, 9, 4, 9)) rrset.rdate(datetime(1997, 9, 9, 9)) rrset.rdate(datetime(1997, 9, 11, 9)) rrset.rdate(datetime(1997, 9, 16, 9)) rrset.rdate(datetime(1997, 9, 18, 9)) rrset.exdate(datetime(1997, 9, 4, 9)) rrset.exdate(datetime(1997, 9, 11, 9)) rrset.exdate(datetime(1997, 9, 18, 9)) self.assertEqual(list(rrset), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testSetDateAndExRule(self): rrset = rruleset() rrset.rdate(datetime(1997, 9, 2, 9)) rrset.rdate(datetime(1997, 9, 4, 9)) rrset.rdate(datetime(1997, 9, 9, 9)) rrset.rdate(datetime(1997, 9, 11, 9)) rrset.rdate(datetime(1997, 9, 16, 9)) rrset.rdate(datetime(1997, 9, 18, 9)) rrset.exrule(rrule(YEARLY, count=3, byweekday=TH, dtstart=datetime(1997, 9, 2, 9, 0))) self.assertEqual(list(rrset), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0)]) def testSetCount(self): rrset = rruleset() rrset.rrule(rrule(YEARLY, count=6, byweekday=(TU, TH), dtstart=datetime(1997, 9, 2, 9, 0))) rrset.exrule(rrule(YEARLY, count=3, byweekday=TH, dtstart=datetime(1997, 9, 2, 9, 0))) self.assertEqual(rrset.count(), 3) def testSetCachePre(self): rrset = rruleset() rrset.rrule(rrule(YEARLY, count=2, byweekday=TU, dtstart=datetime(1997, 9, 2, 9, 0))) rrset.rrule(rrule(YEARLY, count=1, byweekday=TH, dtstart=datetime(1997, 9, 2, 9, 0))) self.assertEqual(list(rrset), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testSetCachePost(self): rrset = rruleset(cache=True) rrset.rrule(rrule(YEARLY, count=2, byweekday=TU, dtstart=datetime(1997, 9, 2, 9, 0))) rrset.rrule(rrule(YEARLY, count=1, byweekday=TH, dtstart=datetime(1997, 9, 2, 9, 0))) for x in rrset: pass self.assertEqual(list(rrset), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testSetCachePostInternal(self): rrset = rruleset(cache=True) rrset.rrule(rrule(YEARLY, count=2, byweekday=TU, dtstart=datetime(1997, 9, 2, 9, 0))) rrset.rrule(rrule(YEARLY, count=1, byweekday=TH, dtstart=datetime(1997, 9, 2, 9, 0))) for x in rrset: pass self.assertEqual(list(rrset._cache), [datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0)]) def testSetRRuleCount(self): # Test that the count is updated when an rrule is added rrset = rruleset(cache=False) for cache in (True, False): rrset = rruleset(cache=cache) rrset.rrule(rrule(YEARLY, count=2, byweekday=TH, dtstart=datetime(1983, 4, 1))) rrset.rrule(rrule(WEEKLY, count=4, byweekday=FR, dtstart=datetime(1991, 6, 3))) # Check the length twice - first one sets a cache, second reads it self.assertEqual(rrset.count(), 6) self.assertEqual(rrset.count(), 6) # This should invalidate the cache and force an update rrset.rrule(rrule(MONTHLY, count=3, dtstart=datetime(1994, 1, 3))) self.assertEqual(rrset.count(), 9) self.assertEqual(rrset.count(), 9) def testSetRDateCount(self): # Test that the count is updated when an rdate is added rrset = rruleset(cache=False) for cache in (True, False): rrset = rruleset(cache=cache) rrset.rrule(rrule(YEARLY, count=2, byweekday=TH, dtstart=datetime(1983, 4, 1))) rrset.rrule(rrule(WEEKLY, count=4, byweekday=FR, dtstart=datetime(1991, 6, 3))) # Check the length twice - first one sets a cache, second reads it self.assertEqual(rrset.count(), 6) self.assertEqual(rrset.count(), 6) # This should invalidate the cache and force an update rrset.rdate(datetime(1993, 2, 14)) self.assertEqual(rrset.count(), 7) self.assertEqual(rrset.count(), 7) def testSetExRuleCount(self): # Test that the count is updated when an exrule is added rrset = rruleset(cache=False) for cache in (True, False): rrset = rruleset(cache=cache) rrset.rrule(rrule(YEARLY, count=2, byweekday=TH, dtstart=datetime(1983, 4, 1))) rrset.rrule(rrule(WEEKLY, count=4, byweekday=FR, dtstart=datetime(1991, 6, 3))) # Check the length twice - first one sets a cache, second reads it self.assertEqual(rrset.count(), 6) self.assertEqual(rrset.count(), 6) # This should invalidate the cache and force an update rrset.exrule(rrule(WEEKLY, count=2, interval=2, dtstart=datetime(1991, 6, 14))) self.assertEqual(rrset.count(), 4) self.assertEqual(rrset.count(), 4) def testSetExDateCount(self): # Test that the count is updated when an rdate is added for cache in (True, False): rrset = rruleset(cache=cache) rrset.rrule(rrule(YEARLY, count=2, byweekday=TH, dtstart=datetime(1983, 4, 1))) rrset.rrule(rrule(WEEKLY, count=4, byweekday=FR, dtstart=datetime(1991, 6, 3))) # Check the length twice - first one sets a cache, second reads it self.assertEqual(rrset.count(), 6) self.assertEqual(rrset.count(), 6) # This should invalidate the cache and force an update rrset.exdate(datetime(1991, 6, 28)) self.assertEqual(rrset.count(), 5) self.assertEqual(rrset.count(), 5) class WeekdayTest(unittest.TestCase): def testInvalidNthWeekday(self): with self.assertRaises(ValueError): zeroth_friday = FR(0) def testWeekdayCallable(self): # Calling a weekday instance generates a new weekday instance with the # value of n changed. from dateutil.rrule import weekday self.assertEqual(MO(1), weekday(0, 1)) # Calling a weekday instance with the identical n returns the original # object FR_3 = weekday(4, 3) self.assertIs(FR_3(3), FR_3) def testWeekdayEquality(self): # Two weekday objects are not equal if they have different values for n self.assertNotEqual(TH, TH(-1)) self.assertNotEqual(SA(3), SA(2)) def testWeekdayEqualitySubclass(self): # Two weekday objects equal if their "weekday" and "n" attributes are # available and the same class BasicWeekday(object): def __init__(self, weekday): self.weekday = weekday class BasicNWeekday(BasicWeekday): def __init__(self, weekday, n=None): super(BasicNWeekday, self).__init__(weekday) self.n = n MO_Basic = BasicWeekday(0) self.assertNotEqual(MO, MO_Basic) self.assertNotEqual(MO(1), MO_Basic) TU_BasicN = BasicNWeekday(1) self.assertEqual(TU, TU_BasicN) self.assertNotEqual(TU(3), TU_BasicN) WE_Basic3 = BasicNWeekday(2, 3) self.assertEqual(WE(3), WE_Basic3) self.assertNotEqual(WE(2), WE_Basic3) def testWeekdayReprNoN(self): no_n_reprs = ('MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU') no_n_wdays = (MO, TU, WE, TH, FR, SA, SU) for repstr, wday in zip(no_n_reprs, no_n_wdays): self.assertEqual(repr(wday), repstr) def testWeekdayReprWithN(self): with_n_reprs = ('WE(+1)', 'TH(-2)', 'SU(+3)') with_n_wdays = (WE(1), TH(-2), SU(+3)) for repstr, wday in zip(with_n_reprs, with_n_wdays): self.assertEqual(repr(wday), repstr)