[CalendarServer-changes] [5197] CalendarServer/trunk/twext/python/test/test_datetime.py
source_changes at macosforge.org
source_changes at macosforge.org
Wed Feb 24 16:40:22 PST 2010
Revision: 5197
http://trac.macosforge.org/projects/calendarserver/changeset/5197
Author: wsanchez at apple.com
Date: 2010-02-24 16:40:21 -0800 (Wed, 24 Feb 2010)
Log Message:
-----------
Yikes the test matrix for overlapsWith is scary.
Modified Paths:
--------------
CalendarServer/trunk/twext/python/test/test_datetime.py
Modified: CalendarServer/trunk/twext/python/test/test_datetime.py
===================================================================
--- CalendarServer/trunk/twext/python/test/test_datetime.py 2010-02-25 00:39:44 UTC (rev 5196)
+++ CalendarServer/trunk/twext/python/test/test_datetime.py 2010-02-25 00:40:21 UTC (rev 5197)
@@ -21,7 +21,7 @@
from twext.python.datetime import dateordatetime, timerange, utc
-from twistedcaldav.test.util import TestCase, testUnimplemented
+from twistedcaldav.test.util import TestCase
tzUSEastern = tzstr("EST5EDT")
@@ -33,31 +33,27 @@
"""
return lambda self: DeferredList([
d for d in (
- f(self, tz) for tz in (utc, tzUSEastern)
+ f(self, tz) for tz in (None, utc, tzUSEastern)
) if d is not None
])
-class DatetimeTests(TestCase):
+def timeSeries(n):
+ now = datetime.now()
+ for i in range(0, n):
+ dodt = dateordatetime(now + timedelta(days=i))
+ dodt.n = "t%d" %(i+1,)
+ yield dodt
- def test_date_date(self):
- d = date.today()
- dodt = dateordatetime(d)
- self.assertEquals(dodt.date(), d)
-
+class DatetimeTests(TestCase):
@timezones
- def test_date_date_tz(self, tz):
+ def test_date_date(self, tz):
d = date.today()
dodt = dateordatetime(d, defaultTZ=tz)
self.assertEquals(dodt.date(), d)
- def test_date_datetime(self):
- d = date.today()
- dodt = dateordatetime(d)
- self.assertEquals(dodt.datetime(), datetime(d.year, d.month, d.day))
-
@timezones
- def test_date_datetime_tz(self, tz):
+ def test_date_datetime(self, tz):
d = date.today()
dodt = dateordatetime(d, defaultTZ=tz)
self.assertEquals(dodt.datetime(), datetime(d.year, d.month, d.day, tzinfo=tz))
@@ -67,13 +63,8 @@
dodt = dateordatetime(dt)
self.assertEquals(dodt.date(), dt.date())
- def test_datetime_datetime(self):
- dt = datetime.now()
- dodt = dateordatetime(dt)
- self.assertEquals(dodt.datetime(), dt)
-
@timezones
- def test_datetime_datetime_tz(self, tz):
+ def test_datetime_datetime(self, tz):
dt = datetime.now()
dodt = dateordatetime(dt, defaultTZ=tz)
self.assertEquals(dodt.datetime(), dt)
@@ -81,21 +72,15 @@
def test_compare_date_date(self):
return self._test_compare(date, date.today())
- def test_compare_date_datetime(self):
- return self._test_compare(date, datetime.now())
-
@timezones
- def test_compare_date_datetime_tz(self, tz):
+ def test_compare_date_datetime(self, tz):
return self._test_compare(date, datetime.now(), tz=tz)
def test_compare_datetime_date(self):
return self._test_compare(datetime, date.today())
- def test_compare_datetime_datetime(self):
- return self._test_compare(datetime, datetime.now())
-
@timezones
- def test_compare_datetime_datetime_tz(self, tz):
+ def test_compare_datetime_datetime(self, tz):
return self._test_compare(datetime, datetime.now(), tz=tz)
def _test_compare(self, baseclass, now, tz=None):
@@ -192,6 +177,7 @@
self.assertEquals(asUTC.datetime().hour, 22) # hour is changed
self.assertEquals(asEast, asUTC) # still equal
+
class TimerangeTests(TestCase):
def test_start(self):
start = datetime.now()
@@ -243,11 +229,192 @@
tr = timerange(start=start, end=end)
self.assertEquals(tr.duration(), duration)
- @testUnimplemented
def test_overlapsWith(self):
- # Need a few tests; combinations of:
- # - start/end are None
- # - overlapping and not
- # - dates and datetimes
- # - timezones
- raise NotImplementedError()
+ t1, t2, t3, t4 = timeSeries(4)
+
+ d1 = dateordatetime(t1.date()); d1.n = "d1"
+ d2 = dateordatetime(t2.date()); d2.n = "d2"
+ d3 = dateordatetime(t3.date()); d3.n = "d3"
+ d4 = dateordatetime(t4.date()); d4.n = "d4"
+
+ for start1, end1, start2, end2, overlaps in (
+ # T-T-T-T
+
+ (t1, t2, t1, t2, True ),
+ (t1, t2, t1, t3, True ),
+ (t1, t2, t2, t3, False),
+ (t1, t2, t3, t4, False),
+
+ (t1, t3, t1, t2, True ),
+ (t1, t3, t2, t3, True ),
+
+ (t2, t3, t1, t2, False),
+ (t2, t3, t1, t3, True ),
+ (t2, t3, t1, t4, True ),
+
+ (t2, t4, t1, t3, True ),
+
+ # D-T-T-T
+
+ (d1, t2, t1, t2, True ),
+ (d1, t2, t1, t3, True ),
+ (d1, t2, t2, t3, False),
+ (d1, t2, t3, t4, False),
+
+ (d1, t3, t1, t2, True ),
+ (d1, t3, t2, t3, True ),
+
+ (d2, t3, t1, t2, True ), # Different
+ (d2, t3, t1, t3, True ),
+ (d2, t3, t1, t4, True ),
+
+ (d2, t4, t1, t3, True ),
+
+ (d3, t4, t1, t2, False ), # Cuz 2-3, 1-2 is different
+
+ # T-D-T-T
+
+ (t1, d2, t1, t2, True ),
+ (t1, d2, t1, t3, True ),
+ (t1, d2, t2, t3, False),
+ (t1, d2, t3, t4, False),
+
+ (t1, d3, t1, t2, True ),
+ (t1, d3, t2, t3, True ),
+
+ (t2, d3, t1, t2, False),
+ (t2, d3, t1, t3, True ),
+ (t2, d3, t1, t4, True ),
+
+ (t2, d4, t1, t3, True ),
+
+ # T-T-D-T
+
+ (t1, t2, d1, t2, True ),
+ (t1, t2, d1, t3, True ),
+ (t1, t2, d2, t3, True ), # Different
+ (t1, t2, d3, t4, False),
+
+ (t1, t3, d1, t2, True ),
+ (t1, t3, d2, t3, True ),
+
+ (t2, t3, d1, t2, False),
+ (t2, t3, d1, t3, True ),
+ (t2, t3, d1, t4, True ),
+
+ (t2, t4, d1, t3, True ),
+
+ # T-T-T-D
+
+ (t1, t2, t1, d2, True ),
+ (t1, t2, t1, d3, True ),
+ (t1, t2, t2, d3, False),
+ (t1, t2, t3, d4, False),
+
+ (t1, t3, t1, d2, True ),
+ (t1, t3, t2, d3, True ),
+
+ (t2, t3, t1, d2, False),
+ (t2, t3, t1, d3, True ),
+ (t2, t3, t1, d4, True ),
+
+ (t2, t4, t1, d3, True ),
+
+ # D-D-T-T
+
+ (d1, d2, t1, t2, True ),
+ (d1, d2, t1, t3, True ),
+ (d1, d2, t2, t3, False),
+ (d1, d2, t3, t4, False),
+
+ (d1, d3, t1, t2, True ),
+ (d1, d3, t2, t3, True ),
+
+ (d2, d3, t1, t2, True ), # Different
+ (d2, d3, t1, t3, True ),
+ (d2, d3, t1, t4, True ),
+
+ (d2, d4, t1, t3, True ),
+
+ (d3, d4, t1, t2, False ), # Cuz 2-3, 1-2 is different
+
+ # T-D-D-T
+
+ (t1, d2, d1, t2, True ),
+ (t1, d2, d1, t3, True ),
+ (t1, d2, d2, t3, False),
+ (t1, d2, d3, t4, False),
+
+ (t1, d3, d1, t2, True ),
+ (t1, d3, d2, t3, True ),
+
+ (t2, d3, d1, t2, False),
+ (t2, d3, d1, t3, True ),
+ (t2, d3, d1, t4, True ),
+
+ (t2, d4, d1, t3, True ),
+
+ # D-T-D-T
+
+ (d1, t2, d1, t2, True ),
+ (d1, t2, d1, t3, True ),
+ (d1, t2, d2, t3, True ), # Different
+ (d1, t2, d3, t4, False),
+
+ (d1, t3, d1, t2, True ),
+ (d1, t3, d2, t3, True ),
+
+ (d2, t3, d1, t2, True ), # Different
+ (d2, t3, d1, t3, True ),
+ (d2, t3, d1, t4, True ),
+
+ (d2, t4, d1, t3, True ),
+
+ # T-T-D-D
+
+ (t1, t2, d1, d2, True ),
+ (t1, t2, d1, d3, True ),
+ (t1, t2, d2, d3, True ), # Different
+ (t1, t2, d3, d4, False),
+
+ (t1, t3, d1, d2, True ),
+ (t1, t3, d2, d3, True ),
+
+ (t2, t3, d1, d2, False), # Not different?
+ (t2, t3, d1, d3, True ),
+ (t2, t3, d1, d4, True ),
+
+ (t2, t4, d1, d3, True ),
+
+ # D-D-D-D
+
+ (d1, d2, d1, d2, True ),
+ (d1, d2, d1, d3, True ),
+ (d1, d2, d2, d3, False),
+ (d1, d2, d3, d4, False),
+
+ (d1, d3, d1, d2, True ),
+ (d1, d3, d2, d3, True ),
+
+ (d2, d3, d1, d2, False),
+ (d2, d3, d1, d3, True ),
+ (d2, d3, d1, d4, True ),
+
+ (d2, d4, d1, d3, True ),
+ ):
+ #print start1.n, end1.n, start2.n, end2.n, overlaps
+
+ if overlaps:
+ test = self.assertTrue
+ error = "should overlap with"
+ else:
+ test = self.assertFalse
+ error = "should not overlap with"
+
+ tr1 = timerange(start1, end1)
+ tr2 = timerange(start2, end2)
+
+ test(
+ tr1.overlapsWith(tr2),
+ "%r (%s-%s) %s %r (%s-%s)" % (tr1, start1.n, end1.n, error, tr2, start2.n, end2.n)
+ )
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100224/6256b106/attachment-0001.html>
More information about the calendarserver-changes
mailing list