From: Ɓukasz Langa Date: Fri, 20 Jan 2012 13:57:55 +0000 (+0100) Subject: #13760: picklability tests for configparser exceptions X-Git-Tag: v3.3.0a1~331 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e7851956de5a6325bcf141531c0d489a4a6a714b;p=python #13760: picklability tests for configparser exceptions --- diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py index 1db92176f8..a6e905049f 100644 --- a/Lib/test/test_configparser.py +++ b/Lib/test/test_configparser.py @@ -1474,6 +1474,150 @@ class CoverageOneHundredTestCase(unittest.TestCase): """) self.assertEqual(repr(parser['section']), '') + +class ExceptionPicklingTestCase(unittest.TestCase): + """Tests for issue #13760: ConfigParser exceptions are not picklable.""" + + def test_error(self): + import pickle + e1 = configparser.Error('value') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(repr(e1), repr(e2)) + + def test_nosectionerror(self): + import pickle + e1 = configparser.NoSectionError('section') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.section, e2.section) + self.assertEqual(repr(e1), repr(e2)) + + def test_nooptionerror(self): + import pickle + e1 = configparser.NoOptionError('option', 'section') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.section, e2.section) + self.assertEqual(e1.option, e2.option) + self.assertEqual(repr(e1), repr(e2)) + + def test_duplicatesectionerror(self): + import pickle + e1 = configparser.DuplicateSectionError('section', 'source', 123) + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.section, e2.section) + self.assertEqual(e1.source, e2.source) + self.assertEqual(e1.lineno, e2.lineno) + self.assertEqual(repr(e1), repr(e2)) + + def test_duplicateoptionerror(self): + import pickle + e1 = configparser.DuplicateOptionError('section', 'option', 'source', + 123) + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.section, e2.section) + self.assertEqual(e1.option, e2.option) + self.assertEqual(e1.source, e2.source) + self.assertEqual(e1.lineno, e2.lineno) + self.assertEqual(repr(e1), repr(e2)) + + def test_interpolationerror(self): + import pickle + e1 = configparser.InterpolationError('option', 'section', 'msg') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.section, e2.section) + self.assertEqual(e1.option, e2.option) + self.assertEqual(repr(e1), repr(e2)) + + def test_interpolationmissingoptionerror(self): + import pickle + e1 = configparser.InterpolationMissingOptionError('option', 'section', + 'rawval', 'reference') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.section, e2.section) + self.assertEqual(e1.option, e2.option) + self.assertEqual(e1.reference, e2.reference) + self.assertEqual(repr(e1), repr(e2)) + + def test_interpolationsyntaxerror(self): + import pickle + e1 = configparser.InterpolationSyntaxError('option', 'section', 'msg') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.section, e2.section) + self.assertEqual(e1.option, e2.option) + self.assertEqual(repr(e1), repr(e2)) + + def test_interpolationdeptherror(self): + import pickle + e1 = configparser.InterpolationDepthError('option', 'section', + 'rawval') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.section, e2.section) + self.assertEqual(e1.option, e2.option) + self.assertEqual(repr(e1), repr(e2)) + + def test_parsingerror(self): + import pickle + e1 = configparser.ParsingError('source') + e1.append(1, 'line1') + e1.append(2, 'line2') + e1.append(3, 'line3') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.source, e2.source) + self.assertEqual(e1.errors, e2.errors) + self.assertEqual(repr(e1), repr(e2)) + e1 = configparser.ParsingError(filename='filename') + e1.append(1, 'line1') + e1.append(2, 'line2') + e1.append(3, 'line3') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.source, e2.source) + self.assertEqual(e1.errors, e2.errors) + self.assertEqual(repr(e1), repr(e2)) + + def test_missingsectionheadererror(self): + import pickle + e1 = configparser.MissingSectionHeaderError('filename', 123, 'line') + pickled = pickle.dumps(e1) + e2 = pickle.loads(pickled) + self.assertEqual(e1.message, e2.message) + self.assertEqual(e1.args, e2.args) + self.assertEqual(e1.line, e2.line) + self.assertEqual(e1.source, e2.source) + self.assertEqual(e1.lineno, e2.lineno) + self.assertEqual(repr(e1), repr(e2)) + + def test_main(): support.run_unittest( ConfigParserTestCase, @@ -1495,4 +1639,5 @@ def test_main(): ConfigParserTestCaseNonStandardDefaultSection, ReadFileTestCase, CoverageOneHundredTestCase, + ExceptionPicklingTestCase, )