|
|
# -*- coding: utf-8 -*-
# Copyright (c) 2021, Brandon Nielsen # All rights reserved. # # This software may be modified and distributed under the terms # of the BSD license. See the LICENSE file for details.
import unittest
import aniso8601 from aniso8601.date import get_date_resolution, parse_date from aniso8601.exceptions import DayOutOfBoundsError, ISOFormatError from aniso8601.resolution import DateResolution from aniso8601.tests.compat import mock
class TestDateResolutionFunctions(unittest.TestCase): def test_get_date_resolution_year(self): self.assertEqual(get_date_resolution("2013"), DateResolution.Year) self.assertEqual(get_date_resolution("0001"), DateResolution.Year) self.assertEqual(get_date_resolution("19"), DateResolution.Year)
def test_get_date_resolution_month(self): self.assertEqual(get_date_resolution("1981-04"), DateResolution.Month)
def test_get_date_resolution_week(self): self.assertEqual(get_date_resolution("2004-W53"), DateResolution.Week) self.assertEqual(get_date_resolution("2009-W01"), DateResolution.Week) self.assertEqual(get_date_resolution("2004W53"), DateResolution.Week)
def test_get_date_resolution_day(self): self.assertEqual(get_date_resolution("2004-04-11"), DateResolution.Day) self.assertEqual(get_date_resolution("20090121"), DateResolution.Day)
def test_get_date_resolution_year_weekday(self): self.assertEqual(get_date_resolution("2004-W53-6"), DateResolution.Weekday) self.assertEqual(get_date_resolution("2004W536"), DateResolution.Weekday)
def test_get_date_resolution_year_ordinal(self): self.assertEqual(get_date_resolution("1981-095"), DateResolution.Ordinal) self.assertEqual(get_date_resolution("1981095"), DateResolution.Ordinal)
def test_get_date_resolution_badtype(self): testtuples = (None, 1, False, 1.234)
for testtuple in testtuples: with self.assertRaises(ValueError): get_date_resolution(testtuple)
def test_get_date_resolution_extended_year(self): testtuples = ("+2000", "+30000")
for testtuple in testtuples: with self.assertRaises(NotImplementedError): get_date_resolution(testtuple)
def test_get_date_resolution_badweek(self): testtuples = ("2004-W1", "2004W1")
for testtuple in testtuples: with self.assertRaises(ISOFormatError): get_date_resolution(testtuple)
def test_get_date_resolution_badweekday(self): testtuples = ("2004-W53-67", "2004W5367")
for testtuple in testtuples: with self.assertRaises(ISOFormatError): get_date_resolution(testtuple)
def test_get_date_resolution_badstr(self): testtuples = ( "W53", "2004-W", "2014-01-230", "2014-012-23", "201-01-23", "201401230", "201401", "", )
for testtuple in testtuples: with self.assertRaises(ISOFormatError): get_date_resolution(testtuple)
class TestDateParserFunctions(unittest.TestCase): def test_parse_date(self): testtuples = ( ( "2013", { "YYYY": "2013", "MM": None, "DD": None, "Www": None, "D": None, "DDD": None, }, ), ( "0001", { "YYYY": "0001", "MM": None, "DD": None, "Www": None, "D": None, "DDD": None, }, ), ( "19", { "YYYY": "19", "MM": None, "DD": None, "Www": None, "D": None, "DDD": None, }, ), ( "1981-04-05", { "YYYY": "1981", "MM": "04", "DD": "05", "Www": None, "D": None, "DDD": None, }, ), ( "19810405", { "YYYY": "1981", "MM": "04", "DD": "05", "Www": None, "D": None, "DDD": None, }, ), ( "1981-04", { "YYYY": "1981", "MM": "04", "DD": None, "Www": None, "D": None, "DDD": None, }, ), ( "2004-W53", { "YYYY": "2004", "MM": None, "DD": None, "Www": "53", "D": None, "DDD": None, }, ), ( "2009-W01", { "YYYY": "2009", "MM": None, "DD": None, "Www": "01", "D": None, "DDD": None, }, ), ( "2004-W53-6", { "YYYY": "2004", "MM": None, "DD": None, "Www": "53", "D": "6", "DDD": None, }, ), ( "2004W53", { "YYYY": "2004", "MM": None, "DD": None, "Www": "53", "D": None, "DDD": None, }, ), ( "2004W536", { "YYYY": "2004", "MM": None, "DD": None, "Www": "53", "D": "6", "DDD": None, }, ), ( "1981-095", { "YYYY": "1981", "MM": None, "DD": None, "Www": None, "D": None, "DDD": "095", }, ), ( "1981095", { "YYYY": "1981", "MM": None, "DD": None, "Www": None, "D": None, "DDD": "095", }, ), ( "1980366", { "YYYY": "1980", "MM": None, "DD": None, "Www": None, "D": None, "DDD": "366", }, ), )
for testtuple in testtuples: with mock.patch.object( aniso8601.date.PythonTimeBuilder, "build_date" ) as mockBuildDate: mockBuildDate.return_value = testtuple[1]
result = parse_date(testtuple[0])
self.assertEqual(result, testtuple[1]) mockBuildDate.assert_called_once_with(**testtuple[1])
def test_parse_date_badtype(self): testtuples = (None, 1, False, 1.234)
for testtuple in testtuples: with self.assertRaises(ValueError): parse_date(testtuple, builder=None)
def test_parse_date_badstr(self): testtuples = ( "W53", "2004-W", "2014-01-230", "2014-012-23", "201-01-23", "201401230", "201401", "9999 W53", "20.50230", "198104", "bad", "", )
for testtuple in testtuples: with self.assertRaises(ISOFormatError): parse_date(testtuple, builder=None)
def test_parse_date_mockbuilder(self): mockBuilder = mock.Mock()
expectedargs = { "YYYY": "1981", "MM": "04", "DD": "05", "Www": None, "D": None, "DDD": None, }
mockBuilder.build_date.return_value = expectedargs
result = parse_date("1981-04-05", builder=mockBuilder)
self.assertEqual(result, expectedargs) mockBuilder.build_date.assert_called_once_with(**expectedargs)
|