Fix #7113. Patch by Ćukasz Langa.
Changes include using a list of lines instead of patching together using
string interpolation, and a multi-line value test cases.
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index 6c50287..22a314d 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -1,5 +1,6 @@
import ConfigParser
import StringIO
+import os
import unittest
import UserDict
@@ -186,7 +187,8 @@
self.assertEqual(cf.sections(), [],
"new ConfigParser should have no defined sections")
self.assertFalse(cf.has_section("Foo"),
- "new ConfigParser should have no acknowledged sections")
+ "new ConfigParser should have no acknowledged "
+ "sections")
self.assertRaises(ConfigParser.NoSectionError,
cf.options, "Foo")
self.assertRaises(ConfigParser.NoSectionError,
@@ -357,6 +359,11 @@
config_class = ConfigParser.ConfigParser
def test_interpolation(self):
+ rawval = {
+ ConfigParser.ConfigParser: ("something %(with11)s "
+ "lots of interpolation (11 steps)"),
+ ConfigParser.SafeConfigParser: "%(with1)s",
+ }
cf = self.get_interpolation_config()
eq = self.assertEqual
eq(cf.get("Foo", "getname"), "Foo")
@@ -403,6 +410,33 @@
self.assertRaises(ValueError, cf.get, 'non-string',
'string_with_interpolation', raw=False)
+class MultilineValuesTestCase(TestCaseBase):
+ config_class = ConfigParser.ConfigParser
+ wonderful_spam = ("I'm having spam spam spam spam "
+ "spam spam spam beaked beans spam "
+ "spam spam and spam!").replace(' ', '\t\n')
+
+ def setUp(self):
+ cf = self.newconfig()
+ for i in range(100):
+ s = 'section{}'.format(i)
+ cf.add_section(s)
+ for j in range(10):
+ cf.set(s, 'lovely_spam{}'.format(j), self.wonderful_spam)
+ with open(test_support.TESTFN, 'w') as f:
+ cf.write(f)
+
+ def tearDown(self):
+ os.unlink(test_support.TESTFN)
+
+ def test_dominating_multiline_values(self):
+ # we're reading from file because this is where the code changed
+ # during performance updates in Python 3.2
+ cf_from_file = self.newconfig()
+ with open(test_support.TESTFN) as f:
+ cf_from_file.readfp(f)
+ self.assertEqual(cf_from_file.get('section8', 'lovely_spam4'),
+ self.wonderful_spam.replace('\t\n', '\n'))
class RawConfigParserTestCase(TestCaseBase):
config_class = ConfigParser.RawConfigParser
@@ -521,10 +555,11 @@
def test_main():
test_support.run_unittest(
ConfigParserTestCase,
+ MultilineValuesTestCase,
RawConfigParserTestCase,
SafeConfigParserTestCase,
- SortedTestCase,
SafeConfigParserTestCaseNoValue,
+ SortedTestCase,
)