Kaydet (Commit) 579f7355 authored tarafından Tim Peters's avatar Tim Peters

Be more careful about reverting mutuations to system-wide (sys) variables.

This fixes 15 spurious test failures on Windows (probably all due to
the test leaving a wrong path in sys.argv[0], which then prevented
regrtest.py from finding the expected-output files for tests running
after test_optparse).
üst 9c8fe1a9
...@@ -125,19 +125,25 @@ and kwargs %(kwargs)r ...@@ -125,19 +125,25 @@ and kwargs %(kwargs)r
def assertParseFail(self, cmdline_args, expected_output): def assertParseFail(self, cmdline_args, expected_output):
"""Assert the parser fails with the expected message.""" """Assert the parser fails with the expected message."""
sys.stderr = StringIO() save_stderr = sys.stderr
self.assertRaises(self.parser.parse_args, (cmdline_args,), None, try:
SystemExit, expected_output, sys.stderr = StringIO()
self.redirected_stderr) self.assertRaises(self.parser.parse_args, (cmdline_args,), None,
sys.stderr = sys.__stderr__ SystemExit, expected_output,
self.redirected_stderr)
finally:
sys.stderr = save_stderr
def assertStdoutEquals(self, cmdline_args, expected_output): def assertStdoutEquals(self, cmdline_args, expected_output):
"""Assert the parser prints the expected output on stdout.""" """Assert the parser prints the expected output on stdout."""
sys.stdout = StringIO() save_stdout = sys.stdout
self.assertRaises(self.parser.parse_args, (cmdline_args,), None, try:
SystemExit, expected_output, sys.stdout = StringIO()
self.redirected_stdout) self.assertRaises(self.parser.parse_args, (cmdline_args,), None,
sys.stdout = sys.__stdout__ SystemExit, expected_output,
self.redirected_stdout)
finally:
sys.stdout = save_stdout
def assertTypeError(self, func, expected_output, *args): def assertTypeError(self, func, expected_output, *args):
"""Assert a TypeError is raised when executing func.""" """Assert a TypeError is raised when executing func."""
...@@ -426,16 +432,21 @@ class TestProgName(BaseTest): ...@@ -426,16 +432,21 @@ class TestProgName(BaseTest):
def test_default_progname(self): def test_default_progname(self):
# Make sure that program name taken from sys.argv[0] by default. # Make sure that program name taken from sys.argv[0] by default.
sys.argv[0] = "/foo/bar/baz.py" save_argv = sys.argv[:]
parser = OptionParser("usage: %prog ...", version="%prog 1.2") try:
expected_usage = "usage: baz.py ...\n" # XXX Should the path be hard-coding forward-slashes?
self.assertUsage(parser, expected_usage) sys.argv[0] = "/foo/bar/baz.py"
self.assertVersion(parser, "baz.py 1.2") parser = OptionParser("usage: %prog ...", version="%prog 1.2")
self.assertHelp(parser, expected_usage = "usage: baz.py ...\n"
expected_usage + "\n" + self.assertUsage(parser, expected_usage)
"options:\n" self.assertVersion(parser, "baz.py 1.2")
" --version show program's version number and exit\n" self.assertHelp(parser,
" -h, --help show this help message and exit\n") expected_usage + "\n" +
"options:\n"
" --version show program's version number and exit\n"
" -h, --help show this help message and exit\n")
finally:
sys.argv[:] = save_argv
def test_custom_progname(self): def test_custom_progname(self):
parser = OptionParser(prog="thingy", parser = OptionParser(prog="thingy",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment