[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