(self)
| 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}) |
nothing calls this directly
no test coverage detected