New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
test_syntax_error fails when run in the installed location #61956
Comments
no idea yet about that one ... ====================================================================== Traceback (most recent call last):
File "/usr/lib/python3.3/test/test_code_module.py", line 57, in test_syntax_error
raise AssertionError("No syntax error from console")
AssertionError: No syntax error from console |
Can't reproduce with current 3.3 tip. |
seen this again in our autopkg tester however now I can't reproduce this locally, and the test succeeds during the build. |
I can reproduce this here. In that test, I added the following: with open('/tmp/debug', 'w') as f:
for call in self.stderr.method_calls:
f.write('call: %s\n' % str(call)) This gives: call: call.write('Python <MagicMock name=\'sys.version\' id=\'140431558254320\'> on <MagicMock name=\'sys.platform\' id=\'140431558262512\'>\nType "help", "copyright", "credits" or "license" for more information.\n(InteractiveConsole)\n')
call: call.write('Traceback (most recent call last):\n')
call: call.write(' File "/usr/lib/python3.4/code.py", line 90, in runcode\n')
call: call.write(' ')
call: call.write('exec(code, self.locals)')
call: call.write('\n')
call: call.write(' File "<console>", line 1, in <module>\n')
call: call.write('NameError')
call: call.write(': ')
call: call.write("name 'undefined' is not defined")
call: call.write('\n')
call: call.write('\n')
=========== 8< ============ Observe that the test checks if 'NameError:' in ''.join(call[1]): but the "NameError" and the ":" are in two different call lines. I don't know how self.stderr.method_calls is built, but this sounds like a race condition/timing or a stdin/out buffering issue? I. e. the original print that produces the "NameError:" certainly does that in two steps; perhaps the testsuite thing that repeatedly read()s on stderr catches these two as separate write()s then? |
adding unittest developers |
It looks like the simplest fix would be to change "NameError:" to "NameError", as the problem is that they're (sometimes!?) on separate lines. This still tests what we want to test. |
sure, doing this. my follow-up question was if it is necessary to fix anything else in unittest. |
New changeset 20db5e9086d4 by doko in branch '3.4':
New changeset 8885fc2e92b3 by doko in branch 'default': |
not yet closing, to see if there are some stream buffering issues in mock |
In the absence of any further issue in over a year, can this be closed? |
I'm going to close this since the reported issue has been fixed. In the test sys.stderr was mocked, and Mock.method_calls simply records the calls done to the mock. Therefore the fact that 'NameError' and ':' were written on sys.stderr on two separate calls to write() is not a problem with mocks. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: