Skip to content

Commit eb6ddef

Browse files
committed
Add tests to ensure error verbosity with and without -v
1 parent 133b1a5 commit eb6ddef

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

Lib/test/test_site.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import sysconfig
2828
import tempfile
2929
from textwrap import dedent
30+
from types import SimpleNamespace
3031
import urllib.error
3132
import urllib.request
3233
from unittest import mock
@@ -1127,6 +1128,36 @@ def test_read_pth_file_bad_line_continues(self):
11271128
fullname = os.path.join(self.sitedir, 'foo.pth')
11281129
self.assertIn(subdir, site._pending_syspaths.get(fullname, []))
11291130

1131+
def _flags_with_verbose(self, verbose):
1132+
# Build a sys.flags clone with verbose overridden but every
1133+
# other field preserved, so unrelated reads like
1134+
# sys.flags.optimize during io.open_code() continue to work.
1135+
attrs = {name: getattr(sys.flags, name)
1136+
for name in sys.flags.__match_args__}
1137+
attrs['verbose'] = verbose
1138+
return SimpleNamespace(**attrs)
1139+
1140+
def test_read_pth_file_parse_error_silent_by_default(self):
1141+
# PEP 829: parse-time errors are silent unless -v is given.
1142+
# Force the error path by making makepath() raise.
1143+
self._make_pth("badline\n", name='foo')
1144+
with mock.patch('site.makepath', side_effect=ValueError("boom")), \
1145+
mock.patch('sys.flags', self._flags_with_verbose(False)), \
1146+
captured_stderr() as err:
1147+
site._read_pth_file(self.sitedir, 'foo.pth', set())
1148+
self.assertEqual(err.getvalue(), "")
1149+
1150+
def test_read_pth_file_parse_error_reported_under_verbose(self):
1151+
# PEP 829: parse-time errors are reported when -v is given.
1152+
self._make_pth("badline\n", name='foo')
1153+
with mock.patch('site.makepath', side_effect=ValueError("boom")), \
1154+
mock.patch('sys.flags', self._flags_with_verbose(True)), \
1155+
captured_stderr() as err:
1156+
site._read_pth_file(self.sitedir, 'foo.pth', set())
1157+
out = err.getvalue()
1158+
self.assertIn('Error in', out)
1159+
self.assertIn('foo.pth', out)
1160+
11301161
def test_read_pth_file_locale_fallback(self):
11311162
# PEP 829: .pth files that fail UTF-8 decoding fall back to the
11321163
# locale encoding for backward compatibility (deprecated in

0 commit comments

Comments
 (0)