mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	The new oldtest directory is in test/old/testdir. The reason for this is that many tests have hardcoded the parent directory name to be 'testdir'.
		
			
				
	
	
		
			230 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
" Tests for :help
 | 
						||
 | 
						||
source check.vim
 | 
						||
source vim9.vim
 | 
						||
 | 
						||
func SetUp()
 | 
						||
  let s:vimruntime = $VIMRUNTIME
 | 
						||
  let s:runtimepath = &runtimepath
 | 
						||
  " Set $VIMRUNTIME to $BUILD_DIR/runtime and remove the original $VIMRUNTIME
 | 
						||
  " path from &runtimepath so that ":h local-additions" won't pick up builtin
 | 
						||
  " help files.
 | 
						||
  let $VIMRUNTIME = expand($BUILD_DIR) .. '/runtime'
 | 
						||
  set runtimepath-=../../../runtime
 | 
						||
endfunc
 | 
						||
 | 
						||
func TearDown()
 | 
						||
  let $VIMRUNTIME = s:vimruntime
 | 
						||
  let &runtimepath = s:runtimepath
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_help_restore_snapshot()
 | 
						||
  help
 | 
						||
  set buftype=
 | 
						||
  help
 | 
						||
  edit x
 | 
						||
  help
 | 
						||
  helpclose
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_help_restore_snapshot_split()
 | 
						||
  " Squeeze the unnamed buffer, Xfoo and the help one side-by-side and focus
 | 
						||
  " the first one before calling :help.
 | 
						||
  let bnr = bufnr()
 | 
						||
  botright vsp Xfoo
 | 
						||
  wincmd h
 | 
						||
  help
 | 
						||
  wincmd L
 | 
						||
  let g:did_bufenter = v:false
 | 
						||
  augroup T
 | 
						||
    au!
 | 
						||
    au BufEnter Xfoo let g:did_bufenter = v:true
 | 
						||
  augroup END
 | 
						||
  helpclose
 | 
						||
  augroup! T
 | 
						||
  " We're back to the unnamed buffer.
 | 
						||
  call assert_equal(bnr, bufnr())
 | 
						||
  " No BufEnter was triggered for Xfoo.
 | 
						||
  call assert_equal(v:false, g:did_bufenter)
 | 
						||
 | 
						||
  close!
 | 
						||
  bwipe!
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_help_errors()
 | 
						||
  call assert_fails('help doesnotexist', 'E149:')
 | 
						||
  call assert_fails('help!', 'E478:')
 | 
						||
  if has('multi_lang')
 | 
						||
    call assert_fails('help help@xy', 'E661:')
 | 
						||
  endif
 | 
						||
 | 
						||
  let save_hf = &helpfile
 | 
						||
  set helpfile=help_missing
 | 
						||
  help
 | 
						||
  call assert_equal(1, winnr('$'))
 | 
						||
  call assert_notequal('help', &buftype)
 | 
						||
  let &helpfile = save_hf
 | 
						||
 | 
						||
  call assert_fails('help ' . repeat('a', 1048), 'E149:')
 | 
						||
 | 
						||
  new
 | 
						||
  set keywordprg=:help
 | 
						||
  call setline(1, "   ")
 | 
						||
  call assert_fails('normal VK', 'E349:')
 | 
						||
  bwipe!
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_help_expr()
 | 
						||
  help expr-!~?
 | 
						||
  call assert_equal('eval.txt', expand('%:t'))
 | 
						||
  close
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_help_keyword()
 | 
						||
  new
 | 
						||
  set keywordprg=:help
 | 
						||
  call setline(1, "  Visual ")
 | 
						||
  normal VK
 | 
						||
  call assert_match('^Visual mode', getline('.'))
 | 
						||
  call assert_equal('help', &ft)
 | 
						||
  close
 | 
						||
  bwipe!
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_help_local_additions()
 | 
						||
  call mkdir('Xruntime/doc', 'p')
 | 
						||
  call writefile(['*mydoc.txt* my awesome doc'], 'Xruntime/doc/mydoc.txt')
 | 
						||
  call writefile(['*mydoc-ext.txt* my extended awesome doc'], 'Xruntime/doc/mydoc-ext.txt')
 | 
						||
  let rtp_save = &rtp
 | 
						||
  set rtp+=./Xruntime
 | 
						||
  help local-additions
 | 
						||
  let lines = getline(line(".") + 1, search("^$") - 1)
 | 
						||
  call assert_equal([
 | 
						||
  \ '|mydoc-ext.txt| my extended awesome doc',
 | 
						||
  \ '|mydoc.txt| my awesome doc'
 | 
						||
  \ ], lines)
 | 
						||
  call delete('Xruntime/doc/mydoc-ext.txt')
 | 
						||
  close
 | 
						||
 | 
						||
  call mkdir('Xruntime-ja/doc', 'p')
 | 
						||
  call writefile(["local-additions\thelp.jax\t/*local-additions*"], 'Xruntime-ja/doc/tags-ja')
 | 
						||
  call writefile(['*help.txt* This is jax file', '',
 | 
						||
  \ 'LOCAL ADDITIONS: *local-additions*', ''], 'Xruntime-ja/doc/help.jax')
 | 
						||
  call writefile(['*work.txt* This is jax file'], 'Xruntime-ja/doc/work.jax')
 | 
						||
  call writefile(['*work2.txt* This is jax file'], 'Xruntime-ja/doc/work2.jax')
 | 
						||
  set rtp+=./Xruntime-ja
 | 
						||
 | 
						||
  help local-additions@en
 | 
						||
  let lines = getline(line(".") + 1, search("^$") - 1)
 | 
						||
  call assert_equal([
 | 
						||
  \ '|mydoc.txt| my awesome doc'
 | 
						||
  \ ], lines)
 | 
						||
  close
 | 
						||
 | 
						||
  help local-additions@ja
 | 
						||
  let lines = getline(line(".") + 1, search("^$") - 1)
 | 
						||
  call assert_equal([
 | 
						||
  \ '|mydoc.txt| my awesome doc',
 | 
						||
  \ '|help.txt| This is jax file',
 | 
						||
  \ '|work.txt| This is jax file',
 | 
						||
  \ '|work2.txt| This is jax file',
 | 
						||
  \ ], lines)
 | 
						||
  close
 | 
						||
 | 
						||
  call delete('Xruntime', 'rf')
 | 
						||
  call delete('Xruntime-ja', 'rf')
 | 
						||
  let &rtp = rtp_save
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_help_completion()
 | 
						||
  call feedkeys(":help :undo\<C-A>\<C-B>\"\<CR>", 'tx')
 | 
						||
  call assert_equal('"help :undo :undoj :undol :undojoin :undolist', @:)
 | 
						||
