This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2011年04月22日 03:26 by terry.reedy, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Messages (18) | |||
|---|---|---|---|
| msg134259 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2011年04月22日 03:26 | |
(3.1 not checked because it seems not to have test_argparse) Python 2.7 or 3.2, WinXP these pass: C:\Programs\Python27>python -m test.regrtest test_argparse C:\Programs\Python32>python -m test test_argparse [1/1] test_argparse 1 test OK. C:\Programs\Python32>python -m test -v test_argparse C:\Programs\Python32>python -c "from test import test_argparse as t; t.test_main()" Ran 1536 tests in 6.188s OK but interactively (command window interpreter or IDLE shell, 3.2 or 2.7) >>> from test import test_argparse as t; t.test_main() gives two failures related to extra spaces in usage string (I added a couple of newlines for clarity). I have no idea if problem is with argparse, test_argparse, regrtest, unittest, or interactive versus batch mode. ====================================================================== FAIL: test_groups_parents (test.test_argparse.TestParentParsers) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Programs\Python32\lib\test\test_argparse.py", line 2217, in test_groups_parents '''.format(self.main_program))) File "C:\Programs\Python32\lib\test\test_argparse.py", line 29, in assertEqual super(TestCase, self).assertEqual(obj1, obj2) AssertionError: 'usage: [-h] [-w W] [-x X] [-y Y | -z Z]\n\noptional arguments:\n -h, --help s [truncated]... != 'usage: [-h] [-w W] [-x X] [-y Y | -z Z]\n\noptional arguments:\n -h, --help [truncated]... - usage: [-h] [-w W] [-x X] [-y Y | -z Z] + usage: [-h] [-w W] [-x X] [-y Y | -z Z] ? + optional arguments: -h, --help show this help message and exit -y Y -z Z g: gd -w W -x X ====================================================================== FAIL: test_parent_help (test.test_argparse.TestParentParsers) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Programs\Python32\lib\test\test_argparse.py", line 2188, in test_parent_help '''.format(self.main_program))) File "C:\Programs\Python32\lib\test\test_argparse.py", line 29, in assertEqual super(TestCase, self).assertEqual(obj1, obj2) AssertionError: 'usage: [-h] [-b B] [--d D] [--w W] [-y Y] a z\n\npositional arguments:\n a\n [truncated]... != 'usage: [-h] [-b B] [--d D] [--w W] [-y Y] a z\n\npositional arguments:\n a\n [truncated]... - usage: [-h] [-b B] [--d D] [--w W] [-y Y] a z + usage: [-h] [-b B] [--d D] [--w W] [-y Y] a z ? + positional arguments: a z optional arguments: -h, --help show this help message and exit -b B --w W c: --d D x: -y Y ---------------------------------------------------------------------- Ran 1536 tests in 29.438s FAILED (failures=2) Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> from test import test_argparse as t; t.test_main() File "C:\Programs\Python32\lib\test\test_argparse.py", line 4423, in test_main support.run_unittest(__name__) File "C:\Programs\Python32\lib\test\support.py", line 1145, in run_unittest _run_suite(suite) File "C:\Programs\Python32\lib\test\support.py", line 1128, in _run_suite raise TestFailed(err) test.support.TestFailed: multiple errors occurred |
|||
| msg134284 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2011年04月22日 23:37 | |
If I put the same line I ran interactively in a file and run it from test import test_argparse as t; t.test_main() all tests pass. So it is specifically a problem from the interactive prompt. |
|||
| msg134286 - (view) | Author: Andreas Stührk (Trundle) * | Date: 2011年04月22日 23:51 | |
That happens because argparse uses `os.basename(sys.argv[0])` (per default) as program name, but `sys.argv[0]` is usually a string of length 0 at interactive sessions. The tests use ``"usage: {} ...".format(program_name)`` (note that there will be two spaces for an empty `program_name`) for the expected output, while argparse only outputs one space in that case.
|
|||
| msg134291 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2011年04月23日 01:34 | |
Thanks for the diagnosis. I am glad it is something simple. |
|||
| msg137068 - (view) | Author: Éric Araujo (eric.araujo) * (Python committer) | Date: 2011年05月27日 15:51 | |
I don’t know if we should go out of our way to support running tests in interactive mode. Running them from regrtest is the recommended way. |
|||
| msg137076 - (view) | Author: Michael Foord (michael.foord) * (Python committer) | Date: 2011年05月27日 16:22 | |
Unless Terry wants to contribute a fix I suggest closing this. |
|||
| msg137085 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2011年05月27日 16:58 | |
Ahem. Interactive mode is an approved method of running Python code, along with batch mode. The core interpreter and stdlib modules should run correctly in both modes. So the entire test suite should pass in both modes too. If the tests are written correctly, failure would indicate a bug in the tested component.
That aside, the doc for test/ does not contain 'recommended' and does not discuss running a single test. What I did is the easiest way on Windows.
In this case, following Andreas' remark, the bug is in the test, not the module, in that it miscalculates the expected output in the corner case of a null program name. At lines 2172 and 2205 in the 3.2.0 version of test_argparse.py, changing
'''usage: {} ...
...
'''.format(self.main_program)
to
prog = self.main_program
...
'''usage: {}{}...
...
'''.format(prog, ' ' if prog else '')
fixes the problem.
|
|||
| msg137087 - (view) | Author: Éric Araujo (eric.araujo) * (Python committer) | Date: 2011年05月27日 17:04 | |
> Interactive mode is an approved method of running Python code, along > with batch mode. The core interpreter and stdlib modules should run > correctly in both modes. So the entire test suite should pass in both > modes too. You are right. > That aside, the doc for test/ does not contain 'recommended' and does > not discuss running a single test. Such guidelines belong more in the devguide than the library doc: http://docs.python.org/devguide/runtests > What I did is the easiest way on Windows. I cannot argue with you on that :) > In this case, following Andreas' remark, the bug is in the test, not > the module, in that it miscalculates the expected output in the > corner case of a null program name. Since it’s an easy patch in the test file, +1. |
|||
| msg137088 - (view) | Author: Michael Foord (michael.foord) * (Python committer) | Date: 2011年05月27日 17:07 | |
> Interactive mode is an approved method of running Python code, along with batch mode. That is not guaranteed for any particular piece of Python code in the standard library. In particular it is not amenable to test automation, so it is certainly not a requirement that tests pass in this mode. (What is the *use case* for running a command line argument parser in interactive mode?) I'm certainly not opposed to fixing tests so that they do pass when run like this, but I disagree that it is a "bug". |
|||
| msg137094 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2011年05月27日 18:47 | |
Unless the doc for a module explicitly diclaims interactive mode (as does multiproccessing), it should run interactively as documented. Batch and interactive are not mutually exclusive; python -i runs a file in batch mode and switches to interactive mode. IDLE *always* runs files this way! Interactive exploration is a recommended way to learn Python. I agree that it would be tedious to explore the usage of argparse, for instance, by typing everything at the interactive prompt. But one could, for instance, write a file that puts fake content into sys.argv, sets up option and arg specs, and parses. After running the file in IDLE (or with python -i), one might interactively modify sys.argv or the specs and reparse to see what changes. In any case, using a module interactively and running its test interactively are different things. If a test cannot run interactively, it should be marked as 'skip if interactive' just as with all the other skip conditions. (Skip if not self.program_name might do it.) But this is all moot for this issue. |
|||
| msg137099 - (view) | Author: Michael Foord (michael.foord) * (Python committer) | Date: 2011年05月27日 22:02 | |
> it should run interactively as documented. Where is it documented that all tests will run from the IDLE prompt? I have *never* heard this claim before. I have nothing against tests supporting this, but those who want it to happen will have to do the work. |
|||
| msg137112 - (view) | Author: Ezio Melotti (ezio.melotti) * (Python committer) | Date: 2011年05月28日 09:20 | |
Terry, I think you can apply the patch you proposed in msg137085 and close this issue. If the recommended structure of test files is not documented, a section in the devguide should be added, but that's another issue. (FWIW I'm not even sure there's a recommended structure, if that's the case we should figure out one, document it, and use it in all the tests.) |
|||
| msg137141 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2011年05月28日 17:48 | |
I will when I get setup to do that again. |
|||
| msg150923 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2012年01月09日 07:16 | |
http://docs.python.org/devguide/runtests.html "If you don’t have easy access to a command line, you can run the test suite from a Python or IDLE shell: >>> from test import autotest" However, argparse is the least of the test suite problems on Windows. (#9116, #11732, other problems) |
|||
| msg150948 - (view) | Author: Éric Araujo (eric.araujo) * (Python committer) | Date: 2012年01月09日 16:26 | |
> "If you don’t have easy access to a command line, you can run the test > suite from a Python or IDLE shell: > >>> from test import autotest" I discovered that after our discussion in this report and added it to the devguide in c18fd0ee23ed. BTW I agree with Ezio that the fix you proposed should be committed. |
|||
| msg150988 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2012年01月09日 23:34 | |
New changeset b950267efd59 by Terry Jan Reedy in branch '3.2': #11906 Make test_argparse work interactively by removing extra space http://hg.python.org/cpython/rev/b950267efd59 |
|||
| msg150990 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2012年01月10日 00:20 | |
New changeset ec32e6ec16fc by Terry Jan Reedy in branch '2.7': #11906 Make test_argparse work interactively by removing extra space http://hg.python.org/cpython/rev/ec32e6ec16fc |
|||
| msg151333 - (view) | Author: Ezio Melotti (ezio.melotti) * (Python committer) | Date: 2012年01月16日 07:12 | |
This was committed on py3k in 4f8c24830a5c. Terry, can the issue be closed? |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:16 | admin | set | github: 56115 |
| 2012年01月16日 09:09:36 | terry.reedy | set | status: open -> closed |
| 2012年01月16日 07:12:52 | ezio.melotti | set | messages: + msg151333 |
| 2012年01月10日 00:22:47 | terry.reedy | set | assignee: terry.reedy resolution: fixed stage: resolved |
| 2012年01月10日 00:20:22 | python-dev | set | messages: + msg150990 |
| 2012年01月09日 23:34:30 | python-dev | set | nosy:
+ python-dev messages: + msg150988 |
| 2012年01月09日 16:26:27 | eric.araujo | set | messages: + msg150948 |
| 2012年01月09日 07:16:15 | terry.reedy | set | messages: + msg150923 |
| 2011年05月28日 17:48:56 | terry.reedy | set | messages: + msg137141 |
| 2011年05月28日 09:20:18 | ezio.melotti | set | nosy:
+ ezio.melotti messages: + msg137112 |
| 2011年05月27日 22:02:20 | michael.foord | set | messages: + msg137099 |
| 2011年05月27日 18:47:54 | terry.reedy | set | messages: + msg137094 |
| 2011年05月27日 17:07:49 | michael.foord | set | messages: + msg137088 |
| 2011年05月27日 17:04:10 | eric.araujo | set | messages: + msg137087 |
| 2011年05月27日 16:58:41 | terry.reedy | set | keywords:
+ easy messages: + msg137085 |
| 2011年05月27日 16:22:03 | michael.foord | set | messages: + msg137076 |
| 2011年05月27日 15:51:57 | eric.araujo | set | messages:
+ msg137068 title: Test_argparse failure but only in interactive mode -> test_argparse failure in interactive mode |
| 2011年04月23日 01:34:01 | terry.reedy | set | messages: + msg134291 |
| 2011年04月22日 23:51:12 | Trundle | set | nosy:
+ Trundle messages: + msg134286 |
| 2011年04月22日 23:37:48 | terry.reedy | set | nosy:
+ michael.foord messages: + msg134284 |
| 2011年04月22日 17:02:07 | eric.araujo | set | nosy:
+ eric.araujo |
| 2011年04月22日 03:26:10 | terry.reedy | create | |