diff --git a/autoload/ale/test.vim b/autoload/ale/test.vim index bfc716d..22cd51b 100644 --- a/autoload/ale/test.vim +++ b/autoload/ale/test.vim @@ -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. " diff --git a/run-tests b/run-tests index 92dca31..b32ac70 100755 --- a/run-tests +++ b/run-tests @@ -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 diff --git a/test/handler/test_jscs_handler.vader b/test/handler/test_jscs_handler.vader index 81e91d8..6247307 100644 --- a/test/handler/test_jscs_handler.vader +++ b/test/handler/test_jscs_handler.vader @@ -1,3 +1,8 @@ +Before: + runtime ale_linters/javascript/jscs.vim + +After: + call ale#linter#Reset() Execute(jscs should parse lines correctly): AssertEqual diff --git a/test/test_find_nearest_directory.vader b/test/test_find_nearest_directory.vader index ecfd138..03d3886 100644 --- a/test/test_find_nearest_directory.vader +++ b/test/test_find_nearest_directory.vader @@ -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') diff --git a/test/test_nearest_file_search.vader b/test/test_nearest_file_search.vader index c2499ad..71b7d10 100644 --- a/test/test_nearest_file_search.vader +++ b/test/test_nearest_file_search.vader @@ -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') diff --git a/test/test_resolve_local_path.vader b/test/test_resolve_local_path.vader index 703eec3..ed1549a 100644 --- a/test/test_resolve_local_path.vader +++ b/test/test_resolve_local_path.vader @@ -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') diff --git a/test/test_sandbox_execution.vader b/test/test_sandbox_execution.vader index dc0cb01..7f4941f 100644 --- a/test/test_sandbox_execution.vader +++ b/test/test_sandbox_execution.vader @@ -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'],