mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									688b9e384e
								
							
						
					
					
						commit
						9a27b0cd19
					
				
					 2 changed files with 60 additions and 21 deletions
				
			
		|  | @ -1,7 +1,8 @@ | |||
| import collections | ||||
| import configparser | ||||
| import io | ||||
| import os | ||||
| import unittest | ||||
| import collections | ||||
| 
 | ||||
| from test import support | ||||
| 
 | ||||
|  | @ -162,7 +163,7 @@ def test_default_case_sensitivity(self): | |||
|     def test_parse_errors(self): | ||||
|         self.newconfig() | ||||
|         e = self.parse_error(configparser.ParsingError, | ||||
|                          "[Foo]\n  extra-spaces: splat\n") | ||||
|                              "[Foo]\n  extra-spaces: splat\n") | ||||
|         self.assertEqual(e.args, ('<???>',)) | ||||
|         self.parse_error(configparser.ParsingError, | ||||
|                          "[Foo]\n  extra-spaces= splat\n") | ||||
|  | @ -171,7 +172,7 @@ def test_parse_errors(self): | |||
|         self.parse_error(configparser.ParsingError, | ||||
|                          "[Foo]\n=value-without-option-name\n") | ||||
|         e = self.parse_error(configparser.MissingSectionHeaderError, | ||||
|                          "No Section!\n") | ||||
|                              "No Section!\n") | ||||
|         self.assertEqual(e.args, ('<???>', 1, "No Section!\n")) | ||||
| 
 | ||||
|     def parse_error(self, exc, src): | ||||
|  | @ -185,7 +186,8 @@ def test_query_errors(self): | |||
|         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") | ||||
|         with self.assertRaises(configparser.NoSectionError) as cm: | ||||
|             cf.options("Foo") | ||||
|         with self.assertRaises(configparser.NoSectionError) as cm: | ||||
|  | @ -355,8 +357,8 @@ class ConfigParserTestCase(TestCaseBase): | |||
| 
 | ||||
|     def test_interpolation(self): | ||||
|         rawval = { | ||||
|             configparser.ConfigParser: "something %(with11)s "\ | ||||
|                                            "lots of interpolation (11 steps)", | ||||
|             configparser.ConfigParser: ("something %(with11)s " | ||||
|                                         "lots of interpolation (11 steps)"), | ||||
|             configparser.SafeConfigParser: "%(with1)s", | ||||
|         } | ||||
|         cf = self.get_interpolation_config() | ||||
|  | @ -412,6 +414,33 @@ def test_set_nonstring_types(self): | |||
|         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(support.TESTFN, 'w') as f: | ||||
|             cf.write(f) | ||||
| 
 | ||||
|     def tearDown(self): | ||||
|         os.unlink(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(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 | ||||
|  | @ -530,10 +559,11 @@ def test_sorted(self): | |||
| def test_main(): | ||||
|     support.run_unittest( | ||||
|         ConfigParserTestCase, | ||||
|         MultilineValuesTestCase, | ||||
|         RawConfigParserTestCase, | ||||
|         SafeConfigParserTestCase, | ||||
|         SortedTestCase, | ||||
|         SafeConfigParserTestCaseNoValue, | ||||
|         SortedTestCase, | ||||
|         ) | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Brian Curtin
						Brian Curtin