#16306: report only the first unknown option and add more tests. Patch by Serhiy Storchaka.
This commit is contained in:
parent
0afe4e4fa6
commit
ec6486d52d
|
@ -116,14 +116,24 @@ class CmdLineTest(unittest.TestCase):
|
||||||
print >>script, "del sys.modules['__main__']"
|
print >>script, "del sys.modules['__main__']"
|
||||||
assert_python_ok(filename)
|
assert_python_ok(filename)
|
||||||
|
|
||||||
|
|
||||||
def test_unknown_options(self):
|
def test_unknown_options(self):
|
||||||
# Add "without='-E'" to prevent _assert_python append env_vars -E
|
rc, out, err = assert_python_failure('-E', '-z')
|
||||||
# which changes the output of stderr
|
self.assertIn(b'Unknown option: -z', err)
|
||||||
rc, out, err = assert_python_failure('-z', without='-E')
|
|
||||||
self.assertIn(b'Unknown option', err)
|
|
||||||
self.assertEqual(err.splitlines().count(b'Unknown option: -z'), 1)
|
self.assertEqual(err.splitlines().count(b'Unknown option: -z'), 1)
|
||||||
self.assertEqual(b'', out)
|
self.assertEqual(b'', out)
|
||||||
|
# Add "without='-E'" to prevent _assert_python to append -E
|
||||||
|
# to env_vars and change the output of stderr
|
||||||
|
rc, out, err = assert_python_failure('-z', without='-E')
|
||||||
|
self.assertIn(b'Unknown option: -z', err)
|
||||||
|
self.assertEqual(err.splitlines().count(b'Unknown option: -z'), 1)
|
||||||
|
self.assertEqual(b'', out)
|
||||||
|
rc, out, err = assert_python_failure('-a', '-z', without='-E')
|
||||||
|
self.assertIn(b'Unknown option: -a', err)
|
||||||
|
# only the first unknown option is reported
|
||||||
|
self.assertNotIn(b'Unknown option: -z', err)
|
||||||
|
self.assertEqual(err.splitlines().count(b'Unknown option: -a'), 1)
|
||||||
|
self.assertEqual(b'', out)
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
test.test_support.run_unittest(CmdLineTest)
|
test.test_support.run_unittest(CmdLineTest)
|
||||||
|
|
|
@ -264,6 +264,7 @@ Py_Main(int argc, char **argv)
|
||||||
|
|
||||||
/* Hash randomization needed early for all string operations
|
/* Hash randomization needed early for all string operations
|
||||||
(including -W and -X options). */
|
(including -W and -X options). */
|
||||||
|
_PyOS_opterr = 0; /* prevent printing the error in 1st pass */
|
||||||
while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) {
|
while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) {
|
||||||
if (c == 'm' || c == 'c') {
|
if (c == 'm' || c == 'c') {
|
||||||
/* -c / -m is the last option: following arguments are
|
/* -c / -m is the last option: following arguments are
|
||||||
|
|
|
@ -41,7 +41,7 @@ static char *opt_ptr = "";
|
||||||
|
|
||||||
void _PyOS_ResetGetOpt(void)
|
void _PyOS_ResetGetOpt(void)
|
||||||
{
|
{
|
||||||
_PyOS_opterr = 0; /* prevent printing the error in 2nd loop in main.c */
|
_PyOS_opterr = 1;
|
||||||
_PyOS_optind = 1;
|
_PyOS_optind = 1;
|
||||||
_PyOS_optarg = NULL;
|
_PyOS_optarg = NULL;
|
||||||
opt_ptr = "";
|
opt_ptr = "";
|
||||||
|
|
Loading…
Reference in New Issue