From 38d98bba6808fcdd97717d1ce0d4df3589cb9ff7 Mon Sep 17 00:00:00 2001 From: Lucas Hoffmann Date: Wed, 8 Jun 2016 06:25:53 +0200 Subject: tests: Migrate legacy test 34. (#2849) --- test/functional/legacy/034_user_function_spec.lua | 102 ++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 test/functional/legacy/034_user_function_spec.lua (limited to 'test/functional/legacy/034_user_function_spec.lua') diff --git a/test/functional/legacy/034_user_function_spec.lua b/test/functional/legacy/034_user_function_spec.lua new file mode 100644 index 0000000000..f1337584f0 --- /dev/null +++ b/test/functional/legacy/034_user_function_spec.lua @@ -0,0 +1,102 @@ +-- Test for user functions. +-- Also test an mapping calling a function. +-- Also test that a builtin function cannot be replaced. +-- Also test for regression when calling arbitrary expression. + +local helpers = require('test.functional.helpers') +local feed, insert, source = helpers.feed, helpers.insert, helpers.source +local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect + +describe('user functions, expr-mappings, overwrite protected builtin functions and regression on calling expressions', function() + setup(clear) + + it('are working', function() + insert('here') + + source([[ + function Table(title, ...) + let ret = a:title + let idx = 1 + while idx <= a:0 + exe "let ret = ret . a:" . idx + let idx = idx + 1 + endwhile + return ret + endfunction + function Compute(n1, n2, divname) + if a:n2 == 0 + return "fail" + endif + exe "let g:" . a:divname . " = ". a:n1 / a:n2 + return "ok" + endfunction + func Expr1() + normal! v + return "111" + endfunc + func Expr2() + call search('XX', 'b') + return "222" + endfunc + func ListItem() + let g:counter += 1 + return g:counter . '. ' + endfunc + func ListReset() + let g:counter = 0 + return '' + endfunc + func FuncWithRef(a) + unlet g:FuncRef + return a:a + endfunc + let g:FuncRef=function("FuncWithRef") + let counter = 0 + inoremap ( ListItem() + inoremap [ ListReset() + imap + Expr1() + imap * Expr2() + let retval = "nop" + /^here + ]]) + feed('C=Table("xxx", 4, "asdf")') + -- Using a actual space will not work as feed() calls dedent on the input. + feed('=Compute(45, 0, "retval")') + feed('=retval') + feed('=Compute(45, 5, "retval")') + feed('=retval') + feed('=g:FuncRef(333)') + feed('') + feed('XX+-XX') + feed('---*---') + feed('(one') + feed('(two') + feed('[(one again') + execute('call append(line("$"), max([1, 2, 3]))') + execute('call extend(g:, {"max": function("min")})') + execute('call append(line("$"), max([1, 2, 3]))') + execute('try') + -- Regression: the first line below used to throw "E110: Missing ')'" + -- Second is here just to prove that this line is correct when not + -- skipping rhs of &&. + execute([[ $put =(0&&(function('tr'))(1, 2, 3))]]) + execute([[ $put =(1&&(function('tr'))(1, 2, 3))]]) + execute('catch') + execute([[ $put ='!!! Unexpected exception:']]) + execute(' $put =v:exception') + execute('endtry') + + -- Assert buffer contents. + expect([[ + xxx4asdf fail nop ok 9 333 + XX111-XX + ---222--- + 1. one + 2. two + 1. one again + 3 + 3 + 0 + 1]]) + end) +end) -- cgit