Staging
v0.5.1
https://github.com/python/cpython
Revision f31f6c952f5975d7f6c7208335495da8d7fe34ac authored by R. David Murray on 23 February 2010, 23:03:49 UTC, committed by R. David Murray on 23 February 2010, 23:03:49 UTC
................
  r78388 | r.david.murray | 2010-02-23 17:57:58 -0500 (Tue, 23 Feb 2010) | 11 lines

  Merged revisions 78384 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r78384 | dirkjan.ochtman | 2010-02-23 16:09:52 -0500 (Tue, 23 Feb 2010) | 4 lines

    Fix #1537721: add writeheader() method to csv.DictWriter.

    Reviewed by skip.montanaro and thomas.wouters.
  ........
................
  r78389 | r.david.murray | 2010-02-23 18:00:34 -0500 (Tue, 23 Feb 2010) | 2 lines

  Fix version added for csv writeheader.
................
1 parent 41c5d2f
Raw File
Tip revision: f31f6c952f5975d7f6c7208335495da8d7fe34ac authored by R. David Murray on 23 February 2010, 23:03:49 UTC
Blocked revisions 78388-78389 via svnmerge
Tip revision: f31f6c9
test_super.py
"""Unit tests for new super() implementation."""

import sys
import unittest
from test import support


class A:
    def f(self):
        return 'A'
    @classmethod
    def cm(cls):
        return (cls, 'A')

class B(A):
    def f(self):
        return super().f() + 'B'
    @classmethod
    def cm(cls):
        return (cls, super().cm(), 'B')

class C(A):
    def f(self):
        return super().f() + 'C'
    @classmethod
    def cm(cls):
        return (cls, super().cm(), 'C')

class D(C, B):
    def f(self):
        return super().f() + 'D'
    def cm(cls):
        return (cls, super().cm(), 'D')

class E(D):
    pass

class F(E):
    f = E.f

class G(A):
    pass


class TestSuper(unittest.TestCase):

    def testBasicsWorking(self):
        self.assertEqual(D().f(), 'ABCD')

    def testClassGetattrWorking(self):
        self.assertEqual(D.f(D()), 'ABCD')

    def testSubclassNoOverrideWorking(self):
        self.assertEqual(E().f(), 'ABCD')
        self.assertEqual(E.f(E()), 'ABCD')

    def testUnboundMethodTransferWorking(self):
        self.assertEqual(F().f(), 'ABCD')
        self.assertEqual(F.f(F()), 'ABCD')

    def testClassMethodsStillWorking(self):
        self.assertEqual(A.cm(), (A, 'A'))
        self.assertEqual(A().cm(), (A, 'A'))
        self.assertEqual(G.cm(), (G, 'A'))
        self.assertEqual(G().cm(), (G, 'A'))

    def testSuperInClassMethodsWorking(self):
        d = D()
        self.assertEqual(d.cm(), (d, (D, (D, (D, 'A'), 'B'), 'C'), 'D'))
        e = E()
        self.assertEqual(e.cm(), (e, (E, (E, (E, 'A'), 'B'), 'C'), 'D'))

    def testSuperWithClosure(self):
        # Issue4360: super() did not work in a function that
        # contains a closure
        class E(A):
            def f(self):
                def nested():
                    self
                return super().f() + 'E'

        self.assertEqual(E().f(), 'AE')


def test_main():
    support.run_unittest(TestSuper)


if __name__ == "__main__":
    unittest.main()
back to top