aboutsummaryrefslogtreecommitdiff
path: root/test/functional/legacy
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/legacy')
-rw-r--r--test/functional/legacy/005_bufleave_delete_buffer.lua71
-rw-r--r--test/functional/legacy/025_jump_tag_hidden_spec.lua50
-rw-r--r--test/functional/legacy/026_execute_while_if_spec.lua66
-rw-r--r--test/functional/legacy/033_lisp_indent_spec.lua73
-rw-r--r--test/functional/legacy/043_magic_settings_spec.lua61
-rw-r--r--test/functional/legacy/051_highlight_spec.lua70
-rw-r--r--test/functional/legacy/066_visual_block_tab_spec.lua64
-rw-r--r--test/functional/legacy/067_augroup_exists_spec.lua46
-rw-r--r--test/functional/legacy/075_maparg_spec.lua58
-rw-r--r--test/functional/legacy/101_hlsearch_spec.lua62
-rw-r--r--test/functional/legacy/104_let_assignment.lua54
-rw-r--r--test/functional/legacy/105_filename_modifiers_spec.lua79
12 files changed, 754 insertions, 0 deletions
diff --git a/test/functional/legacy/005_bufleave_delete_buffer.lua b/test/functional/legacy/005_bufleave_delete_buffer.lua
new file mode 100644
index 0000000000..e8459ad4a7
--- /dev/null
+++ b/test/functional/legacy/005_bufleave_delete_buffer.lua
@@ -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)
diff --git a/test/functional/legacy/025_jump_tag_hidden_spec.lua b/test/functional/legacy/025_jump_tag_hidden_spec.lua
new file mode 100644
index 0000000000..bd434c013c
--- /dev/null
+++ b/test/functional/legacy/025_jump_tag_hidden_spec.lua
@@ -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)
diff --git a/test/functional/legacy/026_execute_while_if_spec.lua b/test/functional/legacy/026_execute_while_if_spec.lua
new file mode 100644
index 0000000000..9acbf76673
--- /dev/null
+++ b/test/functional/legacy/026_execute_while_if_spec.lua
@@ -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)
diff --git a/test/functional/legacy/033_lisp_indent_spec.lua b/test/functional/legacy/033_lisp_indent_spec.lua
new file mode 100644
index 0000000000..3ee248815d
--- /dev/null
+++ b/test/functional/legacy/033_lisp_indent_spec.lua
@@ -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)
diff --git a/test/functional/legacy/043_magic_settings_spec.lua b/test/functional/legacy/043_magic_settings_spec.lua
new file mode 100644
index 0000000000..ccef298cdd
--- /dev/null
+++ b/test/functional/legacy/043_magic_settings_spec.lua
@@ -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)
diff --git a/test/functional/legacy/051_highlight_spec.lua b/test/functional/legacy/051_highlight_spec.lua
new file mode 100644
index 0000000000..f35b70f93f
--- /dev/null
+++ b/test/functional/legacy/051_highlight_spec.lua
@@ -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)
diff --git a/test/functional/legacy/066_visual_block_tab_spec.lua b/test/functional/legacy/066_visual_block_tab_spec.lua
new file mode 100644
index 0000000000..cd283e6746
--- /dev/null
+++ b/test/functional/legacy/066_visual_block_tab_spec.lua
@@ -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)
diff --git a/test/functional/legacy/067_augroup_exists_spec.lua b/test/functional/legacy/067_augroup_exists_spec.lua
new file mode 100644
index 0000000000..6d89ad6d55
--- /dev/null
+++ b/test/functional/legacy/067_augroup_exists_spec.lua
@@ -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)
diff --git a/test/functional/legacy/075_maparg_spec.lua b/test/functional/legacy/075_maparg_spec.lua
new file mode 100644
index 0000000000..dac8940314
--- /dev/null
+++ b/test/functional/legacy/075_maparg_spec.lua
@@ -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)
diff --git a/test/functional/legacy/101_hlsearch_spec.lua b/test/functional/legacy/101_hlsearch_spec.lua
new file mode 100644
index 0000000000..4a3abb19ce
--- /dev/null
+++ b/test/functional/legacy/101_hlsearch_spec.lua
@@ -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)
diff --git a/test/functional/legacy/104_let_assignment.lua b/test/functional/legacy/104_let_assignment.lua
new file mode 100644
index 0000000000..a2431da835
--- /dev/null
+++ b/test/functional/legacy/104_let_assignment.lua
@@ -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)
diff --git a/test/functional/legacy/105_filename_modifiers_spec.lua b/test/functional/legacy/105_filename_modifiers_spec.lua
new file mode 100644
index 0000000000..32fa6ac7eb
--- /dev/null
+++ b/test/functional/legacy/105_filename_modifiers_spec.lua
@@ -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)