Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
gh-103186: Fix or catch 'extra' stderr output from unittests (GH-103196)
Reduce test noise by fixing or catching and testing stderr messages from individual tests.

test_cmd_line_script.test_script_as_dev_fd calls spawn_python and hence subprocess.Popen with incompatible arguments. On POSIX, pass_fds forces close_fds to be True (subprocess.py line 848). Correct the call.

test_uuid.test_cli_namespace_required_for_uuid3: when the namespace is omitted, uuid.main calls argparse.Argument_Parser.error, which prints to stderr before calling sys.exit, which raises SystemExit. Unittest assertRaises catches the exception but not the previous output. Catch the output and test it.

test_warnings.test_catchwarnings_with_simplefilter_error similarly prints before raising. Catch the output and test it.
---------

(cherry picked from commit 9d58225)

Co-authored-by: Ijtaba Hussain <[email protected]>
Co-authored-by: Oleg Iarygin <[email protected]>
  • Loading branch information
2 people authored and miss-islington committed Jul 10, 2023
commit 988c8f1f9dae066c2abaf891dcb97016ed38bc94
2 changes: 1 addition & 1 deletion Lib/test/test_cmd_line_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -777,7 +777,7 @@ def test_script_as_dev_fd(self):
with os_helper.temp_dir() as work_dir:
script_name = _make_test_script(work_dir, 'script.py', script)
with open(script_name, "r") as fp:
p = spawn_python(f"/dev/fd/{fp.fileno()}", close_fds=False, pass_fds=(0,1,2,fp.fileno()))
p = spawn_python(f"/dev/fd/{fp.fileno()}", close_fds=True, pass_fds=(0,1,2,fp.fileno()))
out, err = p.communicate()
self.assertEqual(out, b"12345678912345678912345\n")

Expand Down
9 changes: 6 additions & 3 deletions Lib/test/test_uuid.py
Original file line number Diff line number Diff line change
Expand Up @@ -706,20 +706,23 @@ def test_uuid_weakref(self):
self.assertIs(strong, weak())

@mock.patch.object(sys, "argv", ["", "-u", "uuid3", "-n", "@dns"])
def test_cli_namespace_required_for_uuid3(self):
@mock.patch('sys.stderr', new_callable=io.StringIO)
def test_cli_namespace_required_for_uuid3(self, mock_err):
with self.assertRaises(SystemExit) as cm:
self.uuid.main()

# Check that exception code is the same as argparse.ArgumentParser.error
self.assertEqual(cm.exception.code, 2)
self.assertIn("error: Incorrect number of arguments", mock_err.getvalue())

@mock.patch.object(sys, "argv", ["", "-u", "uuid3", "-N", "python.org"])
def test_cli_name_required_for_uuid3(self):
@mock.patch('sys.stderr', new_callable=io.StringIO)
def test_cli_name_required_for_uuid3(self, mock_err):
with self.assertRaises(SystemExit) as cm:
self.uuid.main()

# Check that exception code is the same as argparse.ArgumentParser.error
self.assertEqual(cm.exception.code, 2)
self.assertIn("error: Incorrect number of arguments", mock_err.getvalue())

@mock.patch.object(sys, "argv", [""])
def test_cli_uuid4_outputted_with_no_args(self):
Expand Down
10 changes: 7 additions & 3 deletions Lib/test/test_warnings/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -387,9 +387,13 @@ def test_catchwarnings_with_simplefilter_error(self):
with self.module.catch_warnings(
module=self.module, action="error", category=FutureWarning
):
self.module.warn("Other types of warnings are not errors")
self.assertRaises(FutureWarning,
self.module.warn, FutureWarning("msg"))
with support.captured_stderr() as stderr:
error_msg = "Other types of warnings are not errors"
self.module.warn(error_msg)
self.assertRaises(FutureWarning,
self.module.warn, FutureWarning("msg"))
stderr = stderr.getvalue()
self.assertIn(error_msg, stderr)

class CFilterTests(FilterTests, unittest.TestCase):
module = c_warnings
Expand Down