[Python-checkins] r47026 - python/trunk/Lib/test/test_optparse.py

tim.peters python-checkins at python.org
Mon Jun 19 11:09:44 CEST 2006


Author: tim.peters
Date: Mon Jun 19 11:09:44 2006
New Revision: 47026

Modified:
   python/trunk/Lib/test/test_optparse.py
Log:
TestHelp.make_parser():  This was making a permanent change to
os.environ (setting envar COLUMNS), which at least caused
test_float_default() to fail if the tests were run more than once.

This repairs the test_optparse -R failures Neal reported on
python-dev.  It also explains some seemingly bizarre test_optparse
failures we saw a couple weeks ago on the buildbots, when
test_optparse failed due to test_file failing to clean up after
itself, and then test_optparse failed in an entirely different
way when regrtest's -w option ran test_optparse a second time.
It's now obvious that make_parser() permanently changing os.environ
was responsible for the second half of that.


Modified: python/trunk/Lib/test/test_optparse.py
==============================================================================
--- python/trunk/Lib/test/test_optparse.py	(original)
+++ python/trunk/Lib/test/test_optparse.py	Mon Jun 19 11:09:44 2006
@@ -1460,8 +1460,19 @@
             make_option("--foo", action="append", type="string", dest='foo',
                         help="store FOO in the foo list for later fooing"),
             ]
+        # The parser constructor looks at the COLUMNS envar.  We need to
+        # restore the original value after the parser is constructed, else
+        # that's a permanent change possibly affecting other tests, and
+        # definitely affecting these tests when they're run multiple times.
+        orig_columns = os.environ.get('COLUMNS')
         os.environ['COLUMNS'] = str(columns)
-        return InterceptingOptionParser(option_list=options)
+        try:
+            return InterceptingOptionParser(option_list=options)
+        finally:
+            if orig_columns is None:
+                del os.environ['COLUMNS']
+            else:
+                os.environ['COLUMNS'] = orig_columns
 
     def assertHelpEquals(self, expected_output):
         if type(expected_output) is types.UnicodeType:


More information about the Python-checkins mailing list