Beispiel #1
0
    def test_test_format(self):
        datetime_type = DateTime(datetime_format='%m-%d-%Y %I:%M %p')

        self.assertEqual(datetime_type.test('3/1/1994 12:30 PM'), False)
        self.assertEqual(datetime_type.test('03-01-1994 12:30 PM'), True)
        self.assertEqual(
            datetime_type.test(datetime.datetime(1994, 3, 1, 12, 30)), True)
Beispiel #2
0
class TestDateTime(unittest.TestCase):
    def setUp(self):
        self.type = DateTime()

    def test_test(self):
        self.assertEqual(self.type.test(None), True)
        self.assertEqual(self.type.test('N/A'), True)
        self.assertEqual(self.type.test(True), False)
        self.assertEqual(self.type.test('True'), False)
        self.assertEqual(self.type.test(1), False)
        self.assertEqual(self.type.test(Decimal('1')), False)
        self.assertEqual(self.type.test('2.7'), True)
        self.assertEqual(self.type.test(2.7), False)
        self.assertEqual(self.type.test('3/1/1994'), True)
        self.assertEqual(self.type.test(datetime.date(1994, 3, 1)), True)
        self.assertEqual(self.type.test('3/1/1994 12:30 PM'), True)
        self.assertEqual(self.type.test('2015-01-01 02:34'), True)
        self.assertEqual(self.type.test(datetime.datetime(1994, 3, 1, 12, 30)),
                         True)
        self.assertEqual(self.type.test('4:10'), False)
        self.assertEqual(
            self.type.test(datetime.timedelta(hours=4, minutes=10)), False)
        self.assertEqual(self.type.test('a'), False)
        self.assertEqual(self.type.test('A\nB'), False)
        self.assertEqual(self.type.test(u'👍'), False)
        self.assertEqual(self.type.test('05_leslie3d_base'), False)
        self.assertEqual(self.type.test('2016-12-29'), True)
        self.assertEqual(self.type.test('2016-12-29T11:43:30Z'), True)
        self.assertEqual(self.type.test('2016-12-29T11:43:30+06:00'), True)
        self.assertEqual(self.type.test('2016-12-29T11:43:30-06:00'), True)
        self.assertEqual(self.type.test('720(38-4)31A-1.1(A)'), False)

    def test_test_format(self):
        datetime_type = DateTime(datetime_format='%m-%d-%Y %I:%M %p')

        self.assertEqual(datetime_type.test('3/1/1994 12:30 PM'), False)
        self.assertEqual(datetime_type.test('03-01-1994 12:30 PM'), True)
        self.assertEqual(
            datetime_type.test(datetime.datetime(1994, 3, 1, 12, 30)), True)

    def test_iso_format(self):
        values = ('1994-03-01T12:30:00', '2011-02-17T06:30')
        casted = tuple(self.type.cast(v) for v in values)
        self.assertSequenceEqual(casted, (datetime.datetime(
            1994, 3, 1, 12, 30, 0), datetime.datetime(2011, 2, 17, 6, 30, 0)))

    def test_cast_parser(self):
        values = ('3/1/1994 12:30 PM', '2/17/2011 06:30', None,
                  'January 5th, 1984 22:37', 'n/a', '2015-01-01 02:34')
        casted = tuple(self.type.cast(v) for v in values)
        self.assertSequenceEqual(
            casted, (datetime.datetime(1994, 3, 1, 12, 30, 0),
                     datetime.datetime(2011, 2, 17, 6, 30, 0), None,
                     datetime.datetime(1984, 1, 5, 22, 37, 0), None,
                     datetime.datetime(2015, 1, 1, 2, 34, 0)))

    def test_cast_parser_timezone(self):
        tzinfo = pytz.timezone('US/Pacific')
        datetime_type = DateTime(timezone=tzinfo)

        values = ('3/1/1994 12:30 PM', '2/17/2011 06:30', None,
                  'January 5th, 1984 22:37', 'n/a')
        casted = tuple(datetime_type.cast(v) for v in values)
        self.assertSequenceEqual(
            casted,
            (tzinfo.localize(datetime.datetime(1994, 3, 1, 12, 30, 0, 0)),
             tzinfo.localize(datetime.datetime(2011, 2, 17, 6, 30, 0, 0)),
             None, tzinfo.localize(datetime.datetime(1984, 1, 5, 22, 37, 0,
                                                     0)), None))

    def test_cast_format(self):
        datetime_type = DateTime(datetime_format='%m-%d-%Y %I:%M %p')

        values = ('03-01-1994 12:30 PM', '02-17-2011 06:30 AM', None,
                  '01-05-1984 06:30 PM', 'n/a')
        casted = tuple(datetime_type.cast(v) for v in values)
        self.assertSequenceEqual(
            casted, (datetime.datetime(1994, 3, 1, 12, 30, 0),
                     datetime.datetime(2011, 2, 17, 6, 30, 0), None,
                     datetime.datetime(1984, 1, 5, 18, 30, 0), None))

    def test_cast_format_locale(self):
        date_type = DateTime(datetime_format='%Y-%m-%d %I:%M %p',
                             locale='ko_KR.UTF-8')

        # Date formats depend on the platform's strftime/strptime implementation;
        # some platforms like macOS always return AM/PM for day periods (%p),
        # so we will catch any CastError that may arise from the conversion
        possible_values = (
            ('1994-03-01 12:30 오후', '2011-02-17 06:30 오전', None,
             '1984-01-05 06:30 오후', 'n/a'),
            ('1994-03-01 12:30 PM', '2011-02-17 06:30 AM', None,
             '1984-01-05 06:30 PM', 'n/a'),
        )
        valid = False
        exceptions = []
        for values in possible_values:
            try:
                casted = tuple(date_type.cast(v) for v in values)
            except CastError as e:
                exceptions.append(repr(e))
                continue
            self.assertSequenceEqual(
                casted, (datetime.datetime(1994, 3, 1, 12, 30, 0),
                         datetime.datetime(2011, 2, 17, 6, 30, 0), None,
                         datetime.datetime(1984, 1, 5, 18, 30, 0), None))
            valid = True
        if not valid:
            raise AssertionError('\n\n'.join(exceptions))

    def test_cast_locale(self):
        date_type = DateTime(locale='fr_FR')

        values = ('01/03/1994 12:30', '17/2/11 6:30', None, '5/01/84 18:30',
                  'n/a')
        casted = tuple(date_type.cast(v) for v in values)
        self.assertSequenceEqual(
            casted, (datetime.datetime(1994, 3, 1, 12, 30, 0),
                     datetime.datetime(2011, 2, 17, 6, 30, 0), None,
                     datetime.datetime(1984, 1, 5, 18, 30, 0), None))

    def test_cast_error(self):
        with self.assertRaises(CastError):
            self.type.cast('quack')

    def test_pickle_parser(self):
        from_pickle = pickle.loads(pickle.dumps(self.type))
        self.assertEqual(from_pickle.datetime_format,
                         self.type.datetime_format)
        self.assertEqual(from_pickle.timezone, self.type.timezone)
        self.assertEqual(from_pickle.locale, self.type.locale)
        self.assertEqual(from_pickle._source_time, self.type._source_time)
        self.assertIsInstance(from_pickle._constants, parsedatetime.Constants)
        self.assertIsInstance(from_pickle._parser, parsedatetime.Calendar)