Merged revisions 75279 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r75279 | r.david.murray | 2009-10-07 19:38:55 -0400 (Wed, 07 Oct 2009) | 10 lines

  Merged revisions 75255 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r75255 | r.david.murray | 2009-10-05 13:03:09 -0400 (Mon, 05 Oct 2009) | 3 lines

    Issue #7058: Added save/restore for argv and os.environ to runtest_inner
    in regrtest, with warnings if the called test modifies them.
  ........
................
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index e98a99a..0c01cd2 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -598,6 +598,10 @@
     refleak = False  # True if the test leaked references.
     try:
         save_stdout = sys.stdout
+        # Save various things that tests may mess up so we can restore
+        # them afterward.
+        save_environ = dict(os.environ)
+        save_argv = sys.argv[:]
         try:
             if cfp:
                 sys.stdout = cfp
@@ -622,6 +626,17 @@
             test_times.append((test_time, test))
         finally:
             sys.stdout = save_stdout
+            # Restore what we saved if needed, but also complain if the test
+            # changed it so that the test may eventually get fixed.
+            if not os.environ == save_environ:
+                if not quiet:
+                    print("Warning: os.environ was modified by", test)
+                os.environ.clear()
+                os.environ.update(save_environ)
+            if not sys.argv == save_argv:
+                if not quiet:
+                    print("Warning: argv was modified by", test)
+                sys.argv[:] = save_argv
     except support.ResourceDenied as msg:
         if not quiet:
             print(test, "skipped --", msg)