[Python-checkins] python/dist/src/Lib/test test_datetime.py,1.7,1.8

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
Mon, 23 Dec 2002 21:41:29 -0800


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv4868/python/Lib/test

Modified Files:
	test_datetime.py 
Log Message:
Implemented .replace() methods for date, datetime, datetimetz, time and
timetz.


Index: test_datetime.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_datetime.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** test_datetime.py	22 Dec 2002 20:58:42 -0000	1.7
--- test_datetime.py	24 Dec 2002 05:41:27 -0000	1.8
***************
*** 875,878 ****
--- 875,900 ----
          for y in 1, 49, 51, 99, 100, 1000, 1899:
              self.assertRaises(ValueError, cls(y, 1, 1).strftime, "%Y")
+ 
+     def test_replace(self):
+         cls = self.theclass
+         args = [1, 2, 3]
+         base = cls(*args)
+         self.assertEqual(base, base.replace())
+ 
+         i = 0
+         for name, newval in (("year", 2),
+                              ("month", 3),
+                              ("day", 4)):
+             newargs = args[:]
+             newargs[i] = newval
+             expected = cls(*newargs)
+             got = base.replace(**{name: newval})
+             self.assertEqual(expected, got)
+             i += 1
+ 
+         # Out of bounds.
+         base = cls(2000, 2, 29)
+         self.assertRaises(ValueError, base.replace, year=2001)
+ 
  #############################################################################
  # datetime tests
***************
*** 1249,1252 ****
--- 1271,1300 ----
          self.assertRaises(TypeError, combine, "date", "time") # wrong types
  
+     def test_replace(self):
+         cls = self.theclass
+         args = [1, 2, 3, 4, 5, 6, 7]
+         base = cls(*args)
+         self.assertEqual(base, base.replace())
+ 
+         i = 0
+         for name, newval in (("year", 2),
+                              ("month", 3),
+                              ("day", 4),
+                              ("hour", 5),
+                              ("minute", 6),
+                              ("second", 7),
+                              ("microsecond", 8)):
+             newargs = args[:]
+             newargs[i] = newval
+             expected = cls(*newargs)
+             got = base.replace(**{name: newval})
+             self.assertEqual(expected, got)
+             i += 1
+ 
+         # Out of bounds.
+         base = cls(2000, 2, 29)
+         self.assertRaises(ValueError, base.replace, year=2001)
+ 
+ 
  class TestTime(unittest.TestCase):
  
***************
*** 1465,1468 ****
--- 1513,1541 ----
          self.failUnless(not cls())
  
+     def test_replace(self):
+         cls = self.theclass
+         args = [1, 2, 3, 4]
+         base = cls(*args)
+         self.assertEqual(base, base.replace())
+ 
+         i = 0
+         for name, newval in (("hour", 5),
+                              ("minute", 6),
+                              ("second", 7),
+                              ("microsecond", 8)):
+             newargs = args[:]
+             newargs[i] = newval
+             expected = cls(*newargs)
+             got = base.replace(**{name: newval})
+             self.assertEqual(expected, got)
+             i += 1
+ 
+         # Out of bounds.
+         base = cls(1)
+         self.assertRaises(ValueError, base.replace, hour=24)
+         self.assertRaises(ValueError, base.replace, minute=-1)
+         self.assertRaises(ValueError, base.replace, second=100)
+         self.assertRaises(ValueError, base.replace, microsecond=1000000)
+ 
  # A mixin for classes with a tzinfo= argument.  Subclasses must define
  # theclass as a class atribute, and theclass(1, 1, 1, tzinfo=whatever)
***************
*** 1736,1739 ****
--- 1809,1851 ----
          self.assertRaises(ValueError, lambda: bool(t))
  
+     def test_replace(self):
+         cls = self.theclass
+         z100 = FixedOffset(100, "+100")
+         zm200 = FixedOffset(timedelta(minutes=-200), "-200")
+         args = [1, 2, 3, 4, z100]
+         base = cls(*args)
+         self.assertEqual(base, base.replace())
+ 
+         i = 0
+         for name, newval in (("hour", 5),
+                              ("minute", 6),
+                              ("second", 7),
+                              ("microsecond", 8),
+                              ("tzinfo", zm200)):
+             newargs = args[:]
+             newargs[i] = newval
+             expected = cls(*newargs)
+             got = base.replace(**{name: newval})
+             self.assertEqual(expected, got)
+             i += 1
+ 
+         # Ensure we can get rid of a tzinfo.
+         self.assertEqual(base.tzname(), "+100")
+         base2 = base.replace(tzinfo=None)
+         self.failUnless(base2.tzinfo is None)
+         self.failUnless(base2.tzname() is None)
+ 
+         # Ensure we can add one.
+         base3 = base2.replace(tzinfo=z100)
+         self.assertEqual(base, base3)
+         self.failUnless(base.tzinfo is base3.tzinfo)
+ 
+         # Out of bounds.
+         base = cls(1)
+         self.assertRaises(ValueError, base.replace, hour=24)
+         self.assertRaises(ValueError, base.replace, minute=-1)
+         self.assertRaises(ValueError, base.replace, second=100)
+         self.assertRaises(ValueError, base.replace, microsecond=1000000)
+ 
  class TestDateTimeTZ(TestDateTime, TZInfoBase):
      theclass = datetimetz
***************
*** 2158,2161 ****
--- 2270,2311 ----
                  self.assertEqual(str(d), datestr + ' ' + tailstr)
  
+     def test_replace(self):
+         cls = self.theclass
+         z100 = FixedOffset(100, "+100")
+         zm200 = FixedOffset(timedelta(minutes=-200), "-200")
+         args = [1, 2, 3, 4, 5, 6, 7, z100]
+         base = cls(*args)
+         self.assertEqual(base, base.replace())
+ 
+         i = 0
+         for name, newval in (("year", 2),
+                              ("month", 3),
+                              ("day", 4),
+                              ("hour", 5),
+                              ("minute", 6),
+                              ("second", 7),
+                              ("microsecond", 8),
+                              ("tzinfo", zm200)):
+             newargs = args[:]
+             newargs[i] = newval
+             expected = cls(*newargs)
+             got = base.replace(**{name: newval})
+             self.assertEqual(expected, got)
+             i += 1
+ 
+         # Ensure we can get rid of a tzinfo.
+         self.assertEqual(base.tzname(), "+100")
+         base2 = base.replace(tzinfo=None)
+         self.failUnless(base2.tzinfo is None)
+         self.failUnless(base2.tzname() is None)
+ 
+         # Ensure we can add one.
+         base3 = base2.replace(tzinfo=z100)
+         self.assertEqual(base, base3)
+         self.failUnless(base.tzinfo is base3.tzinfo)
+ 
+         # Out of bounds.
+         base = cls(2000, 2, 29)
+         self.assertRaises(ValueError, base.replace, year=2001)
  
  def test_suite():