neovim/src/nvim/testdir/Makefile

186 lines
5.1 KiB
Makefile
Raw Normal View History

# vim: noet ts=8
# Makefile to run all tests for Vim
#
2017-12-08 08:42:30 -07:00
ifeq ($(OS),Windows_NT)
NVIM_PRG ?= ../../../build/bin/nvim.exe
else
NVIM_PRG ?= ../../../build/bin/nvim
endif
ROOT := ../../..
export SHELL := sh
export NVIM_PRG := $(NVIM_PRG)
export TMPDIR := $(abspath Xtest-tmpdir)
2017-12-08 08:42:30 -07:00
SCRIPTS_DEFAULT = \
test42.out \
2017-12-08 08:42:30 -07:00
ifneq ($(OS),Windows_NT)
SCRIPTS_DEFAULTS := $(SCRIPTS_DEFAULT) \
test49.out \
2017-12-08 08:42:30 -07:00
endif
ifeq ($(OS),Windows_NT)
FIXFF = fixff
else
FIXFF =
endif
2017-12-08 08:42:30 -07:00
SCRIPTS ?= $(SCRIPTS_DEFAULT)
# Tests using runtest.vim.
NEW_TESTS_ALOT := test_alot_utf8 test_alot
NEW_TESTS_IN_ALOT := $(shell sed -n '/^source/ s/^source //; s/\.vim$$//p' $(addsuffix .vim,$(NEW_TESTS_ALOT)))
NEW_TESTS_IN_ALOT_LATIN := $(shell sed -n '/^source/ s/^source //; s/\.vim$$//p' test_alot_latin.vim)
# Ignored tests.
# test_alot_latin: Nvim does not allow setting encoding.
# test_largefile: uses too much resources to run on CI.
NEW_TESTS_IGNORE := \
test_alot_latin $(NEW_TESTS_IN_ALOT_LATIN) \
test_largefile \
NEW_TESTS := $(sort $(basename $(notdir $(wildcard test_*.vim))))
NEW_TESTS_RES := $(addsuffix .res,$(filter-out $(NEW_TESTS_ALOT) $(NEW_TESTS_IN_ALOT) $(NEW_TESTS_IGNORE),$(NEW_TESTS)) $(NEW_TESTS_ALOT))
ifdef VALGRIND_GDB
2014-04-25 01:11:26 -07:00
VGDB := --vgdb=yes \
--vgdb-error=0
endif
ifdef USE_VALGRIND
2014-04-25 01:11:26 -07:00
VALGRIND_TOOL := --tool=memcheck \
--leak-check=yes \
--track-origins=yes
# VALGRIND_TOOL := exp-sgcheck
TOOL := valgrind -q \
-q \
$(VALGRIND_TOOL) \
2016-06-03 11:15:36 -07:00
--suppressions=../../.valgrind.supp \
--error-exitcode=123 \
--log-file=valgrind-\%p.$* \
$(VGDB) \
--trace-children=yes
else
2014-04-25 01:11:26 -07:00
ifdef USE_GDB
TOOL = gdb --args
endif
endif
ifdef TESTNUM
2014-04-25 01:11:26 -07:00
SCRIPTS := test$(TESTNUM).out
endif
nongui: nolog $(FIXFF) $(SCRIPTS) newtests report
.gdbinit:
@echo "[OLDTEST-PREP] Setting up .gdbinit"
@echo 'set $$_exitcode = -1\nrun\nif $$_exitcode != -1\n quit\nend' > .gdbinit
report:
$(NVIM_PRG) -u NONE $(NO_INITS) -S summarize.vim messages
@echo
@echo 'Test results:'
@cat test_result.log
@/bin/sh -c "if test -f test.log; \
then echo TEST FAILURE; exit 1; \
else echo ALL DONE; \
fi"
test1.out: $(NVIM_PRG)
$(SCRIPTS): $(NVIM_PRG) test1.out
NO_PLUGINS = --noplugin --headless
# In vim, if the -u command line option is specified, compatible is turned on
# and viminfo is not read. Unlike vim, neovim reads viminfo and requires the
# -i command line option.
NO_INITS = -U NONE -i NONE $(NO_PLUGINS)
# TODO: find a way to avoid changing the distributed files.
fixff:
-$(NVIM_PRG) $(NO_INITS) -u unix.vim "+argdo set ff=dos|upd" +q \
*.in *.ok
-$(NVIM_PRG) $(NO_INITS) -u unix.vim "+argdo set ff=dos|upd" +q \
dotest.in
# Execute an individual new style test, e.g.:
# make test_largefile
$(NEW_TESTS):
rm -f $@.res test.log messages
@MAKEFLAGS=--no-print-directory $(MAKE) -f Makefile $@.res
@cat messages
@if test -f test.log; then \
exit 1; \
fi
2014-04-25 01:11:26 -07:00
RM_ON_RUN := test.out X* viminfo
RM_ON_START := test.ok
RUN_VIM := $(TOOL) $(NVIM_PRG) -u unix.vim -U NONE -i viminfo --headless --noplugin -s dotest.in
# Delete files that may interfere with running tests. This includes some files
# that may result from working on the tests, not only from running them.
CLEAN_FILES := *.out \
*.failed \
*.res \
*.rej \
*.orig \
*.tlog \
test.log \
test_result.log \
messages \
$(RM_ON_RUN) \
$(RM_ON_START) \
valgrind.* \
.*.swp \
.*.swo \
.gdbinit \
$(TMPDIR) \
del
clean:
$(RM) -rf $(CLEAN_FILES)
test1.out: .gdbinit test1.in
@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
@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
# Explicit dependencies.
test49.out: test49.vim
nolog:
@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 = $(TOOL) $(NVIM_PRG) -u unix.vim
newtests: newtestssilent
@/bin/sh -c "if test -f messages && grep -q 'FAILED' messages; then \
cat messages && cat test.log; \
fi"
newtestssilent: $(NEW_TESTS_RES)
%.res: %.vim .gdbinit
@echo "[OLDTEST] Running" $*
@rm -rf $*.failed test.ok $(RM_ON_RUN)
@mkdir -p $(TMPDIR)
@/bin/sh runnvim.sh $(ROOT) $(NVIM_PRG) $* $(RUN_VIMTEST) $(NO_INITS) -u NONE -S runtest.vim $*.vim