def test_timetuple(self):
     for i in range(7):
         # January 2, 1956 is a Monday (0)
         d = cpy_date(1956, 1, 2 + i)
         t = d.timetuple()
         d2 = cpython_date(1956, 1, 2 + i)
         t2 = d2.timetuple()
         self.assertEqual(t, t2)
         # February 1, 1956 is a Wednesday (2)
         d = cpy_date(1956, 2, 1 + i)
         t = d.timetuple()
         d2 = cpython_date(1956, 2, 1 + i)
         t2 = d2.timetuple()
         self.assertEqual(t, t2)
         # March 1, 1956 is a Thursday (3), and is the 31+29+1 = 61st day
         # of the year.
         d = cpy_date(1956, 3, 1 + i)
         t = d.timetuple()
         d2 = cpython_date(1956, 3, 1 + i)
         t2 = d2.timetuple()
         self.assertEqual(t, t2)
         self.assertEqual(t.tm_year, t2.tm_year)
         self.assertEqual(t.tm_mon, t2.tm_mon)
         self.assertEqual(t.tm_mday, t2.tm_mday)
         self.assertEqual(t.tm_hour, t2.tm_hour)
         self.assertEqual(t.tm_min, t2.tm_min)
         self.assertEqual(t.tm_sec, t2.tm_sec)
         self.assertEqual(t.tm_wday, t2.tm_wday)
         self.assertEqual(t.tm_yday, t2.tm_yday)
         self.assertEqual(t.tm_isdst, t2.tm_isdst)
    def test_strftime(self):
        t = cpy_date(2005, 3, 2)
        self.assertEqual(t.strftime("m:%m d:%d y:%y"), "m:03 d:02 y:05")
        self.assertEqual(t.strftime(""), "")  # SF bug #761337
        #        self.assertEqual(t.strftime('x'*1000), 'x'*1000) # SF bug #1556784

        self.assertRaises(TypeError, t.strftime)  # needs an arg
        self.assertRaises(TypeError, t.strftime, "one", "two")  # too many args
        self.assertRaises(TypeError, t.strftime, 42)  # arg wrong type

        # test that unicode input is allowed (issue 2782)
        self.assertEqual(t.strftime("%m"), "03")

        # A naive object replaces %z and %Z w/ empty strings.
        self.assertEqual(t.strftime("'%z' '%Z'"), "'' ''")

        # make sure that invalid format specifiers are handled correctly
        # self.assertRaises(ValueError, t.strftime, "%e")
        # self.assertRaises(ValueError, t.strftime, "%")
        # self.assertRaises(ValueError, t.strftime, "%#")

        # oh well, some systems just ignore those invalid ones.
        # at least, excercise them to make sure that no crashes
        # are generated
        for f in ["%e", "%", "%#"]:
            try:
                t.strftime(f)
            except ValueError:
                pass

        # check that this standard extension works
        t.strftime("%f")
