import py raises = py.test.raises from timeutil import DateRange from dateutil import parser def parsedate(s): return parser.parse(s, yearfirst=False, dayfirst=True) p = parsedate class TestDateRange: def test_full_construct(self): begin = parsedate('1.1.2000') end = parsedate('1.1.2001') range = DateRange(begin, end) assert range.begin == begin assert range.end == end def test_startend_correction(self): begin = parsedate('1.1.2000') end = parsedate('1.1.2001') range = DateRange(end, begin) assert range.begin == begin assert range.end == end def test_mixed_string_construct(self): beginstring = '1.1.2000' begindate = parsedate(beginstring) end = parsedate('1.1.2001') range = DateRange(beginstring, end) assert range.begin == begindate assert range.end == end def test_two_string_construct(self): beginstring = '1.1.2000' begindate = parsedate(beginstring) endstring = '1.1.2001' enddate = parsedate(endstring) range = DateRange(beginstring, endstring) assert range.begin == begindate assert range.end == enddate def test_contain_in_fullrange(self): range = DateRange(p("1.1.2000"), p("1.6.2001")) ok = parsedate('1.1.2000') notok = parsedate('1.6.2001') assert ok in range assert not notok in range def test_contain_in_halfrange(self): range = DateRange(p("1.1.2000")) ok = parsedate('1.1.2020') assert ok in range def test_intersect(self): range1 = DateRange(p("1.1.2000")) range2 = DateRange(p("1.3.2000"), p("1.5.2001")) assert range1.intersect(range2) == DateRange(p("1.3.2000"), p("1.5.2001")) assert range2.intersect(range1) == DateRange(p("1.3.2000"), p("1.5.2001")) def test_intersect_empty(self): range1 = DateRange(p("1.1.2000"), p("1.2.2001")) range2 = DateRange(p("1.2.2001"), p("1.5.2001")) #print range1.intersect(range2) assert not range1.intersect(range2) assert not range2.intersect(range1) def test_emptyrange(self): range = DateRange('') # same as None, None assert parsedate('1.1.2000') not in range assert range range = DateRange(None) assert parsedate('1.1.2000') not in range assert range range = DateRange(None, None) assert parsedate('1.1.2000') not in range assert range range = DateRange(p('1.1.2000'), None) assert parsedate('1.1.2000') in range assert range def test_equality_open(self): range1 = DateRange(p("1.1.2000-")) range2 = DateRange(p("1.1.2000-")) range3 = DateRange(p("1.3.2000-")) assert range1 == range2 assert range2 != range3 def test_equality_closed(self): range1 = DateRange(p("1.1.2000"), p("1.3.2003")) range2 = DateRange(p("1.1.2000"), p("1.3.2003")) range3 = DateRange(p("1.1.2000")) assert range1 == range2 assert range2 != range3 def test_month_gen(self): range1 = DateRange(p("1.1.2000"), p("1.3.2000")) l = list(range1.month()) assert len(l) == 2 assert l[0] == parsedate('1.1.2000') assert l[1] == parsedate('1.2.2000') def test_month_open_exception(self): range1 = DateRange(p("1.1.2000")) raises(ValueError, list, range1.month()) def test_month_exception_incompatiblezeitraum(self): range1 = DateRange(p("2.1.2000"), p("1.3.2000")) raises (ValueError, list, range1.month()) range1 = DateRange(p("1.1.2000"), p("2.3.2000")) raises (ValueError, list, range1.month())