Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e785195

Browse files
committed
#13760: picklability tests for configparser exceptions
1 parent 5d116b7 commit e785195

1 file changed

Lines changed: 145 additions & 0 deletions

File tree

Lib/test/test_configparser.py

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,6 +1474,150 @@ def test_sectionproxy_repr(self):
14741474
""")
14751475
self.assertEqual(repr(parser['section']), '<Section: section>')
14761476

1477+
1478+
class ExceptionPicklingTestCase(unittest.TestCase):
1479+
"""Tests for issue #13760: ConfigParser exceptions are not picklable."""
1480+
1481+
def test_error(self):
1482+
import pickle
1483+
e1 = configparser.Error('value')
1484+
pickled = pickle.dumps(e1)
1485+
e2 = pickle.loads(pickled)
1486+
self.assertEqual(e1.message, e2.message)
1487+
self.assertEqual(repr(e1), repr(e2))
1488+
1489+
def test_nosectionerror(self):
1490+
import pickle
1491+
e1 = configparser.NoSectionError('section')
1492+
pickled = pickle.dumps(e1)
1493+
e2 = pickle.loads(pickled)
1494+
self.assertEqual(e1.message, e2.message)
1495+
self.assertEqual(e1.args, e2.args)
1496+
self.assertEqual(e1.section, e2.section)
1497+
self.assertEqual(repr(e1), repr(e2))
1498+
1499+
def test_nooptionerror(self):
1500+
import pickle
1501+
e1 = configparser.NoOptionError('option', 'section')
1502+
pickled = pickle.dumps(e1)
1503+
e2 = pickle.loads(pickled)
1504+
self.assertEqual(e1.message, e2.message)
1505+
self.assertEqual(e1.args, e2.args)
1506+
self.assertEqual(e1.section, e2.section)
1507+
self.assertEqual(e1.option, e2.option)
1508+
self.assertEqual(repr(e1), repr(e2))
1509+
1510+
def test_duplicatesectionerror(self):
1511+
import pickle
1512+
e1 = configparser.DuplicateSectionError('section', 'source', 123)
1513+
pickled = pickle.dumps(e1)
1514+
e2 = pickle.loads(pickled)
1515+
self.assertEqual(e1.message, e2.message)
1516+
self.assertEqual(e1.args, e2.args)
1517+
self.assertEqual(e1.section, e2.section)
1518+
self.assertEqual(e1.source, e2.source)
1519+
self.assertEqual(e1.lineno, e2.lineno)
1520+
self.assertEqual(repr(e1), repr(e2))
1521+
1522+
def test_duplicateoptionerror(self):
1523+
import pickle
1524+
e1 = configparser.DuplicateOptionError('section', 'option', 'source',
1525+
123)
1526+
pickled = pickle.dumps(e1)
1527+
e2 = pickle.loads(pickled)
1528+
self.assertEqual(e1.message, e2.message)
1529+
self.assertEqual(e1.args, e2.args)
1530+
self.assertEqual(e1.section, e2.section)
1531+
self.assertEqual(e1.option, e2.option)
1532+
self.assertEqual(e1.source, e2.source)
1533+
self.assertEqual(e1.lineno, e2.lineno)
1534+
self.assertEqual(repr(e1), repr(e2))
1535+
1536+
def test_interpolationerror(self):
1537+
import pickle
1538+
e1 = configparser.InterpolationError('option', 'section', 'msg')
1539+
pickled = pickle.dumps(e1)
1540+
e2 = pickle.loads(pickled)
1541+
self.assertEqual(e1.message, e2.message)
1542+
self.assertEqual(e1.args, e2.args)
1543+
self.assertEqual(e1.section, e2.section)
1544+
self.assertEqual(e1.option, e2.option)
1545+
self.assertEqual(repr(e1), repr(e2))
1546+
1547+
def test_interpolationmissingoptionerror(self):
1548+
import pickle
1549+
e1 = configparser.InterpolationMissingOptionError('option', 'section',
1550+
'rawval', 'reference')
1551+
pickled = pickle.dumps(e1)
1552+
e2 = pickle.loads(pickled)
1553+
self.assertEqual(e1.message, e2.message)
1554+
self.assertEqual(e1.args, e2.args)
1555+
self.assertEqual(e1.section, e2.section)
1556+
self.assertEqual(e1.option, e2.option)
1557+
self.assertEqual(e1.reference, e2.reference)
1558+
self.assertEqual(repr(e1), repr(e2))
1559+
1560+
def test_interpolationsyntaxerror(self):
1561+
import pickle
1562+
e1 = configparser.InterpolationSyntaxError('option', 'section', 'msg')
1563+
pickled = pickle.dumps(e1)
1564+
e2 = pickle.loads(pickled)
1565+
self.assertEqual(e1.message, e2.message)
1566+
self.assertEqual(e1.args, e2.args)
1567+
self.assertEqual(e1.section, e2.section)
1568+
self.assertEqual(e1.option, e2.option)
1569+
self.assertEqual(repr(e1), repr(e2))
1570+
1571+
def test_interpolationdeptherror(self):
1572+
import pickle
1573+
e1 = configparser.InterpolationDepthError('option', 'section',
1574+
'rawval')
1575+
pickled = pickle.dumps(e1)
1576+
e2 = pickle.loads(pickled)
1577+
self.assertEqual(e1.message, e2.message)
1578+
self.assertEqual(e1.args, e2.args)
1579+
self.assertEqual(e1.section, e2.section)
1580+
self.assertEqual(e1.option, e2.option)
1581+
self.assertEqual(repr(e1), repr(e2))
1582+
1583+
def test_parsingerror(self):
1584+
import pickle
1585+
e1 = configparser.ParsingError('source')
1586+
e1.append(1, 'line1')
1587+
e1.append(2, 'line2')
1588+
e1.append(3, 'line3')
1589+
pickled = pickle.dumps(e1)
1590+
e2 = pickle.loads(pickled)
1591+
self.assertEqual(e1.message, e2.message)
1592+
self.assertEqual(e1.args, e2.args)
1593+
self.assertEqual(e1.source, e2.source)
1594+
self.assertEqual(e1.errors, e2.errors)
1595+
self.assertEqual(repr(e1), repr(e2))
1596+
e1 = configparser.ParsingError(filename='filename')
1597+
e1.append(1, 'line1')
1598+
e1.append(2, 'line2')
1599+
e1.append(3, 'line3')
1600+
pickled = pickle.dumps(e1)
1601+
e2 = pickle.loads(pickled)
1602+
self.assertEqual(e1.message, e2.message)
1603+
self.assertEqual(e1.args, e2.args)
1604+
self.assertEqual(e1.source, e2.source)
1605+
self.assertEqual(e1.errors, e2.errors)
1606+
self.assertEqual(repr(e1), repr(e2))
1607+
1608+
def test_missingsectionheadererror(self):
1609+
import pickle
1610+
e1 = configparser.MissingSectionHeaderError('filename', 123, 'line')
1611+
pickled = pickle.dumps(e1)
1612+
e2 = pickle.loads(pickled)
1613+
self.assertEqual(e1.message, e2.message)
1614+
self.assertEqual(e1.args, e2.args)
1615+
self.assertEqual(e1.line, e2.line)
1616+
self.assertEqual(e1.source, e2.source)
1617+
self.assertEqual(e1.lineno, e2.lineno)
1618+
self.assertEqual(repr(e1), repr(e2))
1619+
1620+
14771621
def test_main():
14781622
support.run_unittest(
14791623
ConfigParserTestCase,
@@ -1495,4 +1639,5 @@ def test_main():
14951639
ConfigParserTestCaseNonStandardDefaultSection,
14961640
ReadFileTestCase,
14971641
CoverageOneHundredTestCase,
1642+
ExceptionPicklingTestCase,
14981643
)

0 commit comments

Comments
 (0)