mirror of
https://github.com/chenasraf/vim-matchup.git
synced 2026-05-18 01:38:57 +00:00
4
.github/workflows/neovim.yml
vendored
4
.github/workflows/neovim.yml
vendored
@@ -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
|
||||
|
||||
6
.github/workflows/vim.yml
vendored
6
.github/workflows/vim.yml
vendored
@@ -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
52
autoload/matchup/test.vim
Normal 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
3
test/new/.coveragerc
Normal file
@@ -0,0 +1,3 @@
|
||||
[run]
|
||||
plugins = covimerage
|
||||
data_file = .coverage_covimerage
|
||||
33
test/new/Makefile
Normal file
33
test/new/Makefile
Normal 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
|
||||
16
test/new/common/bootstrap.vim
Normal file
16
test/new/common/bootstrap.vim
Normal 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>
|
||||
9
test/new/test-delim/Makefile
Normal file
9
test/new/test-delim/Makefile
Normal file
@@ -0,0 +1,9 @@
|
||||
.PHONY: test
|
||||
|
||||
MYVIM ?= nvim --headless
|
||||
|
||||
INMAKE := 1
|
||||
export INMAKE
|
||||
|
||||
test:
|
||||
@$(MYVIM) -u test.vim
|
||||
12
test/new/test-delim/test.tex
Normal file
12
test/new/test-delim/test.tex
Normal 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}
|
||||
21
test/new/test-delim/test.vim
Normal file
21
test/new/test-delim/test.vim
Normal 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!
|
||||
9
test/new/test-loader/Makefile
Normal file
9
test/new/test-loader/Makefile
Normal file
@@ -0,0 +1,9 @@
|
||||
.PHONY: test
|
||||
|
||||
MYVIM ?= nvim --headless
|
||||
|
||||
INMAKE := 1
|
||||
export INMAKE
|
||||
|
||||
test:
|
||||
@$(MYVIM) -u test.vim
|
||||
3
test/new/test-loader/example.ext
Normal file
3
test/new/test-loader/example.ext
Normal file
@@ -0,0 +1,3 @@
|
||||
foobar
|
||||
barfoo
|
||||
endfoobar
|
||||
91
test/new/test-loader/test.vim
Normal file
91
test/new/test-loader/test.vim
Normal 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!
|
||||
Reference in New Issue
Block a user