|
1 |
| -IMAGE ?= tweekmonster/ubuntu-vims |
2 |
| -PLUGINS = test/plugins |
3 |
| -DOCKER = docker run -a stderr --rm -v $(PWD):/testplugin -v $(PWD)/test:/home "$(IMAGE)" |
4 |
| - |
5 |
| -$(PLUGINS)/vader.vim: |
6 |
| - mkdir -p $(PLUGINS) |
7 |
| - cd $(PLUGINS) && git clone https://github.com/junegunn/vader.vim.git |
8 |
| - |
9 |
| -test-setup: $(PLUGINS)/vader.vim |
10 |
| - docker images -q $(IMAGE) || docker pull $(IMAGE) |
| 1 | +SHELL := $(shell which bash) |
| 2 | +IMAGE := vim-testbed-example |
| 3 | +PLUGINS := test/plugins |
| 4 | +# A writable home directory, required for Neovim. |
| 5 | +WRITABLE_HOME:=$(shell tmpdir=$$(mktemp -d --dry-run); \ |
| 6 | + mkdir -m 777 $${tmpdir}; \ |
| 7 | + cd $(CURDIR)/test; \ |
| 8 | + cp -a vimrc *.vader $${tmpdir}/; \ |
| 9 | + echo $${tmpdir}) |
| 10 | +DOCKER = docker run -a stderr --rm \ |
| 11 | + -v $(CURDIR):/testplugin \ |
| 12 | + -v $(WRITABLE_HOME):/home \ |
| 13 | + -v $(CURDIR)/$(PLUGINS):/home/plugins "$(IMAGE)" |
11 | 14 |
|
12 | 15 | test: test-setup
|
13 |
| - vims=$$(docker run --rm $(IMAGE) ls /vim-build/bin | grep -E '^n?vim'); \ |
| 16 | + docker build -f Dockerfile.tests -t "$(IMAGE)" . |
| 17 | + set -ex; \ |
| 18 | + vims="$$(docker run --rm $(IMAGE) ls /vim-build/bin | grep vim)"; \ |
14 | 19 | if [ -z "$$vims" ]; then echo "No Vims found!"; exit 1; fi; \
|
| 20 | + count_vims=0; \ |
15 | 21 | for vim in $$vims; do \
|
| 22 | + (( ++count_vims )); \ |
16 | 23 | $(DOCKER) $$vim '+Vader! test/*'; \
|
17 |
| - done |
18 |
| - out=$$(docker run --rm "$(IMAGE)" /vim-build/bin/argecho "arg1" "arg 2"); \ |
19 |
| - for line in "PWD=/" "Running as: root" "Arguments:" "arg1" "arg 2"; do \ |
20 |
| - if ! echo "$$out" | grep -qFx -e "$$line"; then \ |
21 |
| - echo "Line not found: $$line"; echo "$$out"; exit 1; \ |
22 |
| - fi \ |
23 |
| - done |
24 |
| - out=$$(docker run --rm "$(IMAGE)" argecho "arg1" "arg 2"); \ |
25 |
| - for line in "Running as: vimtest" "PWD=/testplugin" "Arguments:" "-u" "/home/vimrc" "-i" "NONE" "arg1" "arg 2"; do \ |
26 |
| - if ! echo "$$out" | grep -qFx -e "$$line"; then \ |
27 |
| - echo "Line not found: $$line"; echo "$$out"; exit 1; \ |
28 |
| - fi \ |
29 |
| - done |
| 24 | + done; \ |
| 25 | + expected_vims=$$(egrep -c -- '^[^#]+\s-tag' Dockerfile.tests); \ |
| 26 | + if [ "$$count_vims" != "$$expected_vims" ]; then \ |
| 27 | + echo "Expected $$expected_vims Vims, but found $$count_vims: $$vims" >&2; \ |
| 28 | + exit 1; \ |
| 29 | + fi; \ |
| 30 | + for vim in "neovim-master --headless" vim-master; do \ |
| 31 | + $(DOCKER) $${vim} -u NONE \ |
| 32 | + "+py import sys; open('/home/py2', 'w').write(str(sys.version_info[0]))" \ |
| 33 | + "+py3 import sys; open('/home/py3', 'w').write(str(sys.version_info[0]))" \ |
| 34 | + '+q'; \ |
| 35 | + if [ "$$(<$(WRITABLE_HOME)/py2)" != "2" ]; then \ |
| 36 | + echo "Failed to get Python version from $${vim} (2)." >&2; exit 1; \ |
| 37 | + fi; \ |
| 38 | + if [ "$$(<$(WRITABLE_HOME)/py3)" != "3" ]; then \ |
| 39 | + echo "Failed to get Python version from $${vim} (3)." >&2; exit 1; \ |
| 40 | + fi; \ |
| 41 | + $(RM) $(WRITABLE_HOME)/py*; \ |
| 42 | + done; \ |
| 43 | + for vim in "neovim-master --headless" vim-master; do \ |
| 44 | + $(DOCKER) $${vim} -u NONE \ |
| 45 | + "+ruby open('/home/ruby', 'w') { |f| f << 'ruby was here' }" \ |
| 46 | + '+q'; \ |
| 47 | + if [ "$$(<$(WRITABLE_HOME)/ruby)" != "ruby was here" ]; then \ |
| 48 | + echo "Failed to get output from Ruby for $${vim}." >&2; exit 1; \ |
| 49 | + fi; \ |
| 50 | + $(RM) $(WRITABLE_HOME)/ruby; \ |
| 51 | + done; \ |
| 52 | + $(DOCKER) vim-master -u NONE \ |
| 53 | + "+lua io.open('/home/lua', 'w'):write('lua was here')" \ |
| 54 | + '+q'; \ |
| 55 | + if [ "$$(<$(WRITABLE_HOME)/lua)" != "lua was here" ]; then \ |
| 56 | + echo "Failed to get output from Lua for $${vim}." >&2; exit 1; \ |
| 57 | + fi; \ |
| 58 | + neovim_tag_version=$$(docker run --rm "$(IMAGE)" neovim-v0.1.7 -u NONE --version | grep '^NVIM'); \ |
| 59 | + if [ "$$neovim_tag_version" != 'NVIM 0.1.7' ]; then \ |
| 60 | + echo "Unexpected version for Neovim tag: $$neovim_tag_version" >&2; \ |
| 61 | + exit 1; \ |
| 62 | + fi; \ |
| 63 | + neovim_master_version=$$(docker run --rm "$(IMAGE)" neovim-master -u NONE --version | grep '^NVIM'); \ |
| 64 | + if ! echo "$$neovim_master_version" | grep -Eq '^NVIM v[0-9.]+-dev-[0-9a-f]+$$'; then \ |
| 65 | + echo "Unexpected version for Neovim master: $$neovim_master_version" >&2; \ |
| 66 | + exit 1; \ |
| 67 | + fi; |
| 68 | + |
| 69 | +test-setup: Dockerfile.tests $(PLUGINS)/vader.vim |
| 70 | + docker images -q $(IMAGE) || docker pull $(IMAGE) |
| 71 | + |
| 72 | +Dockerfile.tests: Dockerfile |
| 73 | + ( echo '# Autogenerated Dockerfile for tests.'; \ |
| 74 | + echo '# Edit with care (generated from updates to Dockerfile).'; \ |
| 75 | + sed 's~testbed/vim~vim-testbed-base~' $< ) > $@ |
| 76 | + |
| 77 | +$(PLUGINS)/vader.vim: |
| 78 | + mkdir -p $(PLUGINS) |
| 79 | + cd $(PLUGINS) && git clone https://github.com/junegunn/vader.vim.git |
30 | 80 |
|
31 | 81 | .PHONY: test-setup test
|
0 commit comments