Merge pull request #46 from leafOfTree/ci-matrix

Test with several Vim and Neovim versions and fixed deps
This commit is contained in:
leaf authored and GitHub committed 2026-10-21 20:22:51 +08:00
commit 983942b6d8
3 files changed
+44 -12

No files matched your search

+15 -2
View File
@@ -6,10 +6,23 @@ on:
jobs:
test:
name: ${{ matrix.neovim && 'nvim' || 'vim' }} ${{ matrix.version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- { neovim: false, version: v8.2.0000 }
- { neovim: false, version: stable }
- { neovim: true, version: v0.9.5 }
- { neovim: true, version: stable }
steps:
- uses: actions/checkout@v4
- name: Install Vim and Neovim
run: sudo apt-get update && sudo apt-get install -y vim neovim
- uses: rhysd/action-setup-vim@v1
with:
neovim: ${{ matrix.neovim }}
version: ${{ matrix.version }}
- name: Run tests
run: ./test/run.sh
env:
VUE_TEST_EDITORS: ${{ matrix.neovim && 'nvim' || 'vim' }}
+2 -1
View File
@@ -217,6 +217,7 @@ Run tests with Vim and Neovim, whichever is installed
```sh
./test/run.sh
./test/run.sh basic template # Only these cases
VUE_TEST_EDITORS=nvim ./test/run.sh # Only Neovim
```
Each case is a `.vue` or `.wpy` file in [test/cases](test/cases), with an optional `.vim` file for the config and checks. A case fails if
@@ -226,7 +227,7 @@ Each case is a `.vue` or `.wpy` file in [test/cases](test/cases), with an option
- a check in `Check()` fails, such as syntax, `GetVueTag()`, `GetVueSyntax()` or fold level
- there is an error message
Tests also run on GitHub Actions for each push and pull request.
Tests also run on GitHub Actions for each push and pull request, with Vim 8.2.0000, the latest Vim, Neovim 0.9.5 and the latest Neovim.
## Acknowledgments & Refs
+27 -9
View File
@@ -1,17 +1,27 @@
#!/bin/sh
# Run all test cases, or the ones given as arguments, with vim and nvim if
# they are installed. Vim runs in a pseudo terminal by `script`, as syntax
# in Ex mode (-es) isn't the same as in a terminal.
# they are installed, or only the ones in $VUE_TEST_EDITORS. Vim runs in a
# pseudo terminal by `script`, as syntax in Ex mode (-es) isn't the same as
# in a terminal.
# ./test/run.sh
# ./test/run.sh basic template
# VUE_TEST_EDITORS=nvim ./test/run.sh
cd "$(dirname "$0")/.." || exit 1
editors=${VUE_TEST_EDITORS:-vim nvim}
# Syntax plugins used by test/cases/example.vue
# Syntax plugins used by test/cases/example.vue, at fixed commits
mkdir -p test/deps
for repo in digitaltoad/vim-pug kchmck/vim-coffee-script \
leafgarland/typescript-vim iloginow/vim-stylus; do
for dep in digitaltoad/vim-pug@ea39cd942cf3194230cf72bfb838901a5344d3b3 \
kchmck/vim-coffee-script@28421258a8dde5a50deafbfc19cd9873cacfaa79 \
leafgarland/typescript-vim@4740441db1e070ef8366c888c658000dd032e4cb \
iloginow/vim-stylus@0e457b09db55d3518703bb22e1555872c5c44b7a; do
repo=${dep%@*}
commit=${dep#*@}
dir=test/deps/${repo#*/}
[ -d "$dir" ] || git clone -q --depth 1 "https://github.com/$repo" "$dir"
[ -d "$dir" ] && continue
git init -q "$dir" &&
git -C "$dir" fetch -q --depth 1 "https://github.com/$repo" "$commit" &&
git -C "$dir" checkout -q FETCH_HEAD || exit 1
done
if [ $# -gt 0 ]; then
@@ -20,17 +30,24 @@ else
cases=$(ls test/cases/*.vue test/cases/*.wpy 2>/dev/null | sed 's#.*/##; s#\.[a-z]*$##')
fi
has_editor() {
case " $editors " in
*" $1 "*) command -v "$1" >/dev/null ;;
*) return 1 ;;
esac
}
out=$(mktemp)
status=0
expected=0
for name in $cases; do
if command -v vim >/dev/null; then
if has_editor vim; then
expected=$((expected + 1))
VUE_TEST_CASE=$name VUE_TEST_OUT=$out timeout 60 script -qec \
'stty rows 40 cols 120; vim -N -u NONE -i NONE -S test/run.vim' \
/dev/null >/dev/null || status=1
fi
if command -v nvim >/dev/null; then
if has_editor nvim; then
expected=$((expected + 1))
VUE_TEST_CASE=$name VUE_TEST_OUT=$out timeout 60 \
nvim --headless -u NONE -i NONE -S test/run.vim || status=1
@@ -42,6 +59,7 @@ passed=$(grep -c '^ok' "$out")
failed=$(grep -c '^FAIL' "$out")
missing=$((expected - passed - failed))
echo "$passed passed, $failed failed, $missing without result"
[ $failed -eq 0 ] && [ $missing -eq 0 ] || status=1
[ $expected -gt 0 ] || echo "No editor found in: $editors"
[ $expected -gt 0 ] && [ $failed -eq 0 ] && [ $missing -eq 0 ] || status=1
rm -f "$out"
exit $status