endfunc
 | 
						||
 | 
						||
" Test for the :helptags command
 | 
						||
" NOTE: if you run tests as root this will fail.  Don't run tests as root!
 | 
						||
func Test_helptag_cmd()
 | 
						||
  call mkdir('Xdir/a/doc', 'p')
 | 
						||
 | 
						||
  " No help file to process in the directory
 | 
						||
  call assert_fails('helptags Xdir', 'E151:')
 | 
						||
 | 
						||
  call writefile([], 'Xdir/a/doc/sample.txt')
 | 
						||
 | 
						||
  " Test for ++t argument
 | 
						||
  helptags ++t Xdir
 | 
						||
  call assert_equal(["help-tags\ttags\t1"], readfile('Xdir/tags'))
 | 
						||
  call delete('Xdir/tags')
 | 
						||
 | 
						||
  " Test parsing tags
 | 
						||
  call writefile(['*tag1*', 'Example: >', '  *notag*', 'Example end: *tag2*'],
 | 
						||
    \ 'Xdir/a/doc/sample.txt')
 | 
						||
  helptags Xdir
 | 
						||
  call assert_equal(["tag1\ta/doc/sample.txt\t/*tag1*",
 | 
						||
                  \  "tag2\ta/doc/sample.txt\t/*tag2*"], readfile('Xdir/tags'))
 | 
						||
 | 
						||
  " Duplicate tags in the help file
 | 
						||
  call writefile(['*tag1*', '*tag1*', '*tag2*'], 'Xdir/a/doc/sample.txt')
 | 
						||
  call assert_fails('helptags Xdir', 'E154:')
 | 
						||
 | 
						||
  call delete('Xdir', 'rf')
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_helptag_cmd_readonly()
 | 
						||
  CheckUnix
 | 
						||
  CheckNotRoot
 | 
						||
 | 
						||
  " Read-only tags file
 | 
						||
  call mkdir('Xdir/doc', 'p')
 | 
						||
  call writefile([''], 'Xdir/doc/tags')
 | 
						||
  call writefile([], 'Xdir/doc/sample.txt')
 | 
						||
  call setfperm('Xdir/doc/tags', 'r-xr--r--')
 | 
						||
  call assert_fails('helptags Xdir/doc', 'E152:', getfperm('Xdir/doc/tags'))
 | 
						||
 | 
						||
  let rtp = &rtp
 | 
						||
  let &rtp = 'Xdir'
 | 
						||
  helptags ALL
 | 
						||
  let &rtp = rtp
 | 
						||
 | 
						||
  call delete('Xdir/doc/tags')
 | 
						||
 | 
						||
  " No permission to read the help file
 | 
						||
  call mkdir('Xdir/b/doc', 'p')
 | 
						||
  call writefile([], 'Xdir/b/doc/sample.txt')
 | 
						||
  call setfperm('Xdir/b/doc/sample.txt', '-w-------')
 | 
						||
  call assert_fails('helptags Xdir', 'E153:', getfperm('Xdir/b/doc/sample.txt'))
 | 
						||
  call delete('Xdir', 'rf')
 | 
						||
endfunc
 | 
						||
 | 
						||
" Test for setting the 'helpheight' option in the help window
 | 
						||
func Test_help_window_height()
 | 
						||
  let &cmdheight = &lines - 23
 | 
						||
  set helpheight=10
 | 
						||
  help
 | 
						||
  set helpheight=14
 | 
						||
  call assert_equal(14, winheight(0))
 | 
						||
  set helpheight& cmdheight=1
 | 
						||
  close
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_help_long_argument()
 | 
						||
  try
 | 
						||
    exe 'help \%' .. repeat('0', 1021)
 | 
						||
  catch
 | 
						||
    call assert_match("E149:", v:exception)
 | 
						||
  endtry
 | 
						||
endfunc
 | 
						||
 | 
						||
func Test_help_using_visual_match()
 | 
						||
  let lines =<< trim END
 | 
						||
      call setline(1, ' ')
 | 
						||
      /^
 | 
						||
      exe "normal \<C-V>\<C-V>"
 | 
						||
      h5\%V]
 | 
						||
  END
 | 
						||
  call CheckScriptFailure(lines, 'E149:')
 | 
						||
endfunc
 | 
						||
 | 
						||
 | 
						||
" vim: shiftwidth=2 sts=2 expandtab
 |