Ejemplo n.º 1
0
 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]')
Ejemplo n.º 2
0
 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')
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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))
Ejemplo n.º 6
0
 def assert_str(self, x1, s):
     s1 = str(x1)
     self.assertEqual(s1, s)
     x2 = Schedule(s1)
     s2 = str(x2)
     self.assertEqual(s1, s2)
Ejemplo n.º 7
0
 def assert_at(self, spec, date, at_location):
     date = to_date(date)
     self.assertEqual(Schedule(spec).at_location(date), at_location)
Ejemplo n.º 8
0
 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')
Ejemplo n.º 9
0
 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'))