summaryrefslogtreecommitdiff
path: root/Lib/test
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-12-15 14:31:28 +0100
committerAntoine Pitrou <solipsis@pitrou.net>2011-12-15 14:31:28 +0100
commite0e2735f4169d3663df3bdbe062c7764e3510e57 (patch)
tree1eb03bc3725f6f3fdea2b083945d5e2ee6def412 /Lib/test
parentd73a9acb633883a713fe63dbe67b36b3bddec902 (diff)
downloadcpython-git-e0e2735f4169d3663df3bdbe062c7764e3510e57.tar.gz
Fix OSError.__init__ and OSError.__new__ so that each of them can be
overriden and take additional arguments (followup to issue #12555).
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_pep3151.py60
1 files changed, 55 insertions, 5 deletions
diff --git a/Lib/test/test_pep3151.py b/Lib/test/test_pep3151.py
index e327f42301..8af9e0c5f6 100644
--- a/Lib/test/test_pep3151.py
+++ b/Lib/test/test_pep3151.py
@@ -12,6 +12,23 @@ from test import support
class SubOSError(OSError):
pass
+class SubOSErrorWithInit(OSError):
+ def __init__(self, message, bar):
+ self.bar = bar
+ super().__init__(message)
+
+class SubOSErrorWithNew(OSError):
+ def __new__(cls, message, baz):
+ self = super().__new__(cls, message)
+ self.baz = baz
+ return self
+
+class SubOSErrorCombinedInitFirst(SubOSErrorWithInit, SubOSErrorWithNew):
+ pass
+
+class SubOSErrorCombinedNewFirst(SubOSErrorWithNew, SubOSErrorWithInit):
+ pass
+
class HierarchyTest(unittest.TestCase):
@@ -74,11 +91,6 @@ class HierarchyTest(unittest.TestCase):
e = OSError(errcode, "Some message")
self.assertIs(type(e), OSError)
- def test_OSError_subclass_mapping(self):
- # When constructing an OSError subclass, errno mapping isn't done
- e = SubOSError(EEXIST, "Bad file descriptor")
- self.assertIs(type(e), SubOSError)
-
def test_try_except(self):
filename = "some_hopefully_non_existing_file"
@@ -144,6 +156,44 @@ class AttributesTest(unittest.TestCase):
# XXX VMSError not tested
+class ExplicitSubclassingTest(unittest.TestCase):
+
+ def test_errno_mapping(self):
+ # When constructing an OSError subclass, errno mapping isn't done
+ e = SubOSError(EEXIST, "Bad file descriptor")
+ self.assertIs(type(e), SubOSError)
+
+ def test_init_overriden(self):
+ e = SubOSErrorWithInit("some message", "baz")
+ self.assertEqual(e.bar, "baz")
+ self.assertEqual(e.args, ("some message",))
+
+ def test_init_kwdargs(self):
+ e = SubOSErrorWithInit("some message", bar="baz")
+ self.assertEqual(e.bar, "baz")
+ self.assertEqual(e.args, ("some message",))
+
+ def test_new_overriden(self):
+ e = SubOSErrorWithNew("some message", "baz")
+ self.assertEqual(e.baz, "baz")
+ self.assertEqual(e.args, ("some message",))
+
+ def test_new_kwdargs(self):
+ e = SubOSErrorWithNew("some message", baz="baz")
+ self.assertEqual(e.baz, "baz")
+ self.assertEqual(e.args, ("some message",))
+
+ def test_init_new_overriden(self):
+ e = SubOSErrorCombinedInitFirst("some message", "baz")
+ self.assertEqual(e.bar, "baz")
+ self.assertEqual(e.baz, "baz")
+ self.assertEqual(e.args, ("some message",))
+ e = SubOSErrorCombinedNewFirst("some message", "baz")
+ self.assertEqual(e.bar, "baz")
+ self.assertEqual(e.baz, "baz")
+ self.assertEqual(e.args, ("some message",))
+
+
def test_main():
support.run_unittest(__name__)