Esempio n. 3
0
 def test_weekday(self):
     for i in range(7):
         # March 4, 2002 is a Monday
         self.assertEqual(
             cpy_date(2002, 3, 4 + i).weekday(),
             cpython_date(2002, 3, 4 + i).weekday())
         self.assertEqual(
             cpy_date(2002, 3, 4 + i).isoweekday(),
             cpython_date(2002, 3, 4 + i).isoweekday())
         # January 2, 1956 is a Monday
         self.assertEqual(
             cpy_date(1956, 1, 2 + i).weekday(),
             cpython_date(1956, 1, 2 + i).weekday())
         self.assertEqual(
             cpy_date(1956, 1, 2 + i).isoweekday(),
             cpython_date(1956, 1, 2 + i).isoweekday())
    def test_mixed_compare(self):
        our = cpy_date(2000, 4, 5)
        our2 = cpython_date(2000, 4, 5)

        # Our class can be compared for equality to other classes
        self.assertEqual(our == 1, our2 == 1)
        self.assertEqual(1 == our, 1 == our2)
        self.assertEqual(our != 1, our2 != 1)
        self.assertEqual(1 != our, 1 != our2)

        # But the ordering is undefined
        self.assertRaises(TypeError, lambda: our < 1)
        self.assertRaises(TypeError, lambda: 1 < our)

        # Repeat those tests with a different class

        class SomeClass:
            pass

        their = SomeClass()
        self.assertEqual(our == their, False)
        self.assertEqual(their == our, False)
        self.assertEqual(our != their, True)
        self.assertEqual(their != our, True)
        self.assertRaises(TypeError, lambda: our < their)
        self.assertRaises(TypeError, lambda: their < our)

        # However, if the other class explicitly defines ordering
        # relative to our class, it is allowed to do so

        class LargerThanAnything:
            def __lt__(self, other):
                return False

            def __le__(self, other):
                return isinstance(other, LargerThanAnything)

            def __eq__(self, other):
                return isinstance(other, LargerThanAnything)

            def __ne__(self, other):
                return not isinstance(other, LargerThanAnything)

            def __gt__(self, other):
                return not isinstance(other, LargerThanAnything)

            def __ge__(self, other):
                return True

        their = LargerThanAnything()
        self.assertEqual(our == their, False)
        self.assertEqual(their == our, False)
        self.assertEqual(our != their, True)
        self.assertEqual(their != our, True)
        self.assertEqual(our < their, True)
        self.assertEqual(their < our, False)
 def test_strftime_y2k(self):
     for y in (1, 49, 70, 99, 100, 999, 1000, 1970):
         d = cpy_date(y, 1, 1)
         # Issue 13305:  For years < 1000, the value is not always
         # padded to 4 digits across platforms.  The C standard
         # assumes year >= 1900, so it does not specify the number
         # of digits.
         if d.strftime("%Y") != "%04d" % y:
             # Year 42 returns '42', not padded
             self.assertEqual(d.strftime("%Y"), "%d" % y)
             # '0042' is obtained anyway
             self.assertEqual(d.strftime("%4Y"), "%04d" % y)
    def test_hash_equality(self):
        d = cpy_date(2000, 12, 31)
        e = cpy_date(2000, 12, 31)
        self.assertEqual(d, e)
        self.assertEqual(hash(d), hash(e))

        dic = {d: 1}
        dic[e] = 2
        self.assertEqual(len(dic), 1)
        self.assertEqual(dic[d], 2)
        self.assertEqual(dic[e], 2)

        d = cpy_date(2001, 1, 1)
        e = cpy_date(2001, 1, 1)
        self.assertEqual(d, e)
        self.assertEqual(hash(d), hash(e))

        dic = {d: 1}
        dic[e] = 2
        self.assertEqual(len(dic), 1)
        self.assertEqual(dic[d], 2)
        self.assertEqual(dic[e], 2)
    def test_compare(self):
        t1 = cpy_date(2, 3, 4)
        t2 = cpy_date(2, 3, 4)
        self.assertEqual(t1, t2)
        self.assertTrue(t1 <= t2)
        self.assertTrue(t1 >= t2)
        self.assertTrue(not t1 != t2)
        self.assertTrue(not t1 < t2)
        self.assertTrue(not t1 > t2)

        for args in (3, 3, 3), (2, 4, 4), (2, 3, 5):
            t2 = cpy_date(*args)  # this is larger than t1
            self.assertTrue(t1 < t2)
            self.assertTrue(t2 > t1)
            self.assertTrue(t1 <= t2)
            self.assertTrue(t2 >= t1)
            self.assertTrue(t1 != t2)
            self.assertTrue(t2 != t1)
            self.assertTrue(not t1 == t2)
            self.assertTrue(not t2 == t1)
            self.assertTrue(not t1 > t2)
            self.assertTrue(not t2 < t1)
            self.assertTrue(not t1 >= t2)
            self.assertTrue(not t2 <= t1)

        for badarg in OTHERSTUFF:
            self.assertEqual(t1 == badarg, False)
            self.assertEqual(t1 != badarg, True)
            self.assertEqual(badarg == t1, False)
            self.assertEqual(badarg != t1, True)

            self.assertRaises(TypeError, lambda: t1 < badarg)
            self.assertRaises(TypeError, lambda: t1 > badarg)
            self.assertRaises(TypeError, lambda: t1 >= badarg)
            self.assertRaises(TypeError, lambda: badarg <= t1)
            self.assertRaises(TypeError, lambda: badarg < t1)
            self.assertRaises(TypeError, lambda: badarg > t1)
            self.assertRaises(TypeError, lambda: badarg >= t1)
 def test_isocalendar(self):
     # Check examples from
     # http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm
     for i in range(7):
         d = cpy_date(2003, 12, 22 + i)
         self.assertEqual(d.isocalendar(), (2003, 52, i + 1))
         d = cpy_date(2003, 12, 29) + timedelta(i)
         self.assertEqual(d.isocalendar(), (2004, 1, i + 1))
         d = cpy_date(2004, 1, 5 + i)
         self.assertEqual(d.isocalendar(), (2004, 2, i + 1))
         d = cpy_date(2009, 12, 21 + i)
         self.assertEqual(d.isocalendar(), (2009, 52, i + 1))
         d = cpy_date(2009, 12, 28) + timedelta(i)
         self.assertEqual(d.isocalendar(), (2009, 53, i + 1))
         d = cpy_date(2010, 1, 4 + i)
         self.assertEqual(d.isocalendar(), (2010, 1, i + 1))
    def test_format(self):
        dt = cpy_date(2007, 9, 10)
        self.assertEqual(dt.__format__(""), str(dt))

        # check that a derived class's __str__() gets called
        class A(cpy_date):
            def __str__(self):
                return "A"

        a = A(2007, 9, 10)
        self.assertEqual(a.__format__(""), "A")

        # check that a derived class's strftime gets called
        class B(cpy_date):
            def strftime(self, format_spec):
                return "B"

        b = B(2007, 9, 10)
        self.assertEqual(b.__format__(""), str(dt))

        # date strftime not implemented in CircuitPython, skip
        """for fmt in ["m:%m d:%d y:%y",
    def test_subclass_date(self):
        class C(cpy_date):
            theAnswer = 42

            def __new__(cls, *args, **kws):
                temp = kws.copy()
                extra = temp.pop("extra")
                result = cpy_date.__new__(cls, *args, **temp)
                result.extra = extra
                return result

            def newmeth(self, start):
                return start + self.year + self.month

        args = 2003, 4, 14

        dt1 = cpy_date(*args)
        dt2 = C(*args, **{"extra": 7})

        self.assertEqual(dt2.__class__, C)
        self.assertEqual(dt2.theAnswer, 42)
        self.assertEqual(dt2.extra, 7)
        self.assertEqual(dt1.toordinal(), dt2.toordinal())
        self.assertEqual(dt2.newmeth(-7), dt1.year + dt1.month - 7)
 def test_bad_constructor_arguments(self):
     # bad years
     cpy_date(MINYEAR, 1, 1)  # no exception
     cpy_date(MAXYEAR, 1, 1)  # no exception
     self.assertRaises(ValueError, cpy_date, MINYEAR - 1, 1, 1)
     self.assertRaises(ValueError, cpy_date, MAXYEAR + 1, 1, 1)
     # bad months
     cpy_date(2000, 1, 1)  # no exception
     cpy_date(2000, 12, 1)  # no exception
     self.assertRaises(ValueError, cpy_date, 2000, 0, 1)
     self.assertRaises(ValueError, cpy_date, 2000, 13, 1)
     # bad days
     cpy_date(2000, 2, 29)  # no exception
     cpy_date(2004, 2, 29)  # no exception
     cpy_date(2400, 2, 29)  # no exception
     self.assertRaises(ValueError, cpy_date, 2000, 2, 30)
     self.assertRaises(ValueError, cpy_date, 2001, 2, 29)
     self.assertRaises(ValueError, cpy_date, 2100, 2, 29)
     self.assertRaises(ValueError, cpy_date, 1900, 2, 29)
     self.assertRaises(ValueError, cpy_date, 2000, 1, 0)
     self.assertRaises(ValueError, cpy_date, 2000, 1, 32)
 def test_basic_attributes(self):
     dt = cpy_date(2002, 3, 1)
     dt_2 = cpython_date(2002, 3, 1)
     self.assertEqual(dt.year, dt_2.year)
     self.assertEqual(dt.month, dt_2.month)
     self.assertEqual(dt.day, dt_2.day)
 def test_ctime(self):
     t = cpy_date(2002, 3, 2)
     self.assertEqual(t.ctime(), "Sat Mar  2 00:00:00 2002")
 def test_isoformat(self):
     # test isoformat against expected and cpython equiv.
     t = cpy_date(2, 3, 2)
     t2 = cpython_date(2, 3, 2)
     self.assertEqual(t.isoformat(), "0002-03-02")
     self.assertEqual(t.isoformat(), t2.isoformat())