Merge PR #1420 'Migrate legacy tests (2nd batch)'

This commit is contained in:
Thiago de Arruda 2014-11-20 21:50:53 -03:00
commit bc1b9c1d90
40 changed files with 765 additions and 616 deletions

View File

@ -1,45 +0,0 @@
Test for v:hlsearch vim: set ft=vim :
STARTTEST
:" Last abc: Q
:so small.vim
:new
:call setline(1, repeat(['aaa'], 10))
:set hlsearch nolazyredraw
:let r=[]
:command -nargs=0 -bar AddR :call add(r, [screenattr(1, 1), v:hlsearch])
/aaa
:AddR
:nohlsearch
:AddR
:let v:hlsearch=1
:AddR
:let v:hlsearch=0
:AddR
:set hlsearch
:AddR
:let v:hlsearch=0
:AddR
n:AddR
:let v:hlsearch=0
:AddR
/
:AddR
:let r1=r[0][0]
:" I guess it is not guaranteed that screenattr outputs always the same character
:call map(r, 'v:val[1].":".(v:val[0]==r1?"highlighted":"not highlighted")')
:try
: let v:hlsearch=[]
:catch
: call add(r, matchstr(v:exception,'^Vim(let):E\d\+:'))
:endtry
:bwipeout!
:$put=r
:call garbagecollect(1)
:"
:/^start:/,$wq! test.out
:" vim: et ts=4 isk-=\:
:call getchar()
ENDTEST
start:

View File

@ -1,11 +0,0 @@
start:
1:highlighted
0:not highlighted
1:highlighted
0:not highlighted
1:highlighted
0:not highlighted
1:highlighted
0:not highlighted
1:highlighted
Vim(let):E706:

View File

