Issue2082
Created on 2013-09-05.06:39:54 by jeff.allen, last changed 2013-09-16.23:21:05 by jeff.allen.
| Messages | |||
|---|---|---|---|
| msg8099 (view) | Author: Jeff Allen (jeff.allen) | Date: 2013-09-05.06:39:53 | |
Certain regression tests hang unexpectedly, producing a (Pdb) prompt. The test will continue if you enter an end-of-file (^Z on Windows) which to some tests is a failure.
I noticed this while working on the restructured Jython console, and for a while thought I had induced it, but it is present in the baseline, back to at least tag 2.7b1 and after a clean build. (Regression tests have never run smoothly for me on Windows.)
Affected Python tests are:
test.test_doctest
test.test_pdb
These show up in "ant regrtest". Unsticking the test with ctrl-Z\n is counted as a test failure. It seems that the test function compares the
responses to a "script" of pdb interactions at a pretended console. The only divergence I can see is an extra blank line at the end.
The only affected Java test is:
org.python.jsr223.ScriptEngineTest
This does not show up in "ant javatest", but only when run as:
>java -cp dist/*;dist/javalib/* org.junit.runner.JUnitCore org.python.jsr223.ScriptEngineTest
And running this with the input piped from NUL (the always-empty stream in Windows) causes it to run to completion, although the (Pdb) prompt still appears.
In the Python tests, typical behaviour is:
>dist\bin\jython -m test.test_doctest
doctest (doctest) ... 66 tests with zero failures
(Pdb) <--- ctrl-Z + return entered here
**********************************************************************
File "C:\hg\jython-int\dist\Lib\test\test_doctest.py", line 1758, in test.test_doctest.test_debug
Failed example:
try: doctest.debug_src(s)
finally: sys.stdin = real_stdin
Expected:
> <string>(1)<module>()
(Pdb) next
12
--Return--
> <string>(1)<module>()->None
(Pdb) print x
12
(Pdb) continue
Got:
> <string>(1)<module>()
<BLANKLINE>
(Pdb)
Switching to the plain InteractiveConsole causes the Python tests to run smoothly, but does not affect matters in the Java test.
|
|||
| msg8111 (view) | Author: Jeff Allen (jeff.allen) | Date: 2013-09-09.22:11:11 | |
Ok, I have to own up to this one. The mechanism of the problem is that these tests replace sys.stdin and sys.stdout, and then call raw_input('(Pdb)') which is supposed to use the replacement streams.
In the present implementation, raw_input(prompt) is handled by the console class directly, so replacing sys.stdin/stdout does not intercept it. This direct delegation happens even with the PlainConsole. I did this so that the console library (JLine or Readline) could be aware of the prompt, which it needs to be in order to position the cursor correctly - one of the things this design fixed.
Prior to my change, the JLineConsole would replace raw_input() with a method it implemented directly, and this is why test_pdb and test_doctest fail the same way in versions before my change. (But they don't fail when the console is InteractiveConsole.) This hijacking was incorrect, and now I've generalised it.
Replacing sys.stdin/stdout is not uncommon in Python, so it should work in Jython as it does in CPython. I'll see what I can do to restore that for all consoles, achieving correct line editing some other way.
|
|||
| msg8116 (view) | Author: Jeff Allen (jeff.allen) | Date: 2013-09-14.22:51:52 | |
I've fixed this now (and pushed the change set) for test_pdb and test_doctest. I still get the prompt with ScriptEngineTest when run individually under java, but not run as a batch. I'll leave open while I investigate. |
|||
| msg8119 (view) | Author: Jeff Allen (jeff.allen) | Date: 2013-09-16.23:21:05 | |
No, that's ok. The (Pdb) prompt is what that script is supposed to do. We just don't see it inside the junit ant target. Compare: Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from pdb import set_trace >>> set_trace() --Return-- > <stdin>(1)<module>()->None (Pdb) Now able to close with a clear conscience. Actual test failures fixed in: http://hg.python.org/jython/rev/80927ba94032 |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2013-09-16 23:21:05 | jeff.allen | set | status: open -> closed resolution: fixed messages: + msg8119 |
| 2013-09-14 22:51:53 | jeff.allen | set | messages: + msg8116 |
| 2013-09-09 22:11:11 | jeff.allen | set | assignee: jeff.allen messages: + msg8111 |
| 2013-09-05 06:39:54 | jeff.allen | create | |
Supported by Python Software Foundation,
Powered by Roundup