[Python-checkins] python/nondist/sandbox/datetime datetime.py,1.109,1.110 test_datetime.py,1.71,1.72

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
Mon, 16 Dec 2002 13:20:47 -0800


Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv20758

Modified Files:
	datetime.py test_datetime.py 
Log Message:
Made the guts of the tests identical to the version in Python CVS; the
only differences now are due to that Python CVS uses its test_support
module to invoke unitttest.  Changed __repr__s in the Python implementation
to put 'datetime.' before the class name.  I don't really care whether
it's there or not, but the Python and C implementations should do the
same thing, and the Python implementation is a lot easier to change.


Index: datetime.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.py,v
retrieving revision 1.109
retrieving revision 1.110
diff -C2 -d -r1.109 -r1.110
*** datetime.py	16 Dec 2002 00:25:34 -0000	1.109
--- datetime.py	16 Dec 2002 21:20:42 -0000	1.110
***************
*** 450,462 ****
      def __repr__(self):
          if self.__microseconds:
!             return "%s(%d, %d, %d)" % (self.__class__.__name__,
                                         self.__days,
                                         self.__seconds,
                                         self.__microseconds)
          if self.__seconds:
!             return "%s(%d, %d)" % (self.__class__.__name__,
                                     self.__days,
                                     self.__seconds)
!         return "%s(%d)" % (self.__class__.__name__, self.__days)
  
      def __str__(self):
--- 450,462 ----
      def __repr__(self):
          if self.__microseconds:
!             return "%s(%d, %d, %d)" % ('datetime.' + self.__class__.__name__,
                                         self.__days,
                                         self.__seconds,
                                         self.__microseconds)
          if self.__seconds:
!             return "%s(%d, %d)" % ('datetime.' + self.__class__.__name__,
                                     self.__days,
                                     self.__seconds)
!         return "%s(%d)" % ('datetime.' + self.__class__.__name__, self.__days)
  
      def __str__(self):
***************
*** 629,633 ****
      def __repr__(self):
          "Convert to formal string, for repr()."
