Merge pull request #160 from andymass/newtest

New test framework
This commit is contained in:
Andy Massimino
2021-06-15 21:00:08 -04:00
committed by GitHub
32 changed files with 259 additions and 0 deletions

View File

@@ -40,3 +40,7 @@ jobs:
- name: 'Run test'
run: |
bash -c 'VIMCMD=nvim test/vader/run'
- name: 'Run new tests'
run: |
cd ./test/new && make -j1 && make -j1 coverage

View File

@@ -36,3 +36,9 @@ jobs:
- name: 'Run test'
run: |
bash ./test/vader/run
- name: 'Run new tests'
env:
MYVIM: vim -T dumb --not-a-term -n
run: |
cd ./test/new && make -j1 && make -j1 coverage

52
autoload/matchup/test.vim Normal file
View File

@@ -0,0 +1,52 @@
" vim match-up - even better matching
"
" Maintainer: Andy Massimino
" Email: a@normed.space
"
function! matchup#test#assert(condition) abort " {{{1
if a:condition | return 1 | endif
call s:fail()
endfunction
" }}}1
function! matchup#test#assert_equal(expect, observe) abort " {{{1
if a:expect ==# a:observe | return 1 | endif
call s:fail([
\ 'expect: ' . string(a:expect),
\ 'observe: ' . string(a:observe),
\])
endfunction
" }}}1
function! matchup#test#assert_match(x, regex) abort " {{{1
if a:x =~# a:regex | return 1 | endif
call s:fail([
\ 'x = ' . string(a:x),
\ 'regex = ' . a:regex,
\])
endfunction
" }}}1
function! s:fail(...) abort " {{{1
echo 'Assertion failed!'
if a:0 > 0 && !empty(a:1)
if type(a:1) == v:t_string
echo a:1
else
for line in a:1
echo line
endfor
endif
endif
echon "\n"
cquit
endfunction
" }}}1

3
test/new/.coveragerc Normal file
View File

@@ -0,0 +1,3 @@
[run]
plugins = covimerage
data_file = .coverage_covimerage

33
test/new/Makefile Normal file
View File

@@ -0,0 +1,33 @@
MYVIM ?= nvim --headless
MAKEFLAGS+=--no-print-directory
TESTS := $(wildcard test-*)
.PHONY: test $(TESTS)
test: $(TESTS)
sysinfo:
@echo "**** SYSTEM INFORMATION ****"
@-git log -1
@-$(MYVIM) --version
@echo "**** SYSTEM INFORMATION ****"
$(TESTS):
$(MAKE) -C $@
coverage: htmlcov/index.html
htmlcov/index.html: env /tmp/vim-profile.txt
. env/bin/activate
covimerage write_coverage /tmp/vim-profile.txt --source ../../autoload --source ../../plugin
coverage report -m
coverage html
env: env/pyvenv.cfg
env/pyvenv.cfg:
python3 -m venv env
. env/bin/activate;
pip install setuptools wheel
pip install "click<8.0.0" covimerage

View File