@ -1,30 +0,0 @@
Tests for :let. vim: set ft=vim ts=8 :
STARTTEST
:so small.vim
:set runtimepath+=./sautest
:" Test to not autoload when assigning. It causes internal error.
:try
: let Test104#numvar = function('tr')
: $put ='OK: ' . string(Test104#numvar)
:catch
: $put ='FAIL: ' . v:exception
:endtry
:let a = 1
:let b = 2
:for letargs in ['a b', '{0 == 1 ? "a" : "b"}', '{0 == 1 ? "a" : "b"} a', 'a {0 == 1 ? "a" : "b"}']
: try
: redir => messages
: execute 'let' letargs
: redir END
: $put ='OK:'
: $put =split(substitute(messages, '\n', '\0 ', 'g'), '\n')
: catch
: $put ='FAIL: ' . v:exception
: redir END
: endtry
:endfor
:/^Results/,$wq! test.out
ENDTEST
Results of test104:

View File

@ -1,13 +0,0 @@
Results of test104:
OK: function('tr')
OK:
a #1
b #2
OK:
b #2
OK:
b #2
a #1
OK:
a #1
b #2

View File

@ -1,45 +0,0 @@
Test filename modifiers vim: set ft=vim :
STARTTEST
:source small.vim
:%delete _
:set shell=sh
:set shellslash
:let tab="\t"
:command -nargs=1 Put :let expr=<q-args> | $put =expr.tab.strtrans(string(eval(expr)))
:let $HOME=fnamemodify('.', ':p:h:h:h')
:Put fnamemodify('.', ':p' )[-1:]
:Put fnamemodify('.', ':p:h' )[-1:]
:Put fnamemodify('test.out', ':p' )[-1:]
:Put fnamemodify('test.out', ':.' )
:Put fnamemodify('../testdir/a', ':.' )
:Put fnamemodify('test.out', ':~' )
:Put fnamemodify('../testdir/a', ':~' )
:Put fnamemodify('../testdir/a', ':t' )
:Put fnamemodify('.', ':p:t' )
:Put fnamemodify('test.out', ':p:t' )
:Put fnamemodify('test.out', ':p:e' )
:Put fnamemodify('test.out', ':p:t:e' )
:Put fnamemodify('abc.fb2.tar.gz', ':r' )
:Put fnamemodify('abc.fb2.tar.gz', ':r:r' )
:Put fnamemodify('abc.fb2.tar.gz', ':r:r:r' )
:Put substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(nvim/testdir/.*\)', '\1', '')
:Put fnamemodify('abc.fb2.tar.gz', ':e' )
:Put fnamemodify('abc.fb2.tar.gz', ':e:e' )
:Put fnamemodify('abc.fb2.tar.gz', ':e:e:e' )
:Put fnamemodify('abc.fb2.tar.gz', ':e:e:e:e')
:Put fnamemodify('abc.fb2.tar.gz', ':e:e:r' )
:Put fnamemodify('abc def', ':S' )
:Put fnamemodify('abc" "def', ':S' )
:Put fnamemodify('abc"%"def', ':S' )
:Put fnamemodify('abc'' ''def', ':S' )
:Put fnamemodify('abc''%''def', ':S' )
:Put fnamemodify("abc\ndef", ':S' )
:set shell=tcsh
:Put fnamemodify("abc\ndef", ':S' )
:$put ='vim: ts=8'
:1 delete _
:w! test.out
:qa!
ENDTEST

View File

@ -1,29 +0,0 @@
fnamemodify('.', ':p' )[-1:] '/'
fnamemodify('.', ':p:h' )[-1:] 'r'
fnamemodify('test.out', ':p' )[-1:] 't'
fnamemodify('test.out', ':.' ) 'test.out'
fnamemodify('../testdir/a', ':.' ) 'a'
fnamemodify('test.out', ':~' ) '~/nvim/testdir/test.out'
fnamemodify('../testdir/a', ':~' ) '~/nvim/testdir/a'
fnamemodify('../testdir/a', ':t' ) 'a'
fnamemodify('.', ':p:t' ) ''
fnamemodify('test.out', ':p:t' ) 'test.out'
fnamemodify('test.out', ':p:e' ) 'out'
fnamemodify('test.out', ':p:t:e' ) 'out'
fnamemodify('abc.fb2.tar.gz', ':r' ) 'abc.fb2.tar'
fnamemodify('abc.fb2.tar.gz', ':r:r' ) 'abc.fb2'
fnamemodify('abc.fb2.tar.gz', ':r:r:r' ) 'abc'
substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(nvim/testdir/.*\)', '\1', '') 'nvim/testdir/abc.fb2'
fnamemodify('abc.fb2.tar.gz', ':e' ) 'gz'
fnamemodify('abc.fb2.tar.gz', ':e:e' ) 'tar.gz'
fnamemodify('abc.fb2.tar.gz', ':e:e:e' ) 'fb2.tar.gz'
fnamemodify('abc.fb2.tar.gz', ':e:e:e:e') 'fb2.tar.gz'
fnamemodify('abc.fb2.tar.gz', ':e:e:r' ) 'tar'
fnamemodify('abc def', ':S' ) '''abc def'''
fnamemodify('abc" "def', ':S' ) '''abc" "def'''
fnamemodify('abc"%"def', ':S' ) '''abc"%"def'''
fnamemodify('abc'' ''def', ':S' ) '''abc''\'''' ''\''''def'''
fnamemodify('abc''%''def', ':S' ) '''abc''\''''%''\''''def'''
fnamemodify("abc\ndef", ':S' ) '''abc^@def'''
fnamemodify("abc\ndef", ':S' ) '''abc\^@def'''
vim: ts=8

View File

@ -1,19 +0,0 @@
Tests for [ CTRL-I with a count and CTRL-W CTRL-I with a count
STARTTEST
:so small.vim
/start
6[ :.w! test.out
?start here
6 :.w >>test.out
:qa!
ENDTEST
#include test21.in
/* test text test tex start here
some text
test text
start OK if found this line
start found wrong line
test text

View File

@ -1,2 +0,0 @@
start OK if found this line
start OK if found this line

View File

@ -1,31 +0,0 @@
Test for jumping to a tag with 'hidden' set, with symbolic link in path of tag.
This only works for Unix, because of the symbolic link.
STARTTEST
:so small.vim
:set hidden
:" Create a link from test25.dir to the current directory.
:!rm -f test25.dir
:!ln -s . test25.dir
:" Create tags.text, with the current directory name inserted.
/tags line
:r !pwd
d$/test
hP:.w! tags.test
:" Try jumping to a tag in the current file, but with a path that contains a
:" symbolic link. When wrong, this will give the ATTENTION message. The next
:" space will then be eaten by hit-return, instead of moving the cursor to 'd'.
:set tags=tags.test
G x:.w! test.out
:!rm -f test25.dir tags.test
:qa!
ENDTEST
tags line:
SECTION_OFF /test25.dir/test25.in /^#define SECTION_OFF 3$/
/*tx.c*/
#define SECTION_OFF 3
#define NUM_SECTIONS 3
SECTION_OFF

View File

@ -1 +0,0 @@
#efine SECTION_OFF 3

View File

@ -1,44 +0,0 @@
Test for :execute, :while and :if
STARTTEST
:so small.vim
mt:let i = 0
:while i < 12
: let i = i + 1
: if has("ebcdic")
: execute "normal o" . i . "\047"
: else
: execute "normal o" . i . "\033"
: endif
: if i % 2
: normal Ax
: if i == 9
: break
: endif
: if i == 5
: continue
: else
: let j = 9
: while j > 0
: if has("ebcdic")
: execute "normal" j . "a" . j . "\x27"
: else
: execute "normal" j . "a" . j . "\x1b"
: endif
: let j = j - 1
: endwhile
: endif
: endif
: if i == 9
: if has("ebcdic")
: execute "normal Az\047"
: else
: execute "normal Az\033"
: endif
: endif
:endwhile
:unlet i j
:'t,$w! test.out
:qa!
ENDTEST

View File

@ -1,10 +0,0 @@
1x999999999888888887777777666666555554444333221
2
3x999999999888888887777777666666555554444333221
4
5x
6
7x999999999888888887777777666666555554444333221
8
9x

View File

@ -1,34 +0,0 @@
Test for 'lisp'
If the lisp feature is not enabled, this will fail!
STARTTEST
:so small.vim
:set lisp
/^(defun
=G:/^(defun/,$w! test.out
:q!
ENDTEST
(defun html-file (base)
(format nil "~(~A~).html" base))
(defmacro page (name title &rest body)
(let ((ti (gensym)))
`(with-open-file (*standard-output*
(html-file ,name)
:direction :output
:if-exists :supersede)
(let ((,ti ,title))
(as title ,ti)
(with center
(as h2 (string-upcase ,ti)))
(brs 3)
,@body))))
;;; Utilities for generating links
(defmacro with-link (dest &rest body)
`(progn
(format t "<a href=\"~A\">" (html-file ,dest))
,@body
(princ "</a>")))

View File

@ -1,23 +0,0 @@
(defun html-file (base)
(format nil "~(~A~).html" base))
(defmacro page (name title &rest body)
(let ((ti (gensym)))
`(with-open-file (*standard-output*
(html-file ,name)
:direction :output
:if-exists :supersede)
(let ((,ti ,title))
(as title ,ti)
(with center
(as h2 (string-upcase ,ti)))
(brs 3)
,@body))))
;;; Utilities for generating links
(defmacro with-link (dest &rest body)
`(progn
(format t "<a href=\"~A\">" (html-file ,dest))
,@body
(princ "</a>")))

View File

@ -1,34 +0,0 @@
Tests for regexp with various magic settings.
STARTTEST
:so small.vim
:set nocompatible viminfo+=nviminfo
/^1
/a*b\{2}c\+/e
x/\Md\*e\{2}f\+/e
x:set nomagic
/g\*h\{2}i\+/e
x/\mj*k\{2}l\+/e
x/\vm*n{2}o+/e
x/\V^aa$
x:set magic
/\v(a)(b)\2\1\1/e
x/\V[ab]\(\[xy]\)\1
x:$
:set undolevels=100
dv?bar?
Yup:"
:?^1?,$w! test.out
:qa!
ENDTEST
1 a aa abb abbccc
2 d dd dee deefff
3 g gg ghh ghhiii
4 j jj jkk jkklll
5 m mm mnn mnnooo
6 x ^aa$ x
7 (a)(b) abbaa
8 axx [ab]xx
9 foobar

View File

@ -1,11 +0,0 @@
1 a aa abb abbcc
2 d dd dee deeff
3 g gg ghh ghhii
4 j jj jkk jkkll
5 m mm mnn mnnoo
6 x aa$ x
7 (a)(b) abba
8 axx ab]xx
9 foobar
9 foo

View File

@ -1,29 +0,0 @@
Test for autocommand that deletes the current buffer on BufLeave event.
Also test deleting the last buffer, should give a new, empty buffer.
STARTTEST
:so small.vim
:au BufLeave Xxx bwipe
/start of
:.,/end of/w! Xxx " write test file Xxx
:sp Xxx " split to Xxx
:bwipe " delete buffer Xxx, now we're back here
G?this is a
othis is some more text
: " Append some text to this file
:?start?,$w! test.out " Write current file contents
:bwipe test.out " delete alternate buffer
:au bufleave test5.in bwipe
:bwipe! " delete current buffer, get an empty one
ithis is another test line:w >>test.out
: " append an extra line to the output file
:qa!
ENDTEST
start of test file Xxx
vim: set noai :
this is a test
this is a test
this is a test
this is a test
end of test file Xxx

View File

@ -1,9 +0,0 @@
start of test file Xxx
vim: set noai :
this is a test
this is a test
this is a test
this is a test
this is some more text
end of test file Xxx
this is another test line

View File

@ -1,36 +0,0 @@
Tests for ":highlight". vim: set ft=vim :
STARTTEST
:so small.vim
:" basic test if ":highlight" doesn't crash
:highlight
:hi Search
:" test setting colors.
:" test clearing one color and all doesn't generate error or warning
:hi NewGroup term=bold cterm=italic ctermfg=DarkBlue ctermbg=Grey gui= guifg=#00ff00 guibg=Cyan
:hi Group2 term= cterm=
:hi Group3 term=underline cterm=bold
:redir! >test.out
:hi NewGroup
:hi Group2
:hi Group3
:hi clear NewGroup
:hi NewGroup
:hi Group2
:hi Group2 NONE
:hi Group2
:hi clear
:hi Group3
:hi Crash term='asdf
:redir END
:" filter ctermfg and ctermbg, the numbers depend on the terminal
:e test.out
:%s/ctermfg=\d*/ctermfg=2/
:%s/ctermbg=\d*/ctermbg=3/
:" filter out possibly translated error message
:%s/E475: [^:]*:/E475:/
:" fix the fileformat
:set ff&
:wq!
ENDTEST

View File

@ -1,20 +0,0 @@
NewGroup xxx term=bold cterm=italic ctermfg=2 ctermbg=3
Group2 xxx cleared
Group3 xxx term=underline cterm=bold
NewGroup xxx cleared
Group2 xxx cleared
Group2 xxx cleared
Group3 xxx cleared
E475: term='asdf

View File

@ -1,33 +0,0 @@
Test for visual block shift and tab characters.
STARTTEST
:so small.vim
/^one
fe4jRugvr1:'<,'>w! test.out
/^abcdefgh
4jI j<<11|D
7|a 
7|a 
7|a 4k13|4j<
:$-5,$w >> test.out
:$-4,$s/\s\+//g
4kI j<<
7|a 
7|a 
7|a 4k13|4j3<
:$-4,$w >> test.out
:qa!
ENDTEST
one two three
one two three
one two three
one two three
one two three
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

View File

@ -1,16 +0,0 @@
on1 two three
on1 two three
on1 two three
on1 two three
on1 two three
abcdefghijklmnopqrstuvwxyz
abcdefghij
abc defghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghij
abc defghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz

View File

@ -1,33 +0,0 @@
Test that groups and patterns are tested correctly when calling exists() for
autocommands.
STARTTEST
:so small.vim
:let results=[]
:augroup auexists
:augroup END
:call add(results, "##BufEnter: " . exists("##BufEnter"))
:call add(results, "#BufEnter: " . exists("#BufEnter"))
:au BufEnter * let g:entered=1
:call add(results, "#BufEnter: " . exists("#BufEnter"))
:call add(results, "#auexists#BufEnter: " . exists("#auexists#BufEnter"))
:augroup auexists
:au BufEnter * let g:entered=1
:augroup END
:call add(results, "#auexists#BufEnter: " . exists("#auexists#BufEnter"))
:call add(results, "#BufEnter#*.test: " . exists("#BufEnter#*.test"))
:au BufEnter *.test let g:entered=1
:call add(results, "#BufEnter#*.test: " . exists("#BufEnter#*.test"))
:edit testfile.test
:call add(results, "#BufEnter#<buffer>: " . exists("#BufEnter#<buffer>"))
:au BufEnter <buffer> let g:entered=1
:call add(results, "#BufEnter#<buffer>: " . exists("#BufEnter#<buffer>"))
:edit testfile2.test
:call add(results, "#BufEnter#<buffer>: " . exists("#BufEnter#<buffer>"))
:e test.out
:call append(0, results)
:$d
:w
:qa!
ENDTEST

View File

@ -1,10 +0,0 @@
##BufEnter: 1
#BufEnter: 0
#BufEnter: 1
#auexists#BufEnter: 0
#auexists#BufEnter: 1
#BufEnter#*.test: 0
#BufEnter#*.test: 1
#BufEnter#<buffer>: 0
#BufEnter#<buffer>: 1
#BufEnter#<buffer>: 0

View File

@ -1,41 +0,0 @@
Tests for maparg().
Also test utf8 map with a 0x80 byte.
STARTTEST
:so small.vim
:so mbyte.vim
:set cpo-=<
:set encoding=utf8
:" Test maparg() with a string result
:map foo<C-V> is<F4>foo
:vnoremap <script> <buffer> <expr> <silent> bar isbar
:call append('$', maparg('foo<C-V>'))
:call append('$', string(maparg('foo<C-V>', '', 0, 1)))
:call append('$', string(maparg('bar', '', 0, 1)))
:map <buffer> <nowait> foo bar
:call append('$', string(maparg('foo', '', 0, 1)))
:"
:map abc x<char-114>x
:call append('$', maparg('abc'))
:map abc y<S-char-114>y
:call append('$', maparg('abc'))
:"
Go:"
:" Outside of the range, minimum
:inoremap <Char-0x1040> a
:execute "normal a\u1040\<Esc>"
:" Inside of the range, minimum
:inoremap <Char-0x103f> b
:execute "normal a\u103f\<Esc>"
:" Inside of the range, maximum
:inoremap <Char-0xf03f> c
:execute "normal a\uf03f\<Esc>"
:" Outside of the range, maximum
:inoremap <Char-0xf040> d
:execute "normal a\uf040\<Esc>"
:"
:/^eof/+1,$w! test.out
:qa!
ENDTEST
eof

View File

@ -1,7 +0,0 @@
is<F4>foo
{'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'nowait': 0, 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
{'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'nowait': 0, 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
{'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ', 'nowait': 1, 'expr': 0, 'sid': 0, 'rhs': 'bar', 'buffer': 1}
xrx
yRy
abcd

View File

@ -182,6 +182,16 @@ local function execute(...)
end
end
local function source(code)
local tmpname = os.tmpname()
local tmpfile = io.open(tmpname, "w")
tmpfile:write(code)
tmpfile:flush()
tmpfile:close()
nvim_command('source '..tmpname)
os.remove(tmpname)
end
local function eq(expected, actual)
return assert.are.same(expected, actual)
end
@ -247,6 +257,7 @@ clear()
return {
clear = clear,
dedent = dedent,
source = source,
rawfeed = rawfeed,
insert = insert,
feed = feed,

View File

@ -0,0 +1,71 @@
-- Test for autocommand that deletes the current buffer on BufLeave event.
-- Also test deleting the last buffer, should give a new, empty buffer.
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe('test5', function()
setup(clear)
it('is working', function()
insert([[
start of test file Xxx
vim: set noai :
this is a test
this is a test
this is a test
this is a test
end of test file Xxx]])
execute('w! Xxx0')
execute('au BufLeave Xxx bwipe')
execute('/start of')
-- Write test file Xxx.
execute('.,/end of/w! Xxx')
-- Split to Xxx.
execute('sp Xxx')
-- Delete buffer Xxx, now we're back here.
execute('bwipe')
feed('G?this is a<cr>')
feed('othis is some more text<esc>')
-- Append some text to this file.
-- Write current file contents.
execute('?start?,$yank A')
-- Delete alternate buffer.
execute('bwipe test.out')
execute('au bufleave test5.in bwipe')
-- Delete current buffer, get an empty one.
execute('bwipe!')
feed('ithis is another test line<esc>:yank A<cr>')
-- Output results
execute('%d')
execute('0put a')
execute('1d | $d')
-- Assert buffer contents.
expect([[
start of test file Xxx
vim: set noai :
this is a test
this is a test
this is a test
this is a test
this is some more text
end of test file Xxx
this is another test line]])
end)
teardown(function()
os.remove('Xxx')
os.remove('Xxx0')
end)
end)

View File

@ -0,0 +1,50 @@
-- Test for jumping to a tag with 'hidden' set, with symbolic link in path of tag.
-- This only works for Unix, because of the symbolic link.
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe('jump to a tag with hidden set', function()
setup(clear)
it('is working', function()
insert([[
tags line:
SECTION_OFF /test25.dir/Xxx /^#define SECTION_OFF 3$/
/*tx.c*/
#define SECTION_OFF 3
#define NUM_SECTIONS 3
SECTION_OFF]])
execute('w! Xxx')
execute('set hidden')
-- Create a link from test25.dir to the current directory.
execute('!rm -f test25.dir')
execute('!ln -s . test25.dir')
-- Create tags.text, with the current directory name inserted.
execute('/tags line')
execute('r !pwd')
feed('d$/test<cr>')
feed('hP:.w! tags.test<cr>')
-- Try jumping to a tag in the current file, but with a path that contains a
-- symbolic link. When wrong, this will give the ATTENTION message. The next
-- space will then be eaten by hit-return, instead of moving the cursor to 'd'.
execute('set tags=tags.test')
feed('G<C-]> x:yank a<cr>')
execute('!rm -f Xxx test25.dir tags.test')
-- Put @a and remove empty line
execute('%d')
execute('0put a')
execute('$d')
-- Assert buffer contents.
expect("#efine SECTION_OFF 3")
end)
end)

View File

@ -0,0 +1,66 @@
-- Test for :execute, :while and :if
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
local source = helpers.source
describe(':execute, :while and :if', function()
setup(clear)
it('is working', function()
source([[
let i = 0
while i < 12
let i = i + 1
if has("ebcdic")
execute "normal o" . i . "\047"
else
execute "normal o" . i . "\033"
endif
if i % 2
normal Ax
if i == 9
break
endif
if i == 5
continue
else
let j = 9
while j > 0
if has("ebcdic")
execute "normal" j . "a" . j . "\x27"
else
execute "normal" j . "a" . j . "\x1b"
endif
let j = j - 1
endwhile
endif
endif
if i == 9
if has("ebcdic")
execute "normal Az\047"
else
execute "normal Az\033"
endif
endif
endwhile
unlet i j
]])
-- Remove empty line
execute('1d')
-- Assert buffer contents.
expect([[
1x999999999888888887777777666666555554444333221
2
3x999999999888888887777777666666555554444333221
4
5x
6
7x999999999888888887777777666666555554444333221
8
9x]])
end)
end)

View File

@ -0,0 +1,73 @@
-- vim: set foldmethod=marker foldmarker=[[,]] :
-- Test for 'lisp'
-- If the lisp feature is not enabled, this will fail!
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe('lisp indent', function()
setup(clear)
it('is working', function()
insert([[
(defun html-file (base)
(format nil "~(~A~).html" base))
(defmacro page (name title &rest body)
(let ((ti (gensym)))
`(with-open-file (*standard-output*
(html-file ,name)
:direction :output
:if-exists :supersede)
(let ((,ti ,title))
(as title ,ti)
(with center
(as h2 (string-upcase ,ti)))
(brs 3)
,@body))))
;;; Utilities for generating links
(defmacro with-link (dest &rest body)
`(progn
(format t "<a href=\"~A\">" (html-file ,dest))
,@body
(princ "</a>")))]])
execute('set lisp expandtab')
execute('/^(defun')
feed('=G:/^(defun/,$yank A<cr>')
-- Put @a and clean empty line
execute('%d')
execute('0put a')
execute('$d')
-- Assert buffer contents.
expect([[
(defun html-file (base)
(format nil "~(~A~).html" base))
(defmacro page (name title &rest body)
(let ((ti (gensym)))
`(with-open-file (*standard-output*
(html-file ,name)
:direction :output
:if-exists :supersede)
(let ((,ti ,title))
(as title ,ti)
(with center
(as h2 (string-upcase ,ti)))
(brs 3)
,@body))))
;;; Utilities for generating links
(defmacro with-link (dest &rest body)
`(progn
(format t "<a href=\"~A\">" (html-file ,dest))
,@body
(princ "</a>")))]])
end)
end)

View File

@ -0,0 +1,61 @@
-- vim: set foldmethod=marker foldmarker=[[,]] :
-- Tests for regexp with various magic settings.
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe('regexp with magic settings', function()
setup(clear)
it('is working', function()
insert([[
1 a aa abb abbccc
2 d dd dee deefff
3 g gg ghh ghhiii
4 j jj jkk jkklll
5 m mm mnn mnnooo
6 x ^aa$ x
7 (a)(b) abbaa
8 axx [ab]xx
9 foobar
]])
execute('set nocompatible viminfo+=nviminfo')
execute('/^1')
execute([[/a*b\{2}c\+/e]])
feed([[x/\Md\*e\{2}f\+/e<cr>]])
feed('x:set nomagic<cr>')
execute([[/g\*h\{2}i\+/e]])
feed([[x/\mj*k\{2}l\+/e<cr>]])
feed([[x/\vm*n{2}o+/e<cr>]])
feed([[x/\V^aa$<cr>]])
feed('x:set magic<cr>')
execute([[/\v(a)(b)\2\1\1/e]])
feed([[x/\V[ab]\(\[xy]\)\1<cr>]])
feed('x:$<cr>')
execute('set undolevels=100')
feed('dv?bar?<cr>')
feed('Yup:<cr>')
execute('?^1?,$yank A')
-- Put @a and clean empty line
execute('%d')
execute('0put a')
execute('$d')
-- Assert buffer contents.
expect([[
1 a aa abb abbcc
2 d dd dee deeff
3 g gg ghh ghhii
4 j jj jkk jkkll
5 m mm mnn mnnoo
6 x aa$ x
7 (a)(b) abba
8 axx ab]xx
9 foobar
9 foo
]])
end)
end)

View File

@ -0,0 +1,70 @@
-- vim: set foldmethod=marker foldmarker=[[,]] :
-- Tests for ":highlight".
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe(':highlight', function()
setup(clear)
it('is working', function()
-- Basic test if ":highlight" doesn't crash
execute('highlight')
execute('hi Search')
-- Test setting colors.
-- Test clearing one color and all doesn't generate error or warning
execute('hi NewGroup term=bold cterm=italic ctermfg=DarkBlue ctermbg=Grey gui= guifg=#00ff00 guibg=Cyan')
execute('hi Group2 term= cterm=')
execute('hi Group3 term=underline cterm=bold')
execute('redir! @a')
execute('hi NewGroup')
execute('hi Group2')
execute('hi Group3')
execute('hi clear NewGroup')
execute('hi NewGroup')
execute('hi Group2')
execute('hi Group2 NONE')
execute('hi Group2')
execute('hi clear')
execute('hi Group3')
execute([[hi Crash term='asdf]])
execute('redir END')
-- Filter ctermfg and ctermbg, the numbers depend on the terminal
execute('0put a')
execute([[%s/ctermfg=\d*/ctermfg=2/]])
execute([[%s/ctermbg=\d*/ctermbg=3/]])
-- Filter out possibly translated error message
execute('%s/E475: [^:]*:/E475:/')
-- Fix the fileformat
execute('set ff&')
execute('$d')
-- Assert buffer contents.
expect([[
NewGroup xxx term=bold cterm=italic ctermfg=2 ctermbg=3
Group2 xxx cleared
Group3 xxx term=underline cterm=bold
NewGroup xxx cleared
Group2 xxx cleared
Group2 xxx cleared
Group3 xxx cleared
E475: term='asdf]])
end)
end)

View File

@ -0,0 +1,64 @@
-- vim: set foldmethod=marker foldmarker=[[,]] :
-- Test for visual block shift and tab characters.
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe('visual block shift and tab characters', function()
setup(clear)
it('is working', function()
insert([[
one two three
one two three
one two three
one two three
one two three
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz]])
feed('gg')
feed([[fe<C-v>4jR<esc>ugvr1:'<,'>yank A<cr>]])
execute('/^abcdefgh')
feed('<C-v>4jI <esc>j<<11|D')
feed('j7|a <esc>')
feed('j7|a <esc>')
feed('j7|a <esc>4k13|<C-v>4j<')
execute('$-5,$yank A')
execute([[$-4,$s/\s\+//g]])
feed('<C-v>4kI <esc>j<<')
feed('j7|a <esc>')
feed('j7|a <esc>')
feed('j7|a <esc>4k13|<C-v>4j3<')
execute('$-4,$yank A')
-- Put @a and clean empty lines
execute('%d')
execute('0put a')
execute('$d')
-- Assert buffer contents.
expect([[
on1 two three
on1 two three
on1 two three
on1 two three
on1 two three
abcdefghijklmnopqrstuvwxyz
abcdefghij
abc defghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghij
abc defghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz
abc defghijklmnopqrstuvwxyz]])
end)
end)

View File

@ -0,0 +1,46 @@
-- Test that groups and patterns are tested correctly when calling exists() for
-- autocommands.
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe('augroup when calling exists()', function()
setup(clear)
it('is working', function()
execute('let results=[]')
execute('call add(results, "##BufEnter: " . exists("##BufEnter"))')
execute('call add(results, "#BufEnter: " . exists("#BufEnter"))')
execute('au BufEnter * let g:entered=1')
execute('call add(results, "#BufEnter: " . exists("#BufEnter"))')
execute('call add(results, "#auexists#BufEnter: " . exists("#auexists#BufEnter"))')
execute('augroup auexists', 'au BufEnter * let g:entered=1', 'augroup END')
execute('call add(results, "#auexists#BufEnter: " . exists("#auexists#BufEnter"))')
execute('call add(results, "#BufEnter#*.test: " . exists("#BufEnter#*.test"))')
execute('au BufEnter *.test let g:entered=1')
execute('call add(results, "#BufEnter#*.test: " . exists("#BufEnter#*.test"))')
execute('edit testfile.test')
execute('call add(results, "#BufEnter#<buffer>: " . exists("#BufEnter#<buffer>"))')
execute('au BufEnter <buffer> let g:entered=1')
execute('call add(results, "#BufEnter#<buffer>: " . exists("#BufEnter#<buffer>"))')
execute('edit testfile2.test')
execute('call add(results, "#BufEnter#<buffer>: " . exists("#BufEnter#<buffer>"))')
execute('bf')
execute('call append(0, results)')
execute('$d')
-- Assert buffer contents.
expect([[
##BufEnter: 1
#BufEnter: 0
#BufEnter: 1
#auexists#BufEnter: 0
#auexists#BufEnter: 1
#BufEnter#*.test: 0
#BufEnter#*.test: 1
#BufEnter#<buffer>: 0
#BufEnter#<buffer>: 1
#BufEnter#<buffer>: 0]])
end)
end)

View File

@ -0,0 +1,58 @@
-- Tests for maparg().
-- Also test utf8 map with a 0x80 byte.
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe('maparg()', function()
setup(clear)
it('is working', function()
execute('set cpo-=<')
execute('set encoding=utf8')
-- Test maparg() with a string result
execute('map foo<C-V> is<F4>foo')
execute('vnoremap <script> <buffer> <expr> <silent> bar isbar')
execute([[call append('$', maparg('foo<C-V>'))]])
execute([[call append('$', string(maparg('foo<C-V>', '', 0, 1)))]])
execute([[call append('$', string(maparg('bar', '', 0, 1)))]])
execute('map <buffer> <nowait> foo bar')
execute([[call append('$', string(maparg('foo', '', 0, 1)))]])
execute('map abc x<char-114>x')
execute([[call append('$', maparg('abc'))]])
execute('map abc y<S-char-114>y')
execute([[call append('$', maparg('abc'))]])
feed('Go<esc>:<cr>')
-- Outside of the range, minimum
execute('inoremap <Char-0x1040> a')
execute([[execute "normal a\u1040\<Esc>"]])
-- Inside of the range, minimum
execute('inoremap <Char-0x103f> b')
execute([[execute "normal a\u103f\<Esc>"]])
-- Inside of the range, maximum
execute('inoremap <Char-0xf03f> c')
execute([[execute "normal a\uf03f\<Esc>"]])
-- Outside of the range, maximum
execute('inoremap <Char-0xf040> d')
execute([[execute "normal a\uf040\<Esc>"]])
-- Remove empty line
execute('1d')
-- Assert buffer contents.
expect([[
is<F4>foo
{'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'nowait': 0, 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
{'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'nowait': 0, 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
{'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ', 'nowait': 1, 'expr': 0, 'sid': 0, 'rhs': 'bar', 'buffer': 1}
xrx
yRy
abcd]])
end)
end)

View File

@ -0,0 +1,62 @@
-- Test for v:hlsearch
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe('v:hlsearch', function()
setup(clear)
it('is working', function()
-- Last abc: Q
execute('new')
execute([[call setline(1, repeat(['aaa'], 10))]])
execute('set hlsearch nolazyredraw')
execute('let r=[]')
execute('command -nargs=0 -bar AddR :call add(r, [screenattr(1, 1), v:hlsearch])')
execute('/aaa')
execute('AddR')
execute('nohlsearch')
execute('AddR')
execute('let v:hlsearch=1')
execute('AddR')
execute('let v:hlsearch=0')
execute('AddR')
execute('set hlsearch')
execute('AddR')
execute('let v:hlsearch=0')
execute('AddR')
feed('n:AddR<cr>')
execute('let v:hlsearch=0')
execute('AddR')
execute('/')
execute('AddR')
execute('let r1=r[0][0]')
-- I guess it is not guaranteed that screenattr outputs always the same character
execute([[call map(r, 'v:val[1].":".(v:val[0]==r1?"highlighted":"not highlighted")')]])
execute('try')
execute(' let v:hlsearch=[]')
execute('catch')
execute([[ call add(r, matchstr(v:exception,'^Vim(let):E\d\+:'))]])
execute('endtry')
execute('bwipeout!')
execute('$put=r')
execute('call garbagecollect(1)')
execute('call getchar()')
execute('1d')
-- Assert buffer contents.
expect([[
1:highlighted
0:not highlighted
1:highlighted
0:not highlighted
1:highlighted
0:not highlighted
1:highlighted
0:not highlighted
1:highlighted
Vim(let):E706:]])
end)
end)

View File

@ -0,0 +1,54 @@
-- Tests for :let.
local helpers = require('test.functional.helpers')
local clear, source = helpers.clear, helpers.source
local execute, expect = helpers.execute, helpers.expect
describe(':let', function()
setup(clear)
it('is working', function()
execute('set runtimepath+=test/functional/fixtures')
-- Test to not autoload when assigning. It causes internal error.
source([[
try
let Test104#numvar = function('tr')
$put ='OK: ' . string(Test104#numvar)
catch
$put ='FAIL: ' . v:exception
endtry
let a = 1
let b = 2
for letargs in ['a b', '{0 == 1 ? "a" : "b"}', '{0 == 1 ? "a" : "b"} a', 'a {0 == 1 ? "a" : "b"}']
try
redir => messages
execute 'let' letargs
redir END
$put ='OK:'
$put =split(substitute(messages, '\n', '\0 ', 'g'), '\n')
catch
$put ='FAIL: ' . v:exception
redir END
endtry
endfor]])
-- Remove empty line
execute('1d')
-- Assert buffer contents.
expect([[
OK: function('tr')
OK:
a #1
b #2
OK:
b #2
OK:
b #2
a #1
OK:
a #1
b #2]])
end)
end)

View File

@ -0,0 +1,79 @@
-- Test filename modifiers.
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect = helpers.execute, helpers.expect
describe('filename modifiers', function()
setup(clear)
it('is working', function()
execute('cd /tmp')
execute([=[set shell=sh]=])
execute([=[set shellslash]=])
execute([=[let tab="\t"]=])
execute([=[command -nargs=1 Put :let expr=<q-args> | $put =expr.tab.strtrans(string(eval(expr)))]=])
execute([=[let $HOME=fnamemodify('.', ':p:h:h:h')]=])
execute([=[Put fnamemodify('.', ':p' )[-1:]]=])
execute([=[Put fnamemodify('.', ':p:h' )[-1:]]=])
execute([=[Put fnamemodify('test.out', ':p' )[-1:]]=])
execute([=[Put fnamemodify('test.out', ':.' )]=])
execute([=[Put fnamemodify('../testdir/a', ':.' )]=])
execute([=[Put fnamemodify('test.out', ':~' )]=])
execute([=[Put fnamemodify('../testdir/a', ':~' )]=])
execute([=[Put fnamemodify('../testdir/a', ':t' )]=])
execute([=[Put fnamemodify('.', ':p:t' )]=])
execute([=[Put fnamemodify('test.out', ':p:t' )]=])
execute([=[Put fnamemodify('test.out', ':p:e' )]=])
execute([=[Put fnamemodify('test.out', ':p:t:e' )]=])
execute([=[Put fnamemodify('abc.fb2.tar.gz', ':r' )]=])
execute([=[Put fnamemodify('abc.fb2.tar.gz', ':r:r' )]=])
execute([=[Put fnamemodify('abc.fb2.tar.gz', ':r:r:r' )]=])
execute([=[Put substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(nvim/testdir/.*\)', '\1', '')]=])
execute([=[Put fnamemodify('abc.fb2.tar.gz', ':e' )]=])
execute([=[Put fnamemodify('abc.fb2.tar.gz', ':e:e' )]=])
execute([=[Put fnamemodify('abc.fb2.tar.gz', ':e:e:e' )]=])
execute([=[Put fnamemodify('abc.fb2.tar.gz', ':e:e:e:e')]=])
execute([=[Put fnamemodify('abc.fb2.tar.gz', ':e:e:r' )]=])
execute([=[Put fnamemodify('abc def', ':S' )]=])
execute([=[Put fnamemodify('abc" "def', ':S' )]=])
execute([=[Put fnamemodify('abc"%"def', ':S' )]=])
execute([=[Put fnamemodify('abc'' ''def', ':S' )]=])
execute([=[Put fnamemodify('abc''%''def', ':S' )]=])
execute([=[Put fnamemodify("abc\ndef", ':S' )]=])
execute([=[set shell=tcsh]=])
execute([=[Put fnamemodify("abc\ndef", ':S' )]=])
execute([=[1 delete _]=])
-- Assert buffer contents.
expect([=[
fnamemodify('.', ':p' )[-1:] '/'
fnamemodify('.', ':p:h' )[-1:] 'p'
fnamemodify('test.out', ':p' )[-1:] 't'
fnamemodify('test.out', ':.' ) 'test.out'
fnamemodify('../testdir/a', ':.' ) '../testdir/a'
fnamemodify('test.out', ':~' ) 'test.out'
fnamemodify('../testdir/a', ':~' ) '../testdir/a'
fnamemodify('../testdir/a', ':t' ) 'a'
fnamemodify('.', ':p:t' ) ''
fnamemodify('test.out', ':p:t' ) 'test.out'
fnamemodify('test.out', ':p:e' ) 'out'
fnamemodify('test.out', ':p:t:e' ) 'out'
fnamemodify('abc.fb2.tar.gz', ':r' ) 'abc.fb2.tar'
fnamemodify('abc.fb2.tar.gz', ':r:r' ) 'abc.fb2'
fnamemodify('abc.fb2.tar.gz', ':r:r:r' ) 'abc'
substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(nvim/testdir/.*\)', '\1', '') '/tmp/abc.fb2'
fnamemodify('abc.fb2.tar.gz', ':e' ) 'gz'
fnamemodify('abc.fb2.tar.gz', ':e:e' ) 'tar.gz'
fnamemodify('abc.fb2.tar.gz', ':e:e:e' ) 'fb2.tar.gz'
fnamemodify('abc.fb2.tar.gz', ':e:e:e:e') 'fb2.tar.gz'
fnamemodify('abc.fb2.tar.gz', ':e:e:r' ) 'tar'
fnamemodify('abc def', ':S' ) '''abc def'''
fnamemodify('abc" "def', ':S' ) '''abc" "def'''
fnamemodify('abc"%"def', ':S' ) '''abc"%"def'''
fnamemodify('abc'' ''def', ':S' ) '''abc''\'''' ''\''''def'''
fnamemodify('abc''%''def', ':S' ) '''abc''\''''%''\''''def'''
fnamemodify("abc\ndef", ':S' ) '''abc^@def'''
fnamemodify("abc\ndef", ':S' ) '''abc\^@def''']=])
end)
end)