aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-11-16 22:22:49 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-11-16 23:36:45 +0100
commit3ccc7effa376ea2b9206c272f3087c882f347c9b (patch)
treee4a17c05abfee035dc2a1fed1c47a0c8b229a9fd
parent1288db6bdeb0d5f9b24b208603e16871ff59cffc (diff)
downloadvis-3ccc7effa376ea2b9206c272f3087c882f347c9b.tar.gz
vis-3ccc7effa376ea2b9206c272f3087c882f347c9b.tar.xz
test/vis: convert vis specific tests to use the Lua API
Instead of using the keys utility to convert the textual key representation into something a terminal would send and then pipe it to vis' standard input use the Lua API to directly feed the keys into vis' input queue. This has a number of advantages: - it is less fragile: the keys utility is incomplete and only handles the most common keys - it is faster because there is no need to artificially delay input after an <Escape> key to give vis a chance to distinguish between a single <Escape> and the start of an escape sequence
-rw-r--r--vis/Makefile5
-rwxr-xr-xvis/test.sh42
-rw-r--r--vis/visrc.lua17
3 files changed, 42 insertions, 22 deletions
diff --git a/vis/Makefile b/vis/Makefile
index 36a4ce7..be58c44 100644
--- a/vis/Makefile
+++ b/vis/Makefile
@@ -1,13 +1,10 @@
-test: ../../vis ../util/keys
+test: ../../vis clean
@./test.sh
../../vis: ../../*.[ch]
@echo Compiling vis
@$(MAKE) -C ../..
-../util/keys: ../util/keys.c
- @$(MAKE) -C ../util
-
clean:
@echo cleaning
@find . -name '*.out' -o -name '*.err' | xargs rm -f
diff --git a/vis/test.sh b/vis/test.sh
index a52fe0f..775890c 100755
--- a/vis/test.sh
+++ b/vis/test.sh
@@ -1,31 +1,37 @@
#!/bin/sh
[ -z "$VIS" ] && VIS="../../vis"
+$VIS -v
-TESTS=$1
-[ -z "$TESTS" ] && TESTS=$(find . -name '*.keys' | sed 's/\.keys$//g')
-
-TESTS_RUN=0
TESTS_OK=0
+TESTS_RUN=0
-$VIS -v
+if [ $# -gt 0 ]; then
+ test_files=$*
+else
+ printf ':help\n:/ Lua paths/,$ w help\n:qall\n' | $VIS 2> /dev/null && cat help && rm -f help
+ test_files="$(find . -type f -name '*.in')"
+fi
+
+export VIS_PATH=.
+
+for t in $test_files; do
+ TESTS_RUN=$((TESTS_RUN + 1))
+ t=${t%.in}
+ t=${t#./}
+ $VIS "$t".in < /dev/null 2> /dev/null
-for t in $TESTS; do
- ERR="$t.err"
- OUT="$t.out"
- REF="$t.ref"
- printf "Running test %s ... " "$t"
- rm -f "$OUT" "$ERR"
- { cat "$t.keys"; printf "<Escape>:wq! $OUT<Enter>"; } | cpp -P | ../util/keys | $VIS "$t.in" 2> /dev/null
- if [ -e "$OUT" ]; then
- if cmp -s "$REF" "$OUT"; then
- printf "OK\n"
- TESTS_OK=$((TESTS_OK+1))
+ printf "%-50s" "$t"
+ if [ -e "$t".out ]; then
+ if cmp -s "$t".ref "$t".out 2> /dev/null; then
+ printf "PASS\n"
+ TESTS_OK=$((TESTS_OK + 1))
else
printf "FAIL\n"
- diff -u "$REF" "$OUT" > "$ERR"
+ diff -u "$t".ref "$t".out > "$t".err
fi
- TESTS_RUN=$((TESTS_RUN+1))
+ else
+ printf "ERROR\n"
fi
done
diff --git a/vis/visrc.lua b/vis/visrc.lua
new file mode 100644
index 0000000..909aa00
--- /dev/null
+++ b/vis/visrc.lua
@@ -0,0 +1,17 @@
+vis.events = {}
+vis.events.win_open = function(win)
+ -- test.in file passed to vis
+ local name = win.file.name
+ if name then
+ -- use the corresponding test.lua file
+ name = string.gsub(name, '%.in$', '')
+ local file = assert(io.popen(string.format("cpp -P '%s.keys'", name), 'r'))
+ local keys = file:read('*all')
+ keys = string.gsub(keys, '<Space>', ' ')
+ keys = string.gsub(keys, '\n', '')
+ file:close()
+ vis:feedkeys(keys..'<Escape>')
+ vis:command(string.format("w! '%s.out'", name))
+ end
+ vis:command('q!')
+end