(self)
| 1546 | |
| 1547 | @unittest.expectedFailure # TODO: RUSTPYTHON |
| 1548 | def test_classmethods(self): |
| 1549 | # Testing class methods... |
| 1550 | class C(object): |
| 1551 | def foo(*a): return a |
| 1552 | goo = classmethod(foo) |
| 1553 | c = C() |
| 1554 | self.assertEqual(C.goo(1), (C, 1)) |
| 1555 | self.assertEqual(c.goo(1), (C, 1)) |
| 1556 | self.assertEqual(c.foo(1), (c, 1)) |
| 1557 | class D(C): |
| 1558 | pass |
| 1559 | d = D() |
| 1560 | self.assertEqual(D.goo(1), (D, 1)) |
| 1561 | self.assertEqual(d.goo(1), (D, 1)) |
| 1562 | self.assertEqual(d.foo(1), (d, 1)) |
| 1563 | self.assertEqual(D.foo(d, 1), (d, 1)) |
| 1564 | # Test for a specific crash (SF bug 528132) |
| 1565 | def f(cls, arg): |
| 1566 | "f docstring" |
| 1567 | return (cls, arg) |
| 1568 | ff = classmethod(f) |
| 1569 | self.assertEqual(ff.__get__(0, int)(42), (int, 42)) |
| 1570 | self.assertEqual(ff.__get__(0)(42), (int, 42)) |
| 1571 | |
| 1572 | # Test super() with classmethods (SF bug 535444) |
| 1573 | self.assertEqual(C.goo.__self__, C) |
| 1574 | self.assertEqual(D.goo.__self__, D) |
| 1575 | self.assertEqual(super(D,D).goo.__self__, D) |
| 1576 | self.assertEqual(super(D,d).goo.__self__, D) |
| 1577 | self.assertEqual(super(D,D).goo(), (D,)) |
| 1578 | self.assertEqual(super(D,d).goo(), (D,)) |
| 1579 | |
| 1580 | # Verify that a non-callable will raise |
| 1581 | meth = classmethod(1).__get__(1) |
| 1582 | self.assertRaises(TypeError, meth) |
| 1583 | |
| 1584 | # Verify that classmethod() doesn't allow keyword args |
| 1585 | try: |
| 1586 | classmethod(f, kw=1) |
| 1587 | except TypeError: |
| 1588 | pass |
| 1589 | else: |
| 1590 | self.fail("classmethod shouldn't accept keyword args") |
| 1591 | |
| 1592 | cm = classmethod(f) |
| 1593 | cm_dict = {'__doc__': ( |
| 1594 | "f docstring" |
| 1595 | if support.HAVE_PY_DOCSTRINGS |
| 1596 | else None |
| 1597 | ), |
| 1598 | '__module__': __name__, |
| 1599 | '__name__': 'f', |
| 1600 | '__qualname__': f.__qualname__} |
| 1601 | self.assertEqual(cm.__dict__, cm_dict) |
| 1602 | |
| 1603 | cm.x = 42 |
| 1604 | self.assertEqual(cm.x, 42) |
| 1605 | self.assertEqual(cm.__dict__, {"x" : 42, **cm_dict}) |
nothing calls this directly
no test coverage detected