@@ -0,0 +1,16 @@
set packpath-=~/.vim packpath-=~/.vim/after
set packpath-=~/.config/nvim packpath-=~/.config/nvim/after
let &rtp = '../../..,' . &rtp
let &rtp = &rtp . ',../../../after'
profile start /tmp/vim-profile.txt
profile! file */matchup/*.vim
filetype plugin indent on
syntax enable
let g:matchup_override_vimtex = 1
runtime! plugin/matchup.vim
nnoremap q :qall!<cr>

View File

@@ -0,0 +1,9 @@
.PHONY: test
MYVIM ?= nvim --headless
INMAKE := 1
export INMAKE
test:
@$(MYVIM) -u test.vim

View File

@@ -0,0 +1,12 @@
\[
\begin{gathered}
First equation \\
Second equation \\[1ex]
Third and last equation
\end{gathered}
\]
\begin{a}
\begin{b}
\end{c}
\end{d}

View File

@@ -0,0 +1,21 @@
set nocompatible
source ../common/bootstrap.vim
let g:tex_flavor = "latex"
silent edit test.tex
call matchup#perf#timeout_start(0)
normal! 7G
let s:current = matchup#delim#get_current('all', 'both')
let s:corresponding = matchup#delim#get_matching(s:current)
call matchup#test#assert_equal(1, s:corresponding[0].lnum)
normal! 9G
let s:current = matchup#delim#get_current('all', 'both')
let s:corresponding = matchup#delim#get_matching(s:current)
call matchup#test#assert_equal(9, s:current.lnum)
call matchup#test#assert_equal(1, len(s:corresponding))
quit!

View File

@@ -0,0 +1,9 @@
.PHONY: test
MYVIM ?= nvim --headless
INMAKE := 1
export INMAKE
test:
@$(MYVIM) -u test.vim

View File

@@ -0,0 +1,3 @@
foobar
barfoo
endfoobar

View File

@@ -0,0 +1,91 @@
set nocompatible
source ../common/bootstrap.vim
autocmd BufNewFile,BufRead *.ext let b:match_words = '\<\(\(foo\)\(bar\)\):\3\2:end\1'|set mps=
" setlocal filetype=matchuptest
silent edit example.ext
" result of successively replacing (in reverse) capture groups in the open
" pattern, '\(\(foo\)\(bar\)\)', with their corresponding backrefs
call matchup#test#assert_equal({
\ '0': '\<\(\(foo\)\(bar\)\)',
\ '1': '\<\1',
\ '2': '\<\(\2\3\)',
\ '3': '\<\(\(foo\)\3\)'
\},
\ b:matchup_delim_lists.delim_tex.regex[0].augments)
let s:cap = b:matchup_delim_lists.delim_tex.regex_capture[0]
" for match_words \3\2, we get the following capture pattern
call matchup#test#assert_equal('\(bar\)\(foo\)', s:cap.mid_list[0])
" for example, from text 'barfoo', we build string \(foobar\) by mapping
" group 1 (bar) -> group 3
" group 2 (foo) -> group 2
" finally, str group 1 -> open group 1
"
call matchup#test#assert_equal([{
\ 'str': '\<\(\2\3\)',
\ 'inputmap': {'1': '3', '2': '2'},
\ 'outputmap': {'1': '1'}
\}],
\ s:cap.aug_comp[1])
" for match_words end\1 we get the following capture pattern
call matchup#test#assert_equal('end\(\(foo\)\(bar\)\)', s:cap.close)
" for example, from text 'endfoobar', we build two possible strings
" 1. \1 where
" group 1 (foobar) -> group 1
" group 2 (foo) -> group 2 (actually ignored)
" group 3 (bar) -> group 3 (actually ignored)
" 2. \(\2\3\) where
" group 2 (foo) -> group 2
" group 3 (bar) -> group 3
" and str group 1 -> open group 1
"
call matchup#test#assert_equal([{
\ 'str': '\<\1',
\ 'inputmap': {'1': '1', '2': '2', '3': '3'},
\ 'outputmap': {}
\},{
\ 'str': '\<\(\2\3\)',
\ 'inputmap': {'2': '2', '3': '3'},
\ 'outputmap': {'1': '1'}
\}],
\ s:cap.aug_comp[2])
" test captured groups and augment
call matchup#perf#timeout_start(0)
normal! 1G
let s:cur = matchup#delim#get_current('all', 'both')
call matchup#test#assert_equal('foobar', s:cur.match)
call matchup#test#assert_equal({'1': 'foobar', '2': 'foo', '3': 'bar'}, s:cur.groups)
call matchup#test#assert_equal({}, s:cur.augment)
normal! 2G
let s:cur = matchup#delim#get_current('all', 'both_all')
" in this case, group 1 cannot be captured and is unresolved
call matchup#test#assert_equal('barfoo', s:cur.match)
call matchup#test#assert_equal({'2': 'foo', '3': 'bar'}, s:cur.groups)
call matchup#test#assert_equal(
\ {'str': '\<\(\Vfoo\m\Vbar\m\)', 'unresolved': {'1': '1'}},
\ s:cur.augment)
let s:matching = matchup#delim#get_matching(s:cur)
normal! 3G
let s:cur = matchup#delim#get_current('all', 'both')
call matchup#test#assert_equal('endfoobar', s:cur.match)
call matchup#test#assert_equal({'1': 'foobar', '2': 'foo', '3': 'bar'}, s:cur.groups)
call matchup#test#assert_equal(
\ {'str': '\<\Vfoobar\m', 'unresolved': {}},
\ s:cur.augment)
quit!