Merge pull request #1202 from ZyX-I/fix-1051

Use dash hack for PyPy+IPython
This commit is contained in:
Nikolai Aleksandrovich Pavlov 2014-11-30 00:37:40 +03:00
commit 7caf14f205
3 changed files with 36 additions and 5 deletions

View File

@ -2,8 +2,6 @@
FAILED=0
if ! sh tests/test_shells/test.sh --fast ; then
echo "Failed shells"
if ${PYTHON} -c 'import platform, sys; sys.exit(1 * (platform.python_implementation() == "PyPy"))' ; then
FAILED=1
fi
FAILED=1
fi
exit $FAILED

View File

@ -6,6 +6,8 @@ import os
import socket
import sys
import codecs
import platform
import re
test_type = sys.argv[1]
@ -15,6 +17,8 @@ fname = os.path.join('tests', 'shell', '.'.join((shell, test_type, test_client,
new_fname = os.path.join('tests', 'shell', '.'.join((shell, test_type, test_client, 'log')))
pid_fname = os.path.join('tests', 'shell', '3rd', 'pid')
is_pypy = platform.python_implementation() == 'PyPy'
try:
with open(pid_fname, 'r') as P:
@ -24,6 +28,8 @@ except IOError:
hostname = socket.gethostname()
user = os.environ['USER']
IPYPY_DEANSI_RE = re.compile(r'\033(?:\[(?:\?\d+[lh]|[^a-zA-Z]+[a-ln-zA-Z])|[=>])')
with codecs.open(fname, 'r', encoding='utf-8') as R:
with codecs.open(new_fname, 'w', encoding='utf-8') as W:
found_cd = False
@ -68,4 +74,25 @@ with codecs.open(fname, 'r', encoding='utf-8') as R:
# after the next line
if line.startswith('[1] + Terminated'):
continue
elif shell == 'ipython' and is_pypy:
try:
end_idx = line.rindex('\033[0m')
try:
idx = line[:end_idx].rindex('\033[1;1H')
except ValueError:
idx = line[:end_idx].rindex('\033[?25h')
line = line[idx + len('\033[1;1H'):]
except ValueError:
pass
try:
data_end_idx = line.rindex('\033[1;1H')
line = line[:data_end_idx] + '\n'
except ValueError:
pass
if line == '\033[1;1H\n':
continue
was_empty = line == '\n'
line = IPYPY_DEANSI_RE.subn('', line)[0]
if line == '\n' and not was_empty:
line = ''
W.write(line)

View File

@ -102,7 +102,13 @@ run_test() {
while ! screen -S "$SESNAME" -p 0 -X width 300 1 ; do
sleep 0.1s
done
if test "x${SH}" = "xdash" ; then
if ( \
test "x${SH}" = "xdash" ||
( \
test "x${SH}" = "xipython" \
&& ${PYTHON} -c 'import platform, sys; sys.exit(1 - (platform.python_implementation() == "PyPy"))' \
) \
) ; then
# If I do not use this hack for dash then output will look like
#
# command1
@ -121,7 +127,7 @@ run_test() {
while screen -S "$SESNAME" -X blankerprg "" > /dev/null ; do
sleep 0.1s
done
./tests/test_shells/postproc.py ${TEST_TYPE} ${TEST_CLIENT} ${SH}
${PYTHON} ./tests/test_shells/postproc.py ${TEST_TYPE} ${TEST_CLIENT} ${SH}
rm -f tests/shell/3rd/pid
if ! check_screen_log ${TEST_TYPE} ${TEST_CLIENT} ${SH} ; then
echo '____________________________________________________________'