diff --git a/.travis.yml b/.travis.yml index 37cdad3..3384f24 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,11 +5,20 @@ env: matrix: - ENV=test - ENV=check + - ENV=test_nvim install: - | if [ "$ENV" = "test" ]; then python3.6 -m pip install pytest fi + - | + # https://github.com/neovim/bot-ci#generated-builds + if [ "$ENV" = "test_nvim" ]; then + eval "$(curl -Ss https://raw.githubusercontent.com/neovim/bot-ci/master/scripts/travis-setup.sh) nightly-x64" + pip --version + pip install neovim + else + vim --version + fi script: - - vim --version - make --keep-going "$ENV" diff --git a/Makefile b/Makefile index ed049c6..bae7bc4 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,9 @@ test: pytest test_*.py +test_nvim: + VSPEC_VIM=nvim pytest test_*.py + build: mkdir $@ diff --git a/test/completions.vim b/test/completions.vim index aa6db08..8701d8a 100644 --- a/test/completions.vim +++ b/test/completions.vim @@ -13,6 +13,20 @@ describe 'completions' bd! end + it 'longest in completeopt' + " This gets set up with Vim only on VimEnter. + if has('nvim') + Expect stridx(&completeopt, 'longest') > -1 + else + Expect stridx(&completeopt, 'longest') == -1 + doautocmd VimEnter + Expect stridx(&completeopt, 'longest') > -1 + endif + + " Do not use it for following tests. + set completeopt-=longest + end + it 'smart import' exec "normal ifrom os " Expect getline('.') == 'from os import ' @@ -35,20 +49,35 @@ describe 'completions' it 'exception' normal oIndentationErrX Expect getline('.') == 'IndentationError' - normal a().filenaX + + " Do not remap keys (".") here, otherwise this triggers completion in + " Neovim already. + normal! a().filena + + normal aX Expect getline('.') == 'IndentationError().filename' end it 'multi complete' + " NOTE: nvim results in "importErr()" here with completeopt+=longest, + " but Vim is fine. + " This is due to `pumvisible()` in jedi#complete_opened being true + " with nvim still, but it is 0 with Vim, i.e. Vim appears to close + " the pum already (with the tests). + " + " This might be a misunderstanding though, since the test might not + " expect the "import" keyword to be offered for completion?! normal oImpXErrX() Expect getline('.') == 'ImportError()' end it 'cycling through entries popup_select_first=0' + set completeopt+=longest let g:jedi#popup_select_first = 0 execute "normal oraise impX\" - " It looks like this is currently not working properly. - "Expect getline('.') == 'raise ImportError' + + Expect getline('.') == 'raise ImportError' + set completeopt-=longest end it 'cycling through entries popup_select_first=1' @@ -56,12 +85,27 @@ describe 'completions' Expect getline('.') == 'raise ImportWarning' end - it 'longest' - " -longest completes the first one - set completeopt -=longest - execute "normal oraise baseX" - Expect getline('.') == 'raise BaseException' - set completeopt +=longest + it 'cycling through entries popup_select_first=1 and longest' + set completeopt+=longest + execute "normal oraise impX" + Expect getline('.') == 'raise Import' + + " With Neovim pumvisible() is 1 in jedi#complete_opened, which then + " triggers the . This is not the case with Vim. + if has('nvim') + execute "normal oraise impX\" + Expect getline('.') == 'raise ImportWarning' + + execute "normal oraise impX\\" + Expect getline('.') == 'raise imp' + else + execute "normal oraise impX\" + Expect getline('.') == 'raise ImportError' + + execute "normal oraise impX\\" + Expect getline('.') == 'raise ImportWarning' + endif + set completeopt-=longest end end diff --git a/test/signatures.vim b/test/signatures.vim index 9b8a3fc..06533f2 100644 --- a/test/signatures.vim +++ b/test/signatures.vim @@ -94,10 +94,10 @@ describe 'signatures' return msg endfunction - let funcname = repeat('a', &columns - 30) + let funcname = repeat('a', &columns - (30 + (&ruler ? 18 : 0))) put = 'def '.funcname.'(arg1, arg2, arg3, a, b, c):' put = ' pass' - execute "normal o".funcname."( " + execute "normal o\".funcname."( " Expect Signature() == "\n".funcname."(arg1, …)" exe 'normal sarg1, ' @@ -112,7 +112,7 @@ describe 'signatures' g/^/d put = 'def '.funcname.'('.repeat('b', 20).', arg2):' put = ' pass' - execute "normal o".funcname."( " + execute "normal o\".funcname."( " Expect Signature() == "\n".funcname."(…)" end