def test_(self): date = RecurringEvent(NOW) val = date.parse(string) expected_params = expected known_failure = False if isinstance(expected, ExpectedFailure): known_failure = True expected_params = expected.correct_value try: if expected_params is None: self.assertTrue( val is None or date.get_params().keys() == ["interval"], "Non-date error: '%s' -> '%s', expected '%s'" % (string, val, expected_params), ) elif isinstance(expected_params, datetime.datetime) or isinstance(expected_params, datetime.date): if isinstance(expected_params, datetime.datetime): self.assertEqual( val, expected_params, "Date parse error: '%s' -> '%s', expected '%s'" % (string, val, expected_params), ) else: self.assertEqual( val.date(), expected_params, "Date parse error: '%s' -> '%s', expected '%s'" % (string, val, expected_params), ) else: actual_params = date.get_params() for k, v in expected_params.items(): av = actual_params.pop(k, None) self.assertEqual( av, v, "Rule mismatch on rule '%s' for '%s'. Expected %s, got %s\nRules: %s" % (k, string, v, av, date.get_params()), ) # make sure any extra params are empty/false for k, v in actual_params.items(): self.assertFalse(v) # ensure rrule string can be parsed by dateutil rrule.rrulestr(val) except AssertionError as e: if known_failure: print("Expected failure:", expected_params) return raise e if known_failure: raise AssertionError("Known failure passed:", expected_params, string)
def test_(self): date = RecurringEvent(NOW) val = date.parse(string) expected_params = expected known_failure = False if isinstance(expected, ExpectedFailure): known_failure = True expected_params = expected.correct_value try: if expected_params is None: self.assertTrue( val is None or date.get_params().keys() == ['interval'], "Non-date error: '%s' -> '%s', expected '%s'" % (string, val, expected_params)) elif isinstance(expected_params, datetime.datetime) or isinstance( expected_params, datetime.date): if isinstance(expected_params, datetime.datetime): self.assertEqual( val, expected_params, "Date parse error: '%s' -> '%s', expected '%s'" % (string, val, expected_params)) else: self.assertEqual( val.date(), expected_params, "Date parse error: '%s' -> '%s', expected '%s'" % (string, val, expected_params)) else: actual_params = date.get_params() for k, v in expected_params.items(): av = actual_params.pop(k, None) self.assertEqual( av, v, "Rule mismatch on rule '%s' for '%s'. Expected %s, got %s\nRules: %s" % (k, string, v, av, date.get_params())) # make sure any extra params are empty/false for k, v in actual_params.items(): self.assertFalse(v) # ensure rrule string can be parsed by dateutil rrule.rrulestr(val) except AssertionError as e: if known_failure: print("Expected failure:", expected_params) return raise e if known_failure: raise AssertionError("Known failure passed:", expected_params, string)
def test_rrule_string(self): string = 'every day starting feb 2' date = RecurringEvent(NOW) date.parse(string) expected = """DTSTART:20100202\nRRULE:FREQ=DAILY;INTERVAL=1""" self.assertEqual(expected, date.get_RFC_rrule())
def test_return_non_date(self): string = 'remember to call mitchell' date = RecurringEvent() ret = date.parse(string) self.assertFalse(ret)
def test_return_non_recurring2(self): string = 'next wednesday' date = RecurringEvent() ret = date.parse(string) self.assertTrue(isinstance(ret, datetime.datetime))
def test_return_non_recurring(self): string = 'march 3rd, 2001' date = RecurringEvent() ret = date.parse(string) self.assertTrue(isinstance(ret, datetime.datetime))
def test_return_recurring(self): string = 'every day' date = RecurringEvent() ret = date.parse(string) self.assertTrue(isinstance(ret, str))
def parse(s, now=None): return RecurringEvent(now).parse(s)