MCPcopy Index your code
hub / github.com/python/cpython / test_classmethods

Method test_classmethods

Lib/test/test_descr.py:1631–1690  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

1629 self.fail("finding the most derived metaclass should have failed")
1630
1631 def test_classmethods(self):
1632 # Testing class methods...
1633 class C(object):
1634 def foo(*a): return a
1635 goo = classmethod(foo)
1636 c = C()
1637 self.assertEqual(C.goo(1), (C, 1))
1638 self.assertEqual(c.goo(1), (C, 1))
1639 self.assertEqual(c.foo(1), (c, 1))
1640 class D(C):
1641 pass
1642 d = D()
1643 self.assertEqual(D.goo(1), (D, 1))
1644 self.assertEqual(d.goo(1), (D, 1))
1645 self.assertEqual(d.foo(1), (d, 1))
1646 self.assertEqual(D.foo(d, 1), (d, 1))
1647 # Test for a specific crash (SF bug 528132)
1648 def f(cls, arg):
1649 "f docstring"
1650 return (cls, arg)
1651 ff = classmethod(f)
1652 self.assertEqual(ff.__get__(0, int)(42), (int, 42))
1653 self.assertEqual(ff.__get__(0)(42), (int, 42))
1654
1655 # Test super() with classmethods (SF bug 535444)
1656 self.assertEqual(C.goo.__self__, C)
1657 self.assertEqual(D.goo.__self__, D)
1658 self.assertEqual(super(D,D).goo.__self__, D)
1659 self.assertEqual(super(D,d).goo.__self__, D)
1660 self.assertEqual(super(D,D).goo(), (D,))
1661 self.assertEqual(super(D,d).goo(), (D,))
1662
1663 # Verify that a non-callable will raise
1664 meth = classmethod(1).__get__(1)
1665 self.assertRaises(TypeError, meth)
1666
1667 # Verify that classmethod() doesn't allow keyword args
1668 try:
1669 classmethod(f, kw=1)
1670 except TypeError:
1671 pass
1672 else:
1673 self.fail("classmethod shouldn't accept keyword args")
1674
1675 cm = classmethod(f)
1676 cm_dict = {'__doc__': (
1677 "f docstring"
1678 if support.HAVE_PY_DOCSTRINGS
1679 else None
1680 ),
1681 '__module__': __name__,
1682 '__name__': 'f',
1683 '__qualname__': f.__qualname__}
1684 self.assertEqual(cm.__dict__, cm_dict)
1685
1686 cm.x = 42
1687 self.assertEqual(cm.x, 42)
1688 self.assertEqual(cm.__dict__, {"x" : 42, **cm_dict})

Callers

nothing calls this directly

Calls 10

fooMethod · 0.95
fooMethod · 0.95
superClass · 0.85
assertNotHasAttrMethod · 0.80
CClass · 0.70
DClass · 0.70
assertEqualMethod · 0.45
__get__Method · 0.45
assertRaisesMethod · 0.45
failMethod · 0.45

Tested by

no test coverage detected