MCPcopy Index your code
hub / github.com/RustPython/RustPython / test_classmethods

Method test_classmethods

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

Source from the content-addressed store, hash-verified

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})

Callers

nothing calls this directly

Calls 10

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

Tested by

no test coverage detected