aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/testdir/Makefile72
-rwxr-xr-xsrc/nvim/testdir/runnvim.sh82
-rw-r--r--src/nvim/testdir/runnvim.vim55
3 files changed, 161 insertions, 48 deletions
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index 418463a0ad..a31e1843fc 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -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
diff --git a/src/nvim/testdir/runnvim.sh b/src/nvim/testdir/runnvim.sh
new file mode 100755
index 0000000000..43556f3ad3
--- /dev/null
+++ b/src/nvim/testdir/runnvim.sh
@@ -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 "$@"
diff --git a/src/nvim/testdir/runnvim.vim b/src/nvim/testdir/runnvim.vim
new file mode 100644
index 0000000000..396a3a6477
--- /dev/null
+++ b/src/nvim/testdir/runnvim.vim
@@ -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()