mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #8147 'Run old tests in :terminal'
This commit is contained in:
commit
535bf89597
@ -7,7 +7,7 @@ ifeq ($(OS),Windows_NT)
|
||||
else
|
||||
NVIM_PRG ?= ../../../build/bin/nvim
|
||||
endif
|
||||
SCRIPTSOURCE := ../../../runtime
|
||||
ROOT := ../../..
|
||||
|
||||
export SHELL := sh
|
||||
export NVIM_PRG := $(NVIM_PRG)
|
||||
@ -134,7 +134,7 @@ ifdef USE_VALGRIND
|
||||
$(VALGRIND_TOOL) \
|
||||
--suppressions=../../.valgrind.supp \
|
||||
--error-exitcode=123 \
|
||||
--log-file=valgrind.\%p.$* \
|
||||
--log-file=valgrind-\%p.$* \
|
||||
$(VGDB) \
|
||||
--trace-children=yes
|
||||
else
|
||||
@ -152,7 +152,8 @@ nongui: nolog $(SCRIPTS) newtests report
|
||||
gui: nolog $(SCRIPTS) $(SCRIPTS_GUI) newtests report
|
||||
|
||||
.gdbinit:
|
||||
echo 'set $$_exitcode = -1\nrun\nif $$_exitcode != -1\n quit\nend' > .gdbinit
|
||||
@echo "[OLDTEST-PREP] Setting up .gdbinit"
|
||||
@echo 'set $$_exitcode = -1\nrun\nif $$_exitcode != -1\n quit\nend' > .gdbinit
|
||||
|
||||
report:
|
||||
@echo
|
||||
@ -171,7 +172,7 @@ $(SCRIPTS) $(SCRIPTS_GUI): $(NVIM_PRG) test1.out
|
||||
|
||||
RM_ON_RUN := test.out X* viminfo
|
||||
RM_ON_START := test.ok
|
||||
RUN_VIM := VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(TOOL) $(NVIM_PRG) -u unix.vim -U NONE -i viminfo --headless --noplugin -s dotest.in
|
||||
RUN_VIM := $(TOOL) $(NVIM_PRG) -u unix.vim -U NONE -i viminfo --headless --noplugin -s dotest.in
|
||||
|
||||
clean:
|
||||
-rm -rf *.out \
|
||||
@ -179,6 +180,7 @@ clean:
|
||||
*.res \
|
||||
*.rej \
|
||||
*.orig \
|
||||
*.tlog \
|
||||
test.log \
|
||||
messages \
|
||||
$(RM_ON_RUN) \
|
||||
@ -191,59 +193,32 @@ clean:
|
||||
del
|
||||
|
||||
test1.out: .gdbinit test1.in
|
||||
-rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START) wrongtermsize
|
||||
mkdir -p $(TMPDIR)
|
||||
$(RUN_VIM) $*.in
|
||||
@/bin/sh -c "if test -e wrongtermsize; then \
|
||||
echo; \
|
||||
echo test1 FAILED - terminal size must be 80x24 or larger; \
|
||||
echo; exit 1; \
|
||||
elif diff test.out $*.ok; then \
|
||||
mv -f test.out $*.out; \
|
||||
else \
|
||||
echo; \
|
||||
echo test1 FAILED - Something basic is wrong; \
|
||||
echo; \
|
||||
exit 1; \
|
||||
fi"
|
||||
-rm -rf X* viminfo
|
||||
@echo "[OLDTEST-PREP] Running test1"
|
||||
@rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START) wrongtermsize
|
||||
@mkdir -p $(TMPDIR)
|
||||
@/bin/sh runnvim.sh $(ROOT) $(NVIM_PRG) $* $(RUN_VIM) $*.in
|
||||
@rm -f wrongtermsize
|
||||
@rm -rf X* viminfo
|
||||
|
||||
%.out: %.in .gdbinit
|
||||
-rm -rf $*.failed test.ok $(RM_ON_RUN)
|
||||
mkdir -p $(TMPDIR)
|
||||
cp $*.ok test.ok
|
||||
# Sleep a moment to avoid that the xterm title is messed up.
|
||||
# 200 msec is sufficient, but only modern sleep supports a fraction of
|
||||
# a second, fall back to a second if it fails.
|
||||
@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
|
||||
$(RUN_VIM) $*.in
|
||||
|
||||
# Check if the test.out file matches test.ok.
|
||||
@/bin/sh -c "if test -f test.out; then \
|
||||
if diff -u test.out $*.ok; then \
|
||||
mv -f test.out $*.out; \
|
||||
else \
|
||||
echo $* FAILED >> test.log; \
|
||||
mv -f test.out $*.failed; \
|
||||
fi; \
|
||||
else \
|
||||
echo $* NO OUTPUT >>test.log; \
|
||||
fi"
|
||||
@/bin/sh -c "if test -f valgrind; then \
|
||||
mv -f valgrind valgrind.$*; \
|
||||
fi"
|
||||
-rm -rf X* test.ok viminfo
|
||||
@echo "[OLDESTTEST] Running" $*
|
||||
@rm -rf $*.failed test.ok $(RM_ON_RUN)
|
||||
@mkdir -p $(TMPDIR)
|
||||
@cp $*.ok test.ok
|
||||
@/bin/sh runnvim.sh --oldesttest $(ROOT) $(NVIM_PRG) $* $(RUN_VIM) $*.in
|
||||
@rm -rf X* test.ok viminfo
|
||||
|
||||
test49.out: test49.vim
|
||||
|
||||
nolog:
|
||||
-rm -f test.log messages
|
||||
@echo "[OLDTEST-PREP] Removing test.log and messages"
|
||||
@rm -f test.log messages
|
||||
|
||||
|
||||
# New style of tests uses Vim script with assert calls. These are easier
|
||||
# to write and a lot easier to read and debug.
|
||||
# Limitation: Only works with the +eval feature.
|
||||
RUN_VIMTEST = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(TOOL) $(NVIM_PRG) -u unix.vim -U NONE --headless --noplugin
|
||||
RUN_VIMTEST = $(TOOL) $(NVIM_PRG) -u unix.vim -U NONE --headless --noplugin
|
||||
|
||||
newtests: newtestssilent
|
||||
@/bin/sh -c "if test -f messages && grep -q 'FAILED' messages; then \
|
||||
@ -253,5 +228,6 @@ newtests: newtestssilent
|
||||
newtestssilent: $(NEW_TESTS)
|
||||
|
||||
%.res: %.vim .gdbinit
|
||||
mkdir -p $(TMPDIR)
|
||||
$(RUN_VIMTEST) -u NONE -S runtest.vim $*.vim
|
||||
@echo "[OLDTEST] Running" $*
|
||||
@mkdir -p $(TMPDIR)
|
||||
@/bin/sh runnvim.sh $(ROOT) $(NVIM_PRG) $* $(RUN_VIMTEST) -u NONE -S runtest.vim $*.vim
|
||||
|
82
src/nvim/testdir/runnvim.sh
Executable file
82
src/nvim/testdir/runnvim.sh
Executable file
@ -0,0 +1,82 @@
|
||||
#!/bin/sh
|
||||
|
||||
main() {(
|
||||
local separator="================================================================================"
|
||||
local oldesttest=
|
||||
if test "$1" = "--oldesttest" ; then
|
||||
shift
|
||||
oldesttest=1
|
||||
fi
|
||||
local root="$1" ; shift
|
||||
local nvim_prg="$1" ; shift
|
||||
local test_name="$1" ; shift
|
||||
|
||||
local tlog="$test_name.tlog"
|
||||
|
||||
export NVIM_TEST_ARGC=$#
|
||||
local arg
|
||||
local i=0
|
||||
for arg ; do
|
||||
eval "export NVIM_TEST_ARG$i=\"\$arg\""
|
||||
i=$(( i+1 ))
|
||||
done
|
||||
|
||||
export CI_DIR="$root/ci"
|
||||
export BUILD_DIR="$(dirname "$nvim_prg")/.."
|
||||
export FAILED=0
|
||||
|
||||
. "$CI_DIR/common/suite.sh"
|
||||
. "$CI_DIR/common/test.sh"
|
||||
|
||||
export VIMRUNTIME="$root/runtime"
|
||||
if ! "$nvim_prg" \
|
||||
-u NONE -i NONE \
|
||||
--headless \
|
||||
--cmd 'set shortmess+=I noswapfile noundofile nomore' \
|
||||
-S runnvim.vim \
|
||||
"$tlog" > "out-$tlog" 2> "err-$tlog"
|
||||
then
|
||||
fail "$test_name" F "Nvim exited with non-zero code"
|
||||
fi
|
||||
echo "Stdout of :terminal runner" >> "$tlog"
|
||||
echo "$separator" >> "$tlog"
|
||||
cat "out-$tlog" >> "$tlog"
|
||||
echo "$separator" >> "$tlog"
|
||||
echo "Stderr of :terminal runner" >> "$tlog"
|
||||
echo "$separator" >> "$tlog"
|
||||
cat "err-$tlog" >> "$tlog"
|
||||
echo "$separator" >> "$tlog"
|
||||
if test "$oldesttest" = 1 ; then
|
||||
if ! diff -q test.out "$test_name.ok" > /dev/null 2>&1 ; then
|
||||
if test -f test.out ; then
|
||||
fail "$test_name" F "Oldest test .out file differs from .ok file"
|
||||
echo "Diff between test.out and $test_name.ok" >> "$tlog"
|
||||
echo "$separator" >> "$tlog"
|
||||
diff -a test.out "$test_name.ok" >> "$tlog"
|
||||
echo "$separator" >> "$tlog"
|
||||
else
|
||||
echo "No output in test.out" >> "$tlog"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "$FAILED" = 1 ; then
|
||||
travis_fold start "$NVIM_TEST_CURRENT_SUITE/$test_name"
|
||||
fi
|
||||
valgrind_check .
|
||||
if test -n "$LOG_DIR" ; then
|
||||
asan_check "$LOG_DIR"
|
||||
fi
|
||||
check_core_dumps
|
||||
if test "$FAILED" = 1 ; then
|
||||
cat "$tlog"
|
||||
fi
|
||||
rm -f "$tlog"
|
||||
if test "$FAILED" = 1 ; then
|
||||
travis_fold end "$NVIM_TEST_CURRENT_SUITE/$test_name"
|
||||
fi
|
||||
if test "$FAILED" = 1 ; then
|
||||
echo "Test $test_name failed, see output above and summary for more details" >> test.log
|
||||
fi
|
||||
)}
|
||||
|
||||
main "$@"
|
55
src/nvim/testdir/runnvim.vim
Normal file
55
src/nvim/testdir/runnvim.vim
Normal file
@ -0,0 +1,55 @@
|
||||
let s:logger = {'d_events': []}
|
||||
function s:logger.on_stdout(id, data, event)
|
||||
call add(self.d_events, [a:event, a:data])
|
||||
endfunction
|
||||
let s:logger.on_stderr = s:logger.on_stdout
|
||||
function s:logger.on_exit(id, data, event)
|
||||
call add(self.d_events, [a:event, ['']])
|
||||
endfunction
|
||||
|
||||
function Main()
|
||||
let argc = +$NVIM_TEST_ARGC
|
||||
let args = []
|
||||
for i in range(argc)
|
||||
call add(args, eval("$NVIM_TEST_ARG" . i))
|
||||
endfor
|
||||
set lines=25
|
||||
set columns=80
|
||||
enew
|
||||
let job = termopen(args, s:logger)
|
||||
let results = jobwait([job], 5 * 60 * 1000)
|
||||
" TODO(ZyX-I): Get colors
|
||||
let screen = getline(1, '$')
|
||||
bwipeout!
|
||||
let stringified_events = map(s:logger.d_events,
|
||||
\'v:val[0] . ": " . ' .
|
||||
\'join(map(v:val[1], '.
|
||||
\ '''substitute(v:val, '.
|
||||
\ '"\\v\\C(\\p@!.|\\<)", '.
|
||||
\ '"\\=printf(\"<%x>\", '.
|
||||
\ 'char2nr(submatch(0)))", '.
|
||||
\ '"")''), '.
|
||||
\ '''\n'')')
|
||||
call setline(1, [
|
||||
\ 'Job exited with code ' . results[0],
|
||||
\ printf('Screen (%u lines)', len(screen)),
|
||||
\ repeat('=', 80),
|
||||
\] + screen + [
|
||||
\ repeat('=', 80),
|
||||
\ printf('Events (%u lines):', len(stringified_events)),
|
||||
\ repeat('=', 80),
|
||||
\] + stringified_events + [
|
||||
\ repeat('=', 80),
|
||||
\])
|
||||
write
|
||||
if results[0] != 0
|
||||
if results[0] != -1
|
||||
call jobstop(job)
|
||||
endif
|
||||
cquit
|
||||
else
|
||||
qall
|
||||
endif
|
||||
endfunction
|
||||
|
||||
call Main()
|
Loading…
Reference in New Issue
Block a user