Mercurial > vim
view src/testdir/test_compiler.vim @ 33374:62a34e280593 v9.0.1946
patch 9.0.1946: filename expansion using ** in bash may fail
Commit: https://github.com/vim/vim/commit/9eb1ce531527a7177d16373b0f8689bbcd3d5f73
Author: Christian Brabandt <cb@256bit.org>
Date: Wed Sep 27 19:08:25 2023 +0200
patch 9.0.1946: filename expansion using ** in bash may fail
Problem: filename expansion using ** in bash may fail
Solution: Try to enable the globstar setting
Starting with bash 4.0 it supports extended globbing using the globstar
shell option. This makes matching recursively below a certain directory
using the ** pattern work as expected nowadays. However, we need to
explicitly enable this using the 'shopt -s globstar' bash command.
So let's check the bash environment variable $BASH_VERSINFO (which is
supported since bash 3.0 and conditionally enable the globstar option,
if the major version is at least 4. For older bashs, this at least
shouldn't cause errors (unless one is using really ancient bash 2.X or
something).
closes: #13002
closes: #13144
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 27 Sep 2023 19:15:06 +0200 |
parents | fed9c5ffde42 |
children | 7ed07817c287 |
line wrap: on
line source
" Test the :compiler command source check.vim source shared.vim func Test_compiler() CheckExecutable perl CheckFeature quickfix let save_LC_ALL = $LC_ALL let $LC_ALL= "C" " %:S does not work properly with 'shellslash' set let save_shellslash = &shellslash set noshellslash e Xfoo.pl compiler perl call assert_equal('perl', b:current_compiler) call assert_fails('let g:current_compiler', 'E121:') let verbose_efm = execute('verbose set efm') call assert_match('Last set from .*[/\\]compiler[/\\]perl.vim ', verbose_efm) call setline(1, ['#!/usr/bin/perl -w', 'use strict;', 'my $foo=1']) w! call feedkeys(":make\<CR>\<CR>", 'tx') call assert_fails('clist', 'E42:') call setline(1, ['#!/usr/bin/perl -w', 'use strict;', '$foo=1']) w! call feedkeys(":make\<CR>\<CR>", 'tx') let a=execute('clist') call assert_match('\n \d\+ Xfoo.pl:3: Global symbol "$foo" ' \ . 'requires explicit package name', a) let &shellslash = save_shellslash call delete('Xfoo.pl') bw! let $LC_ALL = save_LC_ALL endfunc func GetCompilerNames() return glob('$VIMRUNTIME/compiler/*.vim', 0, 1) \ ->map({i, v -> substitute(v, '.*[\\/]\([a-zA-Z0-9_\-]*\).vim', '\1', '')}) \ ->sort() endfunc func Test_compiler_without_arg() let runtime = substitute($VIMRUNTIME, '\\', '/', 'g') let a = split(execute('compiler')) let exp = GetCompilerNames() call assert_match(runtime .. '/compiler/' .. exp[0] .. '.vim$', a[0]) call assert_match(runtime .. '/compiler/' .. exp[1] .. '.vim$', a[1]) call assert_match(runtime .. '/compiler/' .. exp[-1] .. '.vim$', a[-1]) endfunc " Test executing :compiler from the command line, not from a script func Test_compiler_commandline() call system(GetVimCommandClean() .. ' --not-a-term -c "compiler gcc" -c "call writefile([b:current_compiler], ''XcompilerOut'')" -c "quit"') call assert_equal(0, v:shell_error) call assert_equal(["gcc"], readfile('XcompilerOut')) call delete('XcompilerOut') endfunc func Test_compiler_completion() let clist = GetCompilerNames()->join(' ') call feedkeys(":compiler \<C-A>\<C-B>\"\<CR>", 'tx') call assert_match('^"compiler ' .. clist .. '$', @:) call feedkeys(":compiler p\<C-A>\<C-B>\"\<CR>", 'tx') call assert_match('"compiler pbx perl\( p[a-z]\+\)\+ pylint pyunit', @:) call feedkeys(":compiler! p\<C-A>\<C-B>\"\<CR>", 'tx') call assert_match('"compiler! pbx perl\( p[a-z]\+\)\+ pylint pyunit', @:) endfunc func Test_compiler_error() let g:current_compiler = 'abc' call assert_fails('compiler doesnotexist', 'E666:') call assert_equal('abc', g:current_compiler) call assert_fails('compiler! doesnotexist', 'E666:') unlet! g:current_compiler endfunc " vim: shiftwidth=2 sts=2 expandtab