def test_nullify(self): # set components to None e = EDTFDate('201x-09-17') e.day = None self.assertEqual(unicode(e), '201x-09') self.assertEqual(e.precision, 'month') e.month = None self.assertEqual(unicode(e), '201x') self.assertEqual(e.precision, 'decade') # again with empty strings e = EDTFDate('201x-09-17') e.day = "" self.assertEqual(unicode(e), '201x-09') self.assertEqual(e.precision, 'month') e.month = "" self.assertEqual(unicode(e), '201x') self.assertEqual(e.precision, 'decade') # clear month without clearing day e = EDTFDate('201x-09-17') e.month = "" self.assertEqual(unicode(e), '201x') self.assertEqual(e.precision, 'decade') e.month = 12 self.assertEqual(unicode(e), '201x-12') self.assertEqual(e.precision, 'month') e.year = "" self.assertEqual(unicode(e), '')
def test_attributes(self): e = EDTFDate('2012-09-17') self.assertEqual(e.year, '2012') self.assertEqual(e.month, 9) self.assertEqual(e.month_string, '09') self.assertEqual(e.day, 17) self.assertEqual(e.day_string, '17') e = EDTFDate('2xuu-uu-uu') self.assertEqual(e.year, '2xuu') self.assertEqual(e.month, 'uu') self.assertEqual(e.month_string, 'uu') self.assertEqual(e.day, 'uu') self.assertEqual(e.day_string, 'uu') e = EDTFDate('2xuu') self.assertEqual(e.year, '2xuu') self.assertEqual(e.month, None) self.assertEqual(e.month_string, 'xx') self.assertEqual(e.day, None) self.assertEqual(e.day_string, 'xx') e = EDTFDate('2012-09-17') e.year = '2040' self.assertEqual(unicode(e), '2040-09-17') e.month = '04' self.assertEqual(unicode(e), '2040-04-17') e.day = '26' self.assertEqual(unicode(e), '2040-04-26') e.year = 1924 e.month = 3 e.day = 2 self.assertEqual(unicode(e), '1924-03-02')
def test_iso_range(self): for i, o in [ ('', (None, None)), ('2001-02-03', ('2001-02-03', '2001-02-03')), ('2008-12', ('2008-12-01', '2008-12-31')), ('2008', ('2008-01-01', '2008-12-31')), ('-0999', (MIN_ISO, MIN_ISO)), # can we do better? ('0000', (MIN_ISO, MIN_ISO)), ('1984?', ('1983-07-01', '1985-06-30')), ('1985~', ('1984-07-01', '1986-06-30')), ('1984?~', ('1983-01-01', '1985-12-31')), ('2004-06?', ('2004-05-16', '2004-07-16')), ('2004-06?~', ('2004-04-30', '2004-08-01')), ('2000-01-01~', ('1999-12-31', '2000-01-02')), ('2000-01-01?~', ('1999-12-30', '2000-01-03')), ('1984-12-31~', ('1984-12-30', '1985-01-01')), ('1984-01~', ('1983-12-16', '1984-02-16')), ('1984-12~', ('1984-11-15', '1985-01-16')), ('199u', ('1990-01-01', '1999-12-31')), ('190u', ('1900-01-01', '1909-12-31')), ('19uu', ('1900-01-01', '1999-12-31')), ('1999-uu', ('1999-01-01', '1999-12-31')), ('1999-uu-uu', ('1999-01-01', '1999-12-31')), ('y170000002', (MAX_ISO, MAX_ISO)), # can we do better? ('y-170000002', (MIN_ISO, MIN_ISO)), ('2001-21', ('2001-03-01', '2001-05-31')), # northern hemisphere ('2001-22', ('2001-06-01', '2001-08-31')), # northern hemisphere ('2001-23', ('2001-09-01', '2001-11-30')), # northern hemisphere ('2001-24', ('2001-12-01', '2001-12-31')), # northern hemisphere ('156u-12-25', ('1560-12-25', '1569-12-25')), ('15uu-12-25', ('1500-12-25', '1599-12-25')), ('15uu-12-uu', ('1500-12-01', '1599-12-31')), ('1560-uu-25', ('1560-01-25', '1560-12-25')), ('198x', ('1980-01-01', '1989-12-31')), ('19xx', ('1900-01-01', '1999-12-31')), ('1xxx', ('1000-01-01', '1999-12-31')), ('2001-21~', ('2000-12-07', '2001-08-23')), # northern hemisphere ('2001-22~', ('2001-03-09', '2001-11-23')), # northern hemisphere ('2001-23~', ('2001-06-09', '2002-02-22')), # northern hemisphere ('2001-24~', ('2001-09-08', '2002-03-25')), # northern hemisphere ('156u-12-25~', ('1560-12-24', '1569-12-26')), ('15uu-12-25~', ('1500-12-24', '1599-12-26')), ('15uu-12-uu~', ('1500-11-30', '1600-01-01')), ('1560-uu-25~', ('1560-01-24', '1560-12-26')), ('198x~', ('1975-01-01', '1994-12-31')), ('19xx~', ('1850-01-01', '2049-12-31')), ('1xxx~', ('0500-01-01', '2499-12-31')), ('0999-03~', ('0999-02-13', '0999-04-16')), ]: e = EDTFDate(i) o1, o2 = o earl = e.date_earliest() late = e.date_latest() if earl: self.assertEqual(earl.isoformat(), o1) if late: self.assertEqual(late.isoformat(), o2)
def test_negative_year(self): e = EDTFDate('-0999') self.assertEqual(unicode(e), '-0999') # -0 is a different year to 0 e = EDTFDate('0000') self.assertEqual(unicode(e), '0000') e.is_negative = True self.assertEqual(unicode(e), '-0000') # TODO: no such year; shouldn't be allowed.
def test_long_year(self): e = EDTFDate('y1700000002') self.assertEqual(e.precision, 'year') self.assertEqual(e.is_negative, False) e.is_negative = True self.assertEqual(e.year, 'y-1700000002') e = EDTFDate('y-1700000002') self.assertEqual(e.precision, 'year') self.assertEqual(e.is_negative, True) e.is_negative = False self.assertEqual(e.year, 'y1700000002')
def test_approximate(self): for i, o, o2 in [ ('2010-09-03', False, '2010-09-03~'), ('2010-09-03~', True, '2010-09-03'), ('2010-09-03?~', True, '2010-09-03?'), ]: e = EDTFDate(i) self.assertEqual(e.is_approximate, o) self.assertEqual(unicode(e), i) #change the value e.is_approximate = not o self.assertAlmostEqual(unicode(e), o2)
def test_sort_value(self): for i, o1, o2 in [ ('', None, None), ('2001-02-03', '2001-02-03', '2001-02-03'), ('2008-12', '2008-12-31', '2008-12-01'), ('2008', '2008-12-31', '2008-01-01'), ('-0999', MIN_ISO, MIN_ISO), # can we do better? ('0000', MIN_ISO, MIN_ISO), ('1984?', '1984-12-31', '1984-01-01'), ('1984~', '1984-12-31', '1984-01-01'), ('1984?~', '1984-12-31', '1984-01-01'), ('2004-06?', '2004-06-30', '2004-06-01'), ('2004-06?~', '2004-06-30', '2004-06-01'), ('2000-01-01~', '2000-01-01', '2000-01-01'), ('2000-01-01?~', '2000-01-01', '2000-01-01'), ('1984-12-31~', '1984-12-31', '1984-12-31'), ('1984-01~', '1984-01-31', '1984-01-01'), ('1984-12~', '1984-12-31', '1984-12-01'), ('199u', '1999-12-31', '1990-01-01'), ('190u', '1909-12-31', '1900-01-01'), ('19uu', '1999-12-31', '1900-01-01'), ('1999-uu', '1999-12-31', '1999-01-01'), ('1999-uu-uu', '1999-12-31', '1999-01-01'), ('y170000002', MAX_ISO, MAX_ISO), # can we do better? ('y-170000002', MIN_ISO, MIN_ISO), ('2001-21', '2001-05-31', '2001-03-01'), # northern hemisphere ('2001-22', '2001-08-31', '2001-06-01'), # northern hemisphere ('2001-23', '2001-11-30', '2001-09-01'), # northern hemisphere ('2001-24', '2001-12-31', '2001-12-01'), # northern hemisphere ('156u-12-25', '1569-12-25', '1560-12-25'), ('15uu-12-25', '1599-12-25', '1500-12-25'), ('15uu-12-uu', '1599-12-31', '1500-12-01'), ('1560-uu-25', '1560-12-25', '1560-01-25'), ('198x', '1989-12-31', '1980-01-01'), ('19xx', '1999-12-31', '1900-01-01'), ('1xxx', '1999-12-31', '1000-01-01'), ('2001-21~', '2001-05-31', '2001-03-01'), # northern hemisphere ]: e = EDTFDate(i) earl = e.sort_date_earliest() late = e.sort_date_latest() if earl: self.assertEqual(earl.isoformat(), o2) if late: self.assertEqual(late.isoformat(), o1)
def test_season(self): e = EDTFDate('2001-21') self.assertEqual(e.precision, "season") self.assertEqual(e.season, "spring") self.assertEqual(e.month, 21) e = EDTFDate('2001-22') self.assertEqual(e.precision, "season") self.assertEqual(e.season, "summer") self.assertEqual(e.month, 22) e = EDTFDate('2001-23') self.assertEqual(e.precision, "season") self.assertEqual(e.season, "autumn") self.assertEqual(e.month, 23) e = EDTFDate('2001-24') self.assertEqual(e.precision, "season") self.assertEqual(e.season, "winter") self.assertEqual(e.month, 24) e.season = "summer" self.assertEqual(e.precision, "season") self.assertEqual(e.season, "summer") self.assertEqual(e.month, 22) e.season = "fall" self.assertEqual(e.precision, "season") self.assertEqual(e.season, "autumn") self.assertEqual(e.month, 23) e.month = 11 self.assertEqual(e.precision, "month") self.assertEqual(e.season, None) self.assertEqual(e.month, 11) e.month = 21 self.assertEqual(e.season, "spring") self.assertEqual(e.precision, "season")
def test_unspecified(self): e = EDTFDate('199u') self.assertEqual(unicode(e), '199u') self.assertEqual(e.precision, "year") e = EDTFDate('19uu') self.assertEqual(unicode(e), '19uu') self.assertEqual(e.precision, "year") e = EDTFDate('1999-uu') self.assertEqual(unicode(e), '1999-uu') self.assertEqual(e.precision, "month") e = EDTFDate('1999-01-uu') self.assertEqual(unicode(e), '1999-01-uu') self.assertEqual(e.precision, "day") e = EDTFDate('1999-uu-uu') self.assertEqual(unicode(e), '1999-uu-uu') self.assertEqual(e.precision, "day") e = EDTFDate('1999-12-16') self.assertEqual(unicode(e), '1999-12-16') e.month = 'uu' self.assertEqual(unicode(e), '1999-uu-16') self.assertEqual(e.precision, "day") e = EDTFDate('156u-12-25') self.assertEqual(unicode(e), '156u-12-25') self.assertEqual(e.precision, "day") e = EDTFDate('15uu-12-25') self.assertEqual(unicode(e), '15uu-12-25') self.assertEqual(e.precision, "day") e = EDTFDate('15uu-12-uu') self.assertEqual(unicode(e), '15uu-12-uu') self.assertEqual(e.precision, "day") e = EDTFDate('1560-uu-25') self.assertEqual(unicode(e), '1560-uu-25') self.assertEqual(e.precision, "day")