!         return "%s(%d, %d, %d)" % (self.__class__.__name__,
                                     self.__year,
                                     self.__month,
--- 629,633 ----
      def __repr__(self):
          "Convert to formal string, for repr()."
!         return "%s(%d, %d, %d)" % ('datetime.' + self.__class__.__name__,
                                     self.__year,
                                     self.__month,
***************
*** 857,861 ****
          else:
              s = ""
!         return "%s(%d, %d%s)" % (self.__class__.__name__,
                                   self.__hour, self.__minute, s)
  
--- 857,861 ----
          else:
              s = ""
!         return "%s(%d, %d%s)" % ('datetime.' + self.__class__.__name__,
                                   self.__hour, self.__minute, s)
  
***************
*** 1233,1237 ****
              del L[-1]
          s = ", ".join(map(str, L))
!         return "%s(%s)" % (self.__class__.__name__, s)
  
      def __str__(self):
--- 1233,1237 ----
              del L[-1]
          s = ", ".join(map(str, L))
!         return "%s(%s)" % ('datetime.' + self.__class__.__name__, s)
  
      def __str__(self):

Index: test_datetime.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/test_datetime.py,v
retrieving revision 1.71
retrieving revision 1.72
diff -C2 -d -r1.71 -r1.72
*** test_datetime.py	16 Dec 2002 03:34:21 -0000	1.71
--- test_datetime.py	16 Dec 2002 21:20:43 -0000	1.72
***************
*** 2,11 ****
  
  See http://www.zope.org/Members/fdrake/DateTimeWiki/TestCases
- 
- Pass c on the cmdline to test the C implementation; else the Python
- implementation is tested.
- 
- Run with --leak under a debug build to get some simple but powerful leak
- detection.
  """
  
--- 2,5 ----
***************
*** 13,38 ****
  import unittest
  
! # Import the right implementation, under name "datetime".
! TESTING_C = 'c' in sys.argv
! if TESTING_C:
!     print "Testing the C implementation."
!     import _datetime as datetime
!     import _datetime
! else:
!     print "Testing the Python implementation."
!     import datetime
! 
! # Always use datetime.this or datetime.that.  If, e.g., you do
! #     from datetime import this
! # you're going to pick up the Python implementation.
! 
! date = datetime.date
! timedelta = datetime.timedelta
! time = datetime.time
! tzinfo = datetime.tzinfo
! timetz = datetime.timetz
! datetimetz = datetime.datetimetz
! MINYEAR = datetime.MINYEAR
! MAXYEAR = datetime.MAXYEAR
  
  #############################################################################
--- 7,15 ----
  import unittest
  
! from datetime import MINYEAR, MAXYEAR
! from datetime import timedelta
! from datetime import tzinfo
! from datetime import time, timetz
! from datetime import date, datetime, datetimetz
  
  #############################################################################
***************
*** 42,45 ****
--- 19,23 ----
  
      def test_constants(self):
+         import datetime
          self.assertEqual(datetime.MINYEAR, 1)
          self.assertEqual(datetime.MAXYEAR, 9999)
***************
*** 69,73 ****
          # NotImplementedError.
          useless = tzinfo()
!         dt = datetime.datetime.max
          self.assertRaises(NotImplementedError, useless.tzname, dt)
          self.assertRaises(NotImplementedError, useless.utcoffset, dt)
--- 47,51 ----
          # NotImplementedError.
          useless = tzinfo()
!         dt = datetime.max
          self.assertRaises(NotImplementedError, useless.tzname, dt)
          self.assertRaises(NotImplementedError, useless.utcoffset, dt)
***************
*** 83,87 ****
          self.failUnless(isinstance(ne, tzinfo))
  
!         dt = datetime.datetime.now()
          self.assertRaises(NotImplementedError, ne.tzname, dt)
          self.assertRaises(NotImplementedError, ne.utcoffset, dt)
--- 61,65 ----
          self.failUnless(isinstance(ne, tzinfo))
  
!         dt = datetime.now()
          self.assertRaises(NotImplementedError, ne.tzname, dt)
          self.assertRaises(NotImplementedError, ne.utcoffset, dt)
***************
*** 91,95 ****
          fo = FixedOffset(3, "Three")
          self.failUnless(isinstance(fo, tzinfo))
!         for dt in datetime.datetime.now(), None:
              self.assertEqual(fo.utcoffset(dt), 3)
              self.assertEqual(fo.tzname(dt), "Three")
--- 69,73 ----
          fo = FixedOffset(3, "Three")
          self.failUnless(isinstance(fo, tzinfo))
!         for dt in datetime.now(), None:
              self.assertEqual(fo.utcoffset(dt), 3)
              self.assertEqual(fo.tzname(dt), "Three")
***************
*** 346,349 ****
--- 324,329 ----
              # Verify td -> string -> td identity.
              s = repr(td)
+             self.failUnless(s.startswith('datetime.'))
+             s = s[9:]
              td2 = eval(s)
              self.assertEqual(td, td2)
***************
*** 463,466 ****
--- 443,448 ----
              # Verify dt -> string -> date identity.
              s = repr(dt)
+             self.failUnless(s.startswith('datetime.'))
+             s = s[9:]
              dt2 = eval(s)
              self.assertEqual(dt, dt2)
***************
*** 882,886 ****
  class TestDateTime(TestDate):
  
!     theclass = datetime.datetime
  
      def test_basic_attributes(self):
--- 864,868 ----
  class TestDateTime(TestDate):
  
!     theclass = datetime
  
      def test_basic_attributes(self):
***************
*** 911,922 ****
              # Verify dt -> string -> datetime identity.
              s = repr(dt)
!             if not TESTING_C:
!                 # XXX This hack is due to that the Python implementation of
!                 # XXX type datetime calls its name 'datetime', but that's a
!                 # XXX module object here.  The C implementation calls its name
!                 # XXX '_datetime.datetime', so doesn't need a hack.
!                 # XXX This can get simpler when the Python implementation goes
!                 # XXX away.
!                 s = 'datetime.' + s
              dt2 = eval(s)
              self.assertEqual(dt, dt2)
--- 893,898 ----
              # Verify dt -> string -> datetime identity.
              s = repr(dt)
!             self.failUnless(s.startswith('datetime.'))
!             s = s[9:]
              dt2 = eval(s)
              self.assertEqual(dt, dt2)
***************
*** 1282,1285 ****
--- 1258,1263 ----
          # Verify t -> string -> time identity.
          s = repr(t)
+         self.failUnless(s.startswith('datetime.'))
+         s = s[9:]
          t2 = eval(s)
          self.assertEqual(t, t2)
***************
*** 1323,1327 ****
  
          for badarg in (10, 10L, 34.5, "abc", {}, [], (), date(1, 1, 1),
!                        datetime.datetime(1, 1, 1, 1, 1), timedelta(9)):
              self.assertRaises(TypeError, lambda: t1 == badarg)
              self.assertRaises(TypeError, lambda: t1 != badarg)
--- 1301,1305 ----
  
          for badarg in (10, 10L, 34.5, "abc", {}, [], (), date(1, 1, 1),
!                        datetime(1, 1, 1, 1, 1), timedelta(9)):
              self.assertRaises(TypeError, lambda: t1 == badarg)
              self.assertRaises(TypeError, lambda: t1 != badarg)
***************
*** 1429,1436 ****
  
      def test_repr(self):
!         name = self.theclass.__name__
!         if TESTING_C:
!             name = '_datetime.' + name
! 
          self.assertEqual(repr(self.theclass(1, 2, 3, 4)),
                           "%s(1, 2, 3, 4)" % name)
--- 1407,1411 ----
  
      def test_repr(self):
!         name = 'datetime.' + self.theclass.__name__
          self.assertEqual(repr(self.theclass(1, 2, 3, 4)),
                           "%s(1, 2, 3, 4)" % name)
***************
*** 1560,1572 ****
          self.assertEqual(t5.isoformat(), "00:00:00.000040+00:00")
  
!         if TESTING_C:
!             d = '_datetime.'
!         else:
!             d = ''
!         self.assertEqual(repr(t1), d + "timetz(7, 47, tzinfo=est)")
!         self.assertEqual(repr(t2), d + "timetz(12, 47, tzinfo=utc)")
!         self.assertEqual(repr(t3), d + "timetz(13, 47, tzinfo=met)")
!         self.assertEqual(repr(t4), d + "timetz(0, 0, 0, 40)")
!         self.assertEqual(repr(t5), d + "timetz(0, 0, 0, 40, tzinfo=utc)")
  
          self.assertEqual(t1.strftime("%H:%M:%S %%Z=%Z %%z=%z"),
--- 1535,1544 ----
          self.assertEqual(t5.isoformat(), "00:00:00.000040+00:00")
  
!         d = 'datetime.timetz'
!         self.assertEqual(repr(t1), d + "(7, 47, tzinfo=est)")
!         self.assertEqual(repr(t2), d + "(12, 47, tzinfo=utc)")
!         self.assertEqual(repr(t3), d + "(13, 47, tzinfo=met)")
!         self.assertEqual(repr(t4), d + "(0, 0, 0, 40)")
!         self.assertEqual(repr(t5), d + "(0, 0, 0, 40, tzinfo=utc)")
  
          self.assertEqual(t1.strftime("%H:%M:%S %%Z=%Z %%z=%z"),
***************
*** 1848,1861 ****
          self.assertEqual(str(t2), "2002-03-19 12:47:00+00:00")
          self.assertEqual(str(t3), "2002-03-19 13:47:00+01:00")
!         if TESTING_C:
!             d = "_datetime."
!         else:
!             d = ""
!         self.assertEqual(repr(t1),
!                          d + "datetimetz(2002, 3, 19, 7, 47, tzinfo=est)")
!         self.assertEqual(repr(t2),
!                          d + "datetimetz(2002, 3, 19, 12, 47, tzinfo=utc)")
!         self.assertEqual(repr(t3),
!                          d + "datetimetz(2002, 3, 19, 13, 47, tzinfo=met)")
  
      def test_combine(self):
--- 1820,1827 ----
          self.assertEqual(str(t2), "2002-03-19 12:47:00+00:00")
          self.assertEqual(str(t3), "2002-03-19 13:47:00+01:00")
!         d = 'datetime.datetimetz(2002, 3, 19, '
!         self.assertEqual(repr(t1), d + "7, 47, tzinfo=est)")
!         self.assertEqual(repr(t2), d + "12, 47, tzinfo=utc)")
!         self.assertEqual(repr(t3), d + "13, 47, tzinfo=met)")
  
      def test_combine(self):
***************
*** 2146,2149 ****
--- 2112,2117 ----
      while True:
          r.run(s)
+         if 1:       # change to 0, under a debug build, for some leak detection
+             break
          gc.collect()
          if gc.garbage:
***************
*** 2152,2163 ****
          if hasattr(sys, 'gettotalrefcount'):
              thisrc = sys.gettotalrefcount()
!             print '*' * 10, 'total refs:', thisrc,
              if lastrc:
!                 print 'delta:', thisrc - lastrc
              else:
!                 print
              lastrc = thisrc
-         if '--leak' not in sys.argv:
-             break
  
  if __name__ == "__main__":
--- 2120,2129 ----
          if hasattr(sys, 'gettotalrefcount'):
              thisrc = sys.gettotalrefcount()
!             print >> sys.stderr, '*' * 10, 'total refs:', thisrc,
              if lastrc:
!                 print >> sys.stderr, 'delta:', thisrc - lastrc
              else:
!                 print >> sys.stderr
              lastrc = thisrc
  
  if __name__ == "__main__":