Fix issues with running individual tests, and get the Vim tests to run on certain machines again

This commit is contained in:
w0rp 2017-07-09 14:58:17 +01:00
parent c67d3b7e60
commit 836a2cfe3b
7 changed files with 76 additions and 22 deletions

View file

@ -3,6 +3,34 @@
"
" This file should not typically be loaded during the normal execution of ALE.
" Change the directory for checking things in particular test directories
"
" This function will set the g:dir variable, which represents the working
" directory after changing the path. This variable allows a test to change
" directories, and then switch back to a directory at the start of the test
" run.
"
" This function should be run in a Vader Before: block.
function! ale#test#SetDirectory(docker_path) abort
if a:docker_path[:len('/testplugin/') - 1] !=# '/testplugin/'
throw 'docker_path must start with /testplugin/!'
endif
" Try to switch directory, which will fail when running tests directly,
" and not through the Docker image.
silent! execute 'cd ' . fnameescape(a:docker_path)
let g:dir = getcwd()
endfunction
" When g:dir is defined, switch back to the directory we saved, and then
" delete that variable.
"
" This function should be run in a Vader After: block.
function! ale#test#RestoreDirectory() abort
silent execute 'cd ' . fnameescape(g:dir)
unlet! g:dir
endfunction
" Change the filename for the current buffer using a relative path to
" the script without running autocmd commands.
"

View file

@ -45,6 +45,15 @@ while [ $# -ne 0 ]; do
run_neovim_tests=0
run_vint=0
run_custom_checks=0
shift
;;
--no-vint)
run_vint=0
shift
;;
--no-custom-checks)
run_custom_checks=0
shift
;;
--)
shift
@ -161,7 +170,7 @@ if ((run_vim_tests)); then
echo
set -o pipefail
docker run -a stderr "${DOCKER_FLAGS[@]}" \
docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${DOCKER_FLAGS[@]}" \
"/vim-build/bin/$vim" -u test/vimrc \
"+Vader! $tests" 2>&1 | filter-vader-output | color-vader-output || EXIT=$?
set +o pipefail

View file

@ -1,3 +1,8 @@
Before:
runtime ale_linters/javascript/jscs.vim
After:
call ale#linter#Reset()
Execute(jscs should parse lines correctly):
AssertEqual

View file

@ -1,15 +1,17 @@
Execute(Open a file some directory down):
silent! cd /testplugin/test
:e! top/middle/bottom/dummy.txt
Before:
call ale#test#SetDirectory('/testplugin/test')
After:
call ale#test#RestoreDirectory()
Execute(We should be able to find a directory some directory down):
call ale#test#SetFilename('top/middle/bottom/dummy.txt')
Then(We should be able to find the right directory):
AssertEqual
\ expand('%:p:h:h:h:h') . '/top/ale-special-directory-name-dont-use-this-please/',
\ ale#path#FindNearestDirectory(bufnr('%'), 'ale-special-directory-name-dont-use-this-please')
Execute(Do nothing):
Then(We shouldn't find anything for files which don't match):
Execute(We shouldn't find anything for files which don't match):
AssertEqual
\ '',
\ ale#path#FindNearestDirectory(bufnr('%'), 'ale-this-should-never-match-anything')

View file

@ -1,11 +1,13 @@
Execute(Open a file some directory down):
silent! cd /testplugin/test
:e! top/middle/bottom/dummy.txt
Before:
call ale#test#SetDirectory('/testplugin/test')
After:
call ale#test#RestoreDirectory()
Execute(We should be able to find a configuration file further up):
call ale#test#SetFilename('top/middle/bottom/dummy.txt')
Then(We should be able to find a configuration file further up):
AssertEqual expand('%:p:h:h:h:h') . '/top/example.ini', ale#path#FindNearestFile(bufnr('%'), 'example.ini')
Execute(Do nothing):
Then(We shouldn't find anything for files which don't match):
Execute(We shouldn't find anything for files which don't match):
AssertEqual '', ale#path#FindNearestFile(bufnr('%'), 'cantfindthis')

View file

@ -1,15 +1,17 @@
Execute(Open a file some directory down):
silent! cd /testplugin/test
:e! top/middle/bottom/dummy.txt
Before:
call ale#test#SetDirectory('/testplugin/test')
After:
call ale#test#RestoreDirectory()
Execute(We should be able to find the local version of a file):
call ale#test#SetFilename('top/middle/bottom/dummy.txt')
Then(We should be able to find the local version of a file):
AssertEqual
\ expand('%:p:h:h:h:h') . '/top/example.ini',
\ ale#path#ResolveLocalPath(bufnr('%'), 'example.ini', '/global/config.ini')
Execute(Do nothing):
Then(We shouldn't find anything for files which don't match):
Execute(We shouldn't find anything for files which don't match):
AssertEqual
\ '/global/config.ini',
\ ale#path#ResolveLocalPath(bufnr('%'), 'missing.ini', '/global/config.ini')

View file

@ -47,6 +47,12 @@ Execute(ALE shouldn't blow up when run from a sandbox):
sandbox call ale#Lint()
Execute(ALE shouldn't blow up if file cleanup happens in a sandbox):
" Make a call to an engine function first, so the function will be defined
" before we make the sandbox call.
"
" You are not allowed to define any functions in the sandbox.
call ale#engine#InitBufferInfo(3)
let g:ale_buffer_info[3] = {
\ 'temporary_file_list': ['/tmp/foo'],
\ 'temporary_directory_list': ['/tmp/bar'],