(self)
| 42 | parse_time("09:15:90") |
| 43 | |
| 44 | def test_parse_datetime(self): |
| 45 | valid_inputs = ( |
| 46 | ("2012-04-23", datetime(2012, 4, 23)), |
| 47 | ("2012-04-23T09:15:00", datetime(2012, 4, 23, 9, 15)), |
| 48 | ("2012-4-9 4:8:16", datetime(2012, 4, 9, 4, 8, 16)), |
| 49 | ( |
| 50 | "2012-04-23T09:15:00Z", |
| 51 | datetime(2012, 4, 23, 9, 15, 0, 0, get_fixed_timezone(0)), |
| 52 | ), |
| 53 | ( |
| 54 | "2012-4-9 4:8:16-0320", |
| 55 | datetime(2012, 4, 9, 4, 8, 16, 0, get_fixed_timezone(-200)), |
| 56 | ), |
| 57 | ( |
| 58 | "2012-04-23T10:20:30.400+02:30", |
| 59 | datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(150)), |
| 60 | ), |
| 61 | ( |
| 62 | "2012-04-23T10:20:30.400+02", |
| 63 | datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(120)), |
| 64 | ), |
| 65 | ( |
| 66 | "2012-04-23T10:20:30.400-02", |
| 67 | datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(-120)), |
| 68 | ), |
| 69 | ( |
| 70 | "2012-04-23T10:20:30,400-02", |
| 71 | datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(-120)), |
| 72 | ), |
| 73 | ( |
| 74 | "2012-04-23T10:20:30.400 +0230", |
| 75 | datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(150)), |
| 76 | ), |
| 77 | ( |
| 78 | "2012-04-23T10:20:30,400 +00", |
| 79 | datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(0)), |
| 80 | ), |
| 81 | ( |
| 82 | "2012-04-23T10:20:30 -02", |
| 83 | datetime(2012, 4, 23, 10, 20, 30, 0, get_fixed_timezone(-120)), |
| 84 | ), |
| 85 | ) |
| 86 | for source, expected in valid_inputs: |
| 87 | with self.subTest(source=source): |
| 88 | self.assertEqual(parse_datetime(source), expected) |
| 89 | |
| 90 | # Invalid inputs |
| 91 | self.assertIsNone(parse_datetime("20120423091500")) |
| 92 | with self.assertRaises(ValueError): |
| 93 | parse_datetime("2012-04-56T09:15:90") |
| 94 | |
| 95 | |
| 96 | class DurationParseTests(unittest.TestCase): |
nothing calls this directly
no test coverage detected