def test_describe(self): self.assertEqual(Schedule('d').describe(), 'Day') self.assertEqual(Schedule('m').describe(), 'Month') self.assertEqual(Schedule('y').describe(), 'Year') self.assertEqual(Schedule('x').describe(), 'All') self.assertEqual( Schedule('x[fri]2018-07-06-').describe(), 'Extended[fri]')
def test_error_messages(self): with self.assertRaisesRegex(Exception, r'Cannot parse "z"'): Schedule('z') with self.assertRaisesRegex(Exception, r'Cannot parse "z2018-10-07-"'): Schedule('z2018-10-07-') with self.assertRaisesRegex( Exception, r'Numbered locations in daily frames not supported'): Schedule('d[1mon]') with self.assertRaisesRegex( Exception, r'Repetition and offset not supported by extended frames'): Schedule('2x')
def test_schedule(args, db): ''' ## test-schedule > ch2 test-schedule SCHEDULE Print a calendar showing how the given schedule is interpreted. ### Example > ch2 test-schedule 2w[1mon,2sun] (Try it and see) ''' schedule, start, months = Schedule(args[SCHEDULE]), to_date( args[START], none=True), args[MONTHS] if not start: start = dt.date.today() start = dt.date(start.year, start.month, 1) if not months: months = 3 print_calendar(schedule, start, months)
def test_extended(self): # from the spec doc self.assert_str(Schedule('x2018-10-07-'), 'x2018-10-07-') self.assert_str(Schedule('x[1,2,3]2020-03-06-'), 'x[1,2,3]2020-03-06-') self.assert_str(Schedule('x[fri]2020-03-06-'), 'x[fri]2020-03-06-') self.assert_bad(Schedule, 'x[1,2,3]') # no range start self.assert_bad(Schedule, '2018-10-07x') # no offset self.assert_bad(Schedule, '2x') # no multiple repeat self.assert_at('x', '2018-07-06', True) # single day range self.assert_at('x2018-07-06', '2018-07-05', False) self.assert_at('x2018-07-06', '2018-07-06', True) self.assert_at('x2018-07-06', '2018-07-07', False) # from date onwards self.assert_at('x2018-07-06-', '2018-07-05', False) self.assert_at('x2018-07-06-', '2018-07-06', True) self.assert_at('x2018-07-06-', '2018-07-07', True) # until date self.assert_at('x-2018-07-06', '2018-07-05', True) self.assert_at('x-2018-07-06', '2018-07-06', False) self.assert_at('x-2018-07-06', '2018-07-07', False) # numbered locations with start of range self.assert_at('x[1,2,3]2018-07-06-', '2018-07-05', False) self.assert_at('x[1,2,3]2018-07-06-', '2018-07-06', True) self.assert_at('x[1,2,3]2018-07-06-', '2018-07-07', True) self.assert_at('x[1,2,3]2018-07-06-', '2018-07-08', True) self.assert_at('x[1,2,3]2018-07-06-', '2018-07-09', False) # named locations with start of range self.assert_at('x[fri]2018-07-06-', '2018-07-05', False) self.assert_at('x[fri]2018-07-06-', '2018-07-06', True) self.assert_at('x[fri]2018-07-06-', '2018-07-07', False) # named locations with no range self.assert_at('x[fri]', '2018-07-05', False) self.assert_at('x[fri]', '2018-07-06', True) self.assert_at('x[fri]', '2018-07-07', False) s = Schedule('x') self.assertEqual(s.start_of_frame('2018-01-02'), to_date('1970-01-02')) self.assertEqual(s.start, None) self.assertEqual(s.finish, None) # this is not None because it is used to set end dates for repeating intervals self.assertEqual(s.next_frame('2018-01-02'), POS_INFINITY)
def test_start_finish(self): p = Schedule('2018-07-08/2d2018-07-08-2018-07-09') self.assertEqual(p.start, dt.date(2018, 7, 8)) p.start = None self.assertTrue(p.start is None) self.assertEqual(p.finish, dt.date(2018, 7, 9))
def assert_str(self, x1, s): s1 = str(x1) self.assertEqual(s1, s) x2 = Schedule(s1) s2 = str(x2) self.assertEqual(s1, s2)
def assert_at(self, spec, date, at_location): date = to_date(date) self.assertEqual(Schedule(spec).at_location(date), at_location)
def test_specification(self): # from the spec doc self.assert_str(Schedule('m[2Tue]'), 'm[2tue]') self.assert_str(Schedule('2m[2Tue]'), '2m[2tue]') self.assert_str(Schedule('1/2m[2Tue]'), '1/2m[2tue]') self.assert_str(Schedule('m[2Tue]1970-01-01-1970-12-31'), 'm[2tue]1970-01-01-1970-12-31') self.assert_str(Schedule('2018-07-05/5d[]'), '2/5d') self.assert_str(Schedule('d2018-07-05'), '2018-07-05') # others self.assert_str(Schedule('1/2w[1]2018-01-01-'), '1/2w[1]2018-01-01-') self.assert_str(Schedule('1/2w[2Mon,Fri,2,3]-1970-01-01'), '1/2w[2,3,fri,2mon]-1970-01-01') # some errors self.assert_bad(Schedule, '1/2[]2018-01-01-') # must specify type self.assert_bad( Schedule, '1/2w[1d]2018-01-01-') # no longer support type in location # some additional shortcuts for easier config self.assert_str(Schedule('-2019-10-07'), '-2019-10-07') self.assert_str(Schedule('2019-10-07-'), '2019-10-07-') self.assert_str(Schedule('2019-10-07'), '2019-10-07')
def test_frame_start(self): s = Schedule('2018-01-01/2y') self.assertEqual(s.start_of_frame('2018-01-02'), to_date('2018-01-01')) self.assertEqual(s.start_of_frame('2017-01-02'), to_date('2016-01-01'))