mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 8.2.3188: Vim9: argument types are not checked at compile time
Problem:    Vim9: argument types are not checked at compile time.
Solution:   Add several more type checks, also at runtime. (Yegappan
            Lakshmanan, closes #8587)
			
			
This commit is contained in:
		
				
					committed by
					
						 Bram Moolenaar
						Bram Moolenaar
					
				
			
			
				
	
			
			
			
						parent
						
							9bb0dad0d8
						
					
				
				
					commit
					83494b4ac6
				
			| @@ -270,18 +270,10 @@ enddef | ||||
| def Test_browse() | ||||
|   CheckFeature browse | ||||
|  | ||||
|   var lines =<< trim END | ||||
|       browse(1, 2, 3, 4) | ||||
|   END | ||||
|   CheckDefExecAndScriptFailure(lines, 'E1174: String required for argument 2') | ||||
|   lines =<< trim END | ||||
|       browse(1, 'title', 3, 4) | ||||
|   END | ||||
|   CheckDefExecAndScriptFailure(lines, 'E1174: String required for argument 3') | ||||
|   lines =<< trim END | ||||
|       browse(1, 'title', 'dir', 4) | ||||
|   END | ||||
|   CheckDefExecAndScriptFailure(lines, 'E1174: String required for argument 4') | ||||
|   CheckDefAndScriptFailure2(['browse(2, "title", "dir", "file")'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['browse(true, 2, "dir", "file")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['browse(true, "title", 3, "file")'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['browse(true, "title", "dir", 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4') | ||||
| enddef | ||||
|  | ||||
| def Test_browsedir() | ||||
| @@ -330,6 +322,8 @@ def Test_bufnr() | ||||
|   buf = bufnr('Xdummy', true) | ||||
|   buf->assert_notequal(-1) | ||||
|   exe 'bwipe! ' .. buf | ||||
|   CheckDefAndScriptFailure2(['bufnr([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['bufnr(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_bufwinid() | ||||
| @@ -379,22 +373,53 @@ enddef | ||||
| def Test_ch_canread() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefFailure(['ch_canread(10)'], 'E1013: Argument 1: type mismatch, expected channel but got number') | ||||
|   endif | ||||
|   CheckDefFailure(['ch_canread(10)'], 'E1013: Argument 1: type mismatch, expected channel but got number') | ||||
| enddef | ||||
|  | ||||
| def Test_ch_close() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefFailure(['ch_close("c")'], 'E1013: Argument 1: type mismatch, expected channel but got string') | ||||
|   endif | ||||
|   CheckDefFailure(['ch_close("c")'], 'E1013: Argument 1: type mismatch, expected channel but got string') | ||||
| enddef | ||||
|  | ||||
| def Test_ch_close_in() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefFailure(['ch_close_in(true)'], 'E1013: Argument 1: type mismatch, expected channel but got bool') | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_ch_evalexpr() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_evalexpr(1, "a")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1218: Channel or Job required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['ch_evalexpr(test_null_channel(), 1, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_ch_evalraw() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_evalraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1218: Channel or Job required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['ch_evalraw(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|     CheckDefAndScriptFailure2(['ch_evalraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_ch_getbufnr() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_getbufnr(1, "a")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1218: Channel or Job required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['ch_getbufnr(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   endif | ||||
|   CheckDefFailure(['ch_close_in(true)'], 'E1013: Argument 1: type mismatch, expected channel but got bool') | ||||
| enddef | ||||
|  | ||||
| def Test_ch_getjob() | ||||
| @@ -410,67 +435,94 @@ enddef | ||||
| def Test_ch_info() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefFailure(['ch_info([1])'], 'E1013: Argument 1: type mismatch, expected channel but got list<number>') | ||||
|   endif | ||||
|   CheckDefFailure(['ch_info([1])'], 'E1013: Argument 1: type mismatch, expected channel but got list<number>') | ||||
| enddef | ||||
|  | ||||
| def Test_ch_logfile() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   endif | ||||
|   assert_fails('ch_logfile(true)', 'E1174:') | ||||
|   assert_fails('ch_logfile("foo", true)', 'E1174:') | ||||
|   else | ||||
|     assert_fails('ch_logfile(true)', 'E1174:') | ||||
|     assert_fails('ch_logfile("foo", true)', 'E1174:') | ||||
|  | ||||
|   CheckDefAndScriptFailure2(['ch_logfile(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['ch_logfile("a", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') | ||||
|     CheckDefAndScriptFailure2(['ch_logfile(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['ch_logfile("a", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_ch_open() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_open({"a": 10}, "a")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['ch_open("a", [1])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') | ||||
|   endif | ||||
|   CheckDefAndScriptFailure2(['ch_open({"a": 10}, "a")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['ch_open("a", [1])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_ch_read() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_read(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|     CheckDefAndScriptFailure2(['ch_read(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required') | ||||
|   endif | ||||
|   CheckDefAndScriptFailure2(['ch_read(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|   CheckDefAndScriptFailure2(['ch_read(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required') | ||||
| enddef | ||||
|  | ||||
| def Test_ch_readblob() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_readblob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|     CheckDefAndScriptFailure2(['ch_readblob(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required') | ||||
|   endif | ||||
|   CheckDefAndScriptFailure2(['ch_readblob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|   CheckDefAndScriptFailure2(['ch_readblob(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required') | ||||
| enddef | ||||
|  | ||||
| def Test_ch_readraw() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_readraw(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|     CheckDefAndScriptFailure2(['ch_readraw(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required') | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_ch_sendexpr() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_sendexpr(1, "a")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1218: Channel or Job required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['ch_sendexpr(test_null_channel(), 1, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_ch_sendraw() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_sendraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1218: Channel or Job required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['ch_sendraw(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|     CheckDefAndScriptFailure2(['ch_sendraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
|   endif | ||||
|   CheckDefAndScriptFailure2(['ch_readraw(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|   CheckDefAndScriptFailure2(['ch_readraw(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required') | ||||
| enddef | ||||
|  | ||||
| def Test_ch_setoptions() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_setoptions(1, {})'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|     CheckDefFailure(['ch_setoptions(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>') | ||||
|   endif | ||||
|   CheckDefAndScriptFailure2(['ch_setoptions(1, {})'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|   CheckDefFailure(['ch_setoptions(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>') | ||||
| enddef | ||||
|  | ||||
| def Test_ch_status() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['ch_status(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|     CheckDefAndScriptFailure2(['ch_status(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required') | ||||
|   endif | ||||
|   CheckDefAndScriptFailure2(['ch_status(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') | ||||
|   CheckDefAndScriptFailure2(['ch_status(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required') | ||||
| enddef | ||||
|  | ||||
| def Test_char2nr() | ||||
| @@ -538,6 +590,15 @@ def Test_col() | ||||
|   bw! | ||||
| enddef | ||||
|  | ||||
| def Test_complete() | ||||
|   CheckDefAndScriptFailure2(['complete("1", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['complete(1, {})'], 'E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_complete_add() | ||||
|   CheckDefAndScriptFailure2(['complete_add([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') | ||||
| enddef | ||||
|  | ||||
| def Test_complete_info() | ||||
|   CheckDefFailure(['complete_info("")'], 'E1013: Argument 1: type mismatch, expected list<string> but got string') | ||||
|   CheckDefFailure(['complete_info({})'], 'E1013: Argument 1: type mismatch, expected list<string> but got dict<unknown>') | ||||
| @@ -576,6 +637,12 @@ enddef | ||||
| def Test_count() | ||||
|   count('ABC ABC ABC', 'b', true)->assert_equal(3) | ||||
|   count('ABC ABC ABC', 'b', false)->assert_equal(0) | ||||
|   CheckDefAndScriptFailure2(['count(10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['count("a", [1], 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['count("a", [1], 0, "b")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') | ||||
|   count([1, 2, 2, 3], 2)->assert_equal(2) | ||||
|   count([1, 2, 2, 3], 2, false, 2)->assert_equal(1) | ||||
|   count({a: 1.1, b: 2.2, c: 1.1}, 1.1)->assert_equal(2) | ||||
| enddef | ||||
|  | ||||
| def Test_cursor() | ||||
| @@ -590,6 +657,9 @@ def Test_cursor() | ||||
|     cursor('2', 1) | ||||
|   END | ||||
|   CheckDefExecAndScriptFailure(lines, 'E1209:') | ||||
|   CheckDefAndScriptFailure2(['cursor(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['cursor(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['cursor(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_debugbreak() | ||||
| @@ -597,6 +667,10 @@ def Test_debugbreak() | ||||
|   CheckDefFailure(['debugbreak("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') | ||||
| enddef | ||||
|  | ||||
| def Test_deepcopy() | ||||
|   CheckDefAndScriptFailure2(['deepcopy({}, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_delete() | ||||
|   var res: bool = delete('doesnotexist') | ||||
|   assert_equal(true, res) | ||||
| @@ -605,6 +679,12 @@ def Test_delete() | ||||
|   CheckDefFailure(['delete("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number') | ||||
| enddef | ||||
|  | ||||
| def Test_deletebufline() | ||||
|   CheckDefAndScriptFailure2(['deletebufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['deletebufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['deletebufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1174: String required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_diff_filler() | ||||
|   CheckDefFailure(['diff_filler([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>') | ||||
|   CheckDefFailure(['diff_filler(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') | ||||
| @@ -670,6 +750,9 @@ def Test_expand() | ||||
|   split SomeFile | ||||
|   expand('%', true, true)->assert_equal(['SomeFile']) | ||||
|   close | ||||
|   CheckDefAndScriptFailure2(['expand(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['expand("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['expand("a", true, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_expandcmd() | ||||
| @@ -858,6 +941,8 @@ def Test_flattennew() | ||||
|       echo flatten([1, 2, 3]) | ||||
|   END | ||||
|   CheckDefAndScriptFailure(lines, 'E1158:') | ||||
|   CheckDefAndScriptFailure2(['flattennew({})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['flattennew([], "1")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
| enddef | ||||
|  | ||||
| " Test for float functions argument type | ||||
| @@ -1033,6 +1118,9 @@ def Test_getbufline() | ||||
|   getbufline(-1, 1, '$')->assert_equal([]) | ||||
|  | ||||
|   bwipe! | ||||
|   CheckDefAndScriptFailure2(['getbufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['getbufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['getbufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1174: String required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_getchangelist() | ||||
| @@ -1062,24 +1150,14 @@ def Test_getcharstr() | ||||
|   CheckDefAndScriptFailure2(['getcharstr("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1135: Using a String as a Bool') | ||||
| enddef | ||||
|  | ||||
| def Test_getenv() | ||||
|   if getenv('does-not_exist') == '' | ||||
|     assert_report('getenv() should return null') | ||||
|   endif | ||||
|   if getenv('does-not_exist') == null | ||||
|   else | ||||
|     assert_report('getenv() should return null') | ||||
|   endif | ||||
|   $SOMEENVVAR = 'some' | ||||
|   assert_equal('some', getenv('SOMEENVVAR')) | ||||
|   unlet $SOMEENVVAR | ||||
| enddef | ||||
|  | ||||
| def Test_getcompletion() | ||||
|   set wildignore=*.vim,*~ | ||||
|   var l = getcompletion('run', 'file', true) | ||||
|   l->assert_equal([]) | ||||
|   set wildignore& | ||||
|   CheckDefAndScriptFailure2(['getcompletion(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['getcompletion("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['getcompletion("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_getcurpos() | ||||
| @@ -1096,6 +1174,19 @@ def Test_getcwd() | ||||
|   CheckDefFailure(['getcwd(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string') | ||||
| enddef | ||||
|  | ||||
| def Test_getenv() | ||||
|   if getenv('does-not_exist') == '' | ||||
|     assert_report('getenv() should return null') | ||||
|   endif | ||||
|   if getenv('does-not_exist') == null | ||||
|   else | ||||
|     assert_report('getenv() should return null') | ||||
|   endif | ||||
|   $SOMEENVVAR = 'some' | ||||
|   assert_equal('some', getenv('SOMEENVVAR')) | ||||
|   unlet $SOMEENVVAR | ||||
| enddef | ||||
|  | ||||
| def Test_getfontname() | ||||
|   CheckDefFailure(['getfontname(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') | ||||
| enddef | ||||
| @@ -1204,6 +1295,9 @@ def Test_getreg() | ||||
|   setreg('a', lines) | ||||
|   getreg('a', true, true)->assert_equal(lines) | ||||
|   assert_fails('getreg("ab")', 'E1162:') | ||||
|   CheckDefAndScriptFailure2(['getreg(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['getreg(".", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['getreg(".", 1, "b")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_getreg_return_type() | ||||
| @@ -1230,6 +1324,17 @@ def Test_gettabinfo() | ||||
|   CheckDefFailure(['gettabinfo("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') | ||||
| enddef | ||||
|  | ||||
| def Test_gettabvar() | ||||
|   CheckDefAndScriptFailure2(['gettabvar("a", "b")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['gettabvar(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_gettabwinvar() | ||||
|   CheckDefAndScriptFailure2(['gettabwinvar("a", 2, "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['gettabwinvar(1, "b", "c", [])'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['gettabwinvar(1, 1, 3, {})'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_gettagstack() | ||||
|   CheckDefFailure(['gettagstack("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') | ||||
| enddef | ||||
| @@ -1247,8 +1352,17 @@ def Test_getwinpos() | ||||
|   CheckDefFailure(['getwinpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') | ||||
| enddef | ||||
|  | ||||
| def Test_getwinvar() | ||||
|   CheckDefAndScriptFailure2(['getwinvar("a", "b")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['getwinvar(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_glob() | ||||
|   glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim']) | ||||
|   CheckDefAndScriptFailure2(['glob(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['glob("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['glob("a", 1, "b")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['glob("a", 1, true, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') | ||||
| enddef | ||||
|  | ||||
| def Test_glob2regpat() | ||||
| @@ -1258,10 +1372,17 @@ enddef | ||||
|  | ||||
| def Test_globpath() | ||||
|   globpath('.', 'runtest.vim', true, true, true)->assert_equal(['./runtest.vim']) | ||||
|   CheckDefAndScriptFailure2(['globpath(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['globpath("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['globpath("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['globpath("a", "b", true, "d")'], 'E1013: Argument 4: type mismatch, expected bool but got string', 'E1212: Bool required for argument 4') | ||||
|   CheckDefAndScriptFailure2(['globpath("a", "b", true, false, "e")'], 'E1013: Argument 5: type mismatch, expected bool but got string', 'E1212: Bool required for argument 5') | ||||
| enddef | ||||
|  | ||||
| def Test_has() | ||||
|   has('eval', true)->assert_equal(1) | ||||
|   CheckDefAndScriptFailure2(['has(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['has("a", "b")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_has_key() | ||||
| @@ -1286,6 +1407,9 @@ def Test_hasmapto() | ||||
|   iabbrev foo foobar | ||||
|   hasmapto('foobar', 'i', true)->assert_equal(1) | ||||
|   iunabbrev foo | ||||
|   CheckDefAndScriptFailure2(['hasmapto(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['hasmapto("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['hasmapto("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_histadd() | ||||
| @@ -1330,6 +1454,9 @@ enddef | ||||
|  | ||||
| def Test_index() | ||||
|   index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3) | ||||
|   CheckDefAndScriptFailure2(['index("a", "a")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['index([1], 1.1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['index(0z1020, [1], 1, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') | ||||
| enddef | ||||
|  | ||||
| def Test_input() | ||||
| @@ -1458,6 +1585,16 @@ def Test_job_info_return_type() | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_job_setoptions() | ||||
|   if !has('job') | ||||
|     CheckFeature job | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['job_setoptions(test_null_channel(), {})'], 'E1013: Argument 1: type mismatch, expected job but got channel', 'E1219: Job required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['job_setoptions(test_null_job(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') | ||||
|     assert_equal('fail', job_status(test_null_job())) | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_job_status() | ||||
|   if !has('job') | ||||
|     CheckFeature job | ||||
| @@ -1467,6 +1604,20 @@ def Test_job_status() | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_job_stop() | ||||
|   if !has('job') | ||||
|     CheckFeature job | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['job_stop("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1219: Job required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['job_stop(test_null_job(), true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') | ||||
|   endif | ||||
| enddef | ||||
|  | ||||
| def Test_join() | ||||
|   CheckDefAndScriptFailure2(['join("abc")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['join([], 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_js_decode() | ||||
|   CheckDefFailure(['js_decode(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') | ||||
|   assert_equal([1, 2], js_decode('[1,2]')) | ||||
| @@ -1512,6 +1663,11 @@ def Test_list2str_str2list_utf8() | ||||
|   list2str(l, true)->assert_equal(s) | ||||
| enddef | ||||
|  | ||||
| def Test_list2str() | ||||
|   CheckDefAndScriptFailure2(['list2str(".", true)'], 'E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['list2str([1], 0z10)'], 'E1013: Argument 2: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def SID(): number | ||||
|   return expand('<SID>') | ||||
|           ->matchstr('<SNR>\zs\d\+\ze_$') | ||||
| @@ -1526,6 +1682,27 @@ def Test_listener_remove() | ||||
|   CheckDefAndScriptFailure2(['listener_remove("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number') | ||||
| enddef | ||||
|  | ||||
| def Test_map_failure() | ||||
|   CheckFeature job | ||||
|  | ||||
|   var lines =<< trim END | ||||
|       vim9script | ||||
|       writefile([], 'Xtmpfile') | ||||
|       silent e Xtmpfile | ||||
|       var d = {[bufnr('%')]: {a: 0}} | ||||
|       au BufReadPost * Func() | ||||
|       def Func() | ||||
|           if d->has_key('') | ||||
|           endif | ||||
|           eval d[expand('<abuf>')]->mapnew((_, v: dict<job>) => 0) | ||||
|       enddef | ||||
|       e | ||||
|   END | ||||
|   CheckScriptFailure(lines, 'E1013:') | ||||
|   au! BufReadPost | ||||
|   delete('Xtmpfile') | ||||
| enddef | ||||
|  | ||||
| def Test_map_function_arg() | ||||
|   var lines =<< trim END | ||||
|       def MapOne(i: number, v: string): string | ||||
| @@ -1591,12 +1768,10 @@ def Test_maparg() | ||||
|         rhs: 'bar', | ||||
|         buffer: 0}) | ||||
|   unmap foo | ||||
| enddef | ||||
|  | ||||
| def Test_mapcheck() | ||||
|   iabbrev foo foobar | ||||
|   mapcheck('foo', 'i', true)->assert_equal('foobar') | ||||
|   iunabbrev foo | ||||
|   CheckDefAndScriptFailure2(['maparg(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['maparg("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['maparg("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['maparg("a", "b", true, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') | ||||
| enddef | ||||
|  | ||||
| def Test_maparg_mapset() | ||||
| @@ -1607,25 +1782,19 @@ def Test_maparg_mapset() | ||||
|   nunmap <F3> | ||||
| enddef | ||||
|  | ||||
| def Test_map_failure() | ||||
|   CheckFeature job | ||||
| def Test_mapcheck() | ||||
|   iabbrev foo foobar | ||||
|   mapcheck('foo', 'i', true)->assert_equal('foobar') | ||||
|   iunabbrev foo | ||||
|   CheckDefAndScriptFailure2(['mapcheck(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['mapcheck("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['mapcheck("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') | ||||
| enddef | ||||
|  | ||||
|   var lines =<< trim END | ||||
|       vim9script | ||||
|       writefile([], 'Xtmpfile') | ||||
|       silent e Xtmpfile | ||||
|       var d = {[bufnr('%')]: {a: 0}} | ||||
|       au BufReadPost * Func() | ||||
|       def Func() | ||||
|           if d->has_key('') | ||||
|           endif | ||||
|           eval d[expand('<abuf>')]->mapnew((_, v: dict<job>) => 0) | ||||
|       enddef | ||||
|       e | ||||
|   END | ||||
|   CheckScriptFailure(lines, 'E1013:') | ||||
|   au! BufReadPost | ||||
|   delete('Xtmpfile') | ||||
| def Test_mapset() | ||||
|   CheckDefAndScriptFailure2(['mapset(1, true, {})'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['mapset("a", 2, {})'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['mapset("a", false, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_match() | ||||
| @@ -1668,6 +1837,18 @@ def Test_matchend() | ||||
|   assert_equal(5, matchend(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) | ||||
| enddef | ||||
|  | ||||
| def Test_matchfuzzy() | ||||
|   CheckDefAndScriptFailure2(['matchfuzzy({}, "p")'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['matchfuzzy([], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['matchfuzzy([], "a", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_matchfuzzypos() | ||||
|   CheckDefAndScriptFailure2(['matchfuzzypos({}, "p")'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['matchfuzzypos([], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['matchfuzzypos([], "a", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_matchlist() | ||||
|   CheckDefAndScriptFailure2(['matchlist(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['matchlist(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2') | ||||
| @@ -1781,6 +1962,8 @@ enddef | ||||
|  | ||||
| def Test_nr2char() | ||||
|   nr2char(97, true)->assert_equal('a') | ||||
|   CheckDefAndScriptFailure2(['nr2char("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['nr2char(1, "a")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_or() | ||||
| @@ -1906,9 +2089,22 @@ enddef | ||||
| def Test_prompt_setprompt() | ||||
|   if !has('channel') | ||||
|     CheckFeature channel | ||||
|   else | ||||
|     CheckDefAndScriptFailure2(['prompt_setprompt([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') | ||||
|     CheckDefAndScriptFailure2(['prompt_setprompt(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') | ||||
|   endif | ||||
|   CheckDefAndScriptFailure2(['prompt_setprompt([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['prompt_setprompt(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_prop_add() | ||||
|   CheckDefAndScriptFailure2(['prop_add("a", 2, {})'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['prop_add(1, "b", {})'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['prop_add(1, 2, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_prop_clear() | ||||
|   CheckDefAndScriptFailure2(['prop_clear("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['prop_clear(1, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['prop_clear(1, 2, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_prop_find() | ||||
| @@ -1922,6 +2118,12 @@ def Test_prop_list() | ||||
|   CheckDefAndScriptFailure2(['prop_list(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_prop_remove() | ||||
|   CheckDefAndScriptFailure2(['prop_remove([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['prop_remove({}, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['prop_remove({}, 1, "b")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_prop_type_add() | ||||
|   CheckDefAndScriptFailure2(['prop_type_add({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String') | ||||
|   CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E715: Dictionary required') | ||||
| @@ -2053,6 +2255,15 @@ def Test_reltimestr() | ||||
|   assert_true(type(reltimestr(reltime())) == v:t_string) | ||||
| enddef | ||||
|  | ||||
| def Test_remote_expr() | ||||
|   CheckFeature clientserver | ||||
|   CheckEnv DISPLAY | ||||
|   CheckDefAndScriptFailure2(['remote_expr(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['remote_expr("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['remote_expr("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['remote_expr("a", "b", "c", "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') | ||||
| enddef | ||||
|  | ||||
| def Test_remote_foreground() | ||||
|   CheckFeature clientserver | ||||
|   # remote_foreground() doesn't fail on MS-Windows | ||||
| @@ -2077,6 +2288,14 @@ def Test_remote_read() | ||||
|   CheckDefAndScriptFailure2(['remote_read("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_remote_send() | ||||
|   CheckFeature clientserver | ||||
|   CheckEnv DISPLAY | ||||
|   CheckDefAndScriptFailure2(['remote_send(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['remote_send("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['remote_send("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_remote_startserver() | ||||
|   CheckFeature clientserver | ||||
|   CheckEnv DISPLAY | ||||
| @@ -2089,6 +2308,31 @@ def Test_remove_const_list() | ||||
|   assert_equal([3, 4], l) | ||||
| enddef | ||||
|  | ||||
| def Test_remove() | ||||
|   CheckDefAndScriptFailure2(['remove("a", 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E896: Argument of remove() must be a List, Dictionary or Blob') | ||||
|   CheckDefAndScriptFailure2(['remove([], "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['remove([], 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['remove({}, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['remove(0z10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['remove(0z20, 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
|   var l: any = [1, 2, 3, 4] | ||||
|   remove(l, 1) | ||||
|   assert_equal([1, 3, 4], l) | ||||
|   remove(l, 0, 1) | ||||
|   assert_equal([4], l) | ||||
|   var b: any = 0z1234.5678.90 | ||||
|   remove(b, 1) | ||||
|   assert_equal(0z1256.7890, b) | ||||
|   remove(b, 1, 2) | ||||
|   assert_equal(0z1290, b) | ||||
|   var d: any = {a: 10, b: 20, c: 30} | ||||
|   remove(d, 'b') | ||||
|   assert_equal({a: 10, c: 30}, d) | ||||
|   var d2: any = {1: 'a', 2: 'b', 3: 'c'} | ||||
|   remove(d2, 2) | ||||
|   assert_equal({1: 'a', 3: 'c'}, d2) | ||||
| enddef | ||||
|  | ||||
| def Test_remove_return_type() | ||||
|   var l = remove({one: [1, 2], two: [3, 4]}, 'one') | ||||
|   var res = 0 | ||||
| @@ -2202,6 +2446,13 @@ def Test_searchcount() | ||||
|   CheckDefAndScriptFailure2(['searchcount([1])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') | ||||
| enddef | ||||
|  | ||||
| def Test_searchdecl() | ||||
|   searchdecl('blah', true, true)->assert_equal(1) | ||||
|   CheckDefAndScriptFailure2(['searchdecl(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['searchdecl("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['searchdecl("a", true, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_searchpair() | ||||
|   new | ||||
|   setline(1, "here { and } there") | ||||
| @@ -2247,6 +2498,11 @@ def Test_server2client() | ||||
|   CheckDefAndScriptFailure2(['server2client("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E573: Invalid server id used:') | ||||
| enddef | ||||
|  | ||||
| def Test_shellescape() | ||||
|   CheckDefAndScriptFailure2(['shellescape(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['shellescape("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_set_get_bufline() | ||||
|   # similar to Test_setbufline_getbufline() | ||||
|   var lines =<< trim END | ||||
| @@ -2297,10 +2553,6 @@ def Test_set_get_bufline() | ||||
|   CheckDefAndScriptSuccess(lines) | ||||
| enddef | ||||
|  | ||||
| def Test_searchdecl() | ||||
|   searchdecl('blah', true, true)->assert_equal(1) | ||||
| enddef | ||||
|  | ||||
| def Test_setbufvar() | ||||
|   setbufvar(bufnr('%'), '&syntax', 'vim') | ||||
|   &syntax->assert_equal('vim') | ||||
| @@ -2326,23 +2578,6 @@ def Test_setbufvar() | ||||
|   getbufvar('%', 'myvar')->assert_equal(123) | ||||
| enddef | ||||
|  | ||||
| def Test_setcharsearch() | ||||
|   CheckDefFailure(['setcharsearch("x")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got string') | ||||
|   CheckDefFailure(['setcharsearch([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>') | ||||
|   var d: dict<any> = {char: 'x', forward: 1, until: 1} | ||||
|   setcharsearch(d) | ||||
|   assert_equal(d, getcharsearch()) | ||||
| enddef | ||||
|  | ||||
| def Test_setcmdpos() | ||||
|   CheckDefFailure(['setcmdpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') | ||||
| enddef | ||||
|  | ||||
| def Test_setfperm() | ||||
|   CheckDefFailure(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number') | ||||
|   CheckDefFailure(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob') | ||||
| enddef | ||||
|  | ||||
| def Test_setbufline() | ||||
|   new | ||||
|   var bnum = bufnr('%') | ||||
| @@ -2364,6 +2599,35 @@ def Test_setcellwidths() | ||||
|   CheckDefAndScriptFailure2(['setcellwidths({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E714: List required') | ||||
| enddef | ||||
|  | ||||
| def Test_setcharpos() | ||||
|   CheckDefAndScriptFailure2(['setcharpos(1, [])'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefFailure(['setcharpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>') | ||||
|   CheckDefAndScriptFailure2(['setcharpos(".", 1)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_setcharsearch() | ||||
|   CheckDefFailure(['setcharsearch("x")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got string') | ||||
|   CheckDefFailure(['setcharsearch([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>') | ||||
|   var d: dict<any> = {char: 'x', forward: 1, until: 1} | ||||
|   setcharsearch(d) | ||||
|   assert_equal(d, getcharsearch()) | ||||
| enddef | ||||
|  | ||||
| def Test_setcmdpos() | ||||
|   CheckDefFailure(['setcmdpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') | ||||
| enddef | ||||
|  | ||||
| def Test_setcursorcharpos() | ||||
|   CheckDefAndScriptFailure2(['setcursorcharpos(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['setcursorcharpos(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['setcursorcharpos(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_setfperm() | ||||
|   CheckDefFailure(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number') | ||||
|   CheckDefFailure(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob') | ||||
| enddef | ||||
|  | ||||
| def Test_setline() | ||||
|   new | ||||
|   setline(1, range(1, 4)) | ||||
| @@ -2383,6 +2647,27 @@ def Test_setloclist() | ||||
|   var what = {items: items} | ||||
|   setqflist([], ' ', what) | ||||
|   setloclist(0, [], ' ', what) | ||||
|   CheckDefAndScriptFailure2(['setloclist("1", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['setloclist(1, 2)'], 'E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['setloclist(1, [], 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['setloclist(1, [], "a", [])'], 'E1013: Argument 4: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 4') | ||||
| enddef | ||||
|  | ||||
| def Test_setmatches() | ||||
|   CheckDefAndScriptFailure2(['setmatches({})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['setmatches([], "1")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_setpos() | ||||
|   CheckDefAndScriptFailure2(['setpos(1, [])'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefFailure(['setpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>') | ||||
|   CheckDefAndScriptFailure2(['setpos(".", 1)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_setqflist() | ||||
|   CheckDefAndScriptFailure2(['setqflist(1, "")'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1211: List required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['setqflist([], 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['setqflist([], "", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_setreg() | ||||
| @@ -2393,6 +2678,28 @@ def Test_setreg() | ||||
|   assert_fails('setreg("ab", 0)', 'E1162:') | ||||
| enddef  | ||||
|  | ||||
| def Test_settabvar() | ||||
|   CheckDefAndScriptFailure2(['settabvar("a", "b", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['settabvar(1, 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_settabwinvar() | ||||
|   CheckDefAndScriptFailure2(['settabwinvar("a", 2, "c", true)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['settabwinvar(1, "b", "c", [])'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['settabwinvar(1, 1, 3, {})'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_settagstack() | ||||
|   CheckDefAndScriptFailure2(['settagstack(true, {})'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['settagstack(1, [1])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['settagstack(1, {}, 2)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_setwinvar() | ||||
|   CheckDefAndScriptFailure2(['setwinvar("a", "b", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['setwinvar(1, 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_sha256() | ||||
|   CheckDefFailure(['sha256(100)'], 'E1013: Argument 1: type mismatch, expected string but got number') | ||||
|   CheckDefFailure(['sha256(0zABCD)'], 'E1013: Argument 1: type mismatch, expected string but got blob') | ||||
| @@ -2414,6 +2721,12 @@ def Test_sign_getdefined() | ||||
|   CheckDefAndScriptFailure2(['sign_getdefined(2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
| enddef | ||||
|  | ||||
| def Test_sign_getplaced() | ||||
|   CheckDefAndScriptFailure2(['sign_getplaced(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['sign_getplaced(1, ["a"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['sign_getplaced("a", 1.1)'], 'E1013: Argument 2: type mismatch, expected dict<any> but got float', 'E1206: Dictionary required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_sign_placelist() | ||||
|   CheckDefAndScriptFailure2(['sign_placelist("x")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E714: List required') | ||||
|   CheckDefAndScriptFailure2(['sign_placelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E714: List required') | ||||
| @@ -2461,6 +2774,9 @@ def Test_slice() | ||||
|   assert_equal(0z11, slice(0z001122334455, 1, -4)) | ||||
|   assert_equal(0z, slice(0z001122334455, 1, -5)) | ||||
|   assert_equal(0z, slice(0z001122334455, 1, -6)) | ||||
|   CheckDefAndScriptFailure2(['slice({"a": 10}, 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['slice([1, 2, 3], "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['slice("abc", 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_spellsuggest() | ||||
| @@ -2469,6 +2785,9 @@ def Test_spellsuggest() | ||||
|   else | ||||
|     spellsuggest('marrch', 1, true)->assert_equal(['March']) | ||||
|   endif | ||||
|   CheckDefAndScriptFailure2(['spellsuggest(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['spellsuggest("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['spellsuggest("a", 1, 0z01)'], 'E1013: Argument 3: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_sound_stop() | ||||
| @@ -2508,6 +2827,9 @@ enddef | ||||
|  | ||||
| def Test_split() | ||||
|   split('  aa  bb  ', '\W\+', true)->assert_equal(['', 'aa', 'bb', '']) | ||||
|   CheckDefAndScriptFailure2(['split(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['split("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['split("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_srand() | ||||
| @@ -2557,6 +2879,13 @@ def Test_strcharlen() | ||||
|   strcharlen(99)->assert_equal(2) | ||||
| enddef | ||||
|  | ||||
| def Test_strcharpart() | ||||
|   CheckDefAndScriptFailure2(['strcharpart(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['strcharpart("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['strcharpart("a", 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['strcharpart("a", 1, 1, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') | ||||
| enddef | ||||
|  | ||||
| def Test_strchars() | ||||
|   strchars("A\u20dd", true)->assert_equal(1) | ||||
|   CheckDefAndScriptFailure2(['strchars(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
| @@ -2593,6 +2922,13 @@ def Test_strlen() | ||||
|   strlen(99)->assert_equal(2) | ||||
| enddef | ||||
|  | ||||
| def Test_strpart() | ||||
|   CheckDefAndScriptFailure2(['strpart(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['strpart("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['strpart("a", 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['strpart("a", 1, 1, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') | ||||
| enddef | ||||
|  | ||||
| def Test_strptime() | ||||
|   CheckFunction strptime | ||||
|   CheckDefFailure(['strptime(10, "2021")'], 'E1013: Argument 1: type mismatch, expected string but got number') | ||||
| @@ -2626,6 +2962,8 @@ def Test_submatch() | ||||
|   var actual = substitute('A123456789', pat, Rep, '') | ||||
|   var expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]" | ||||
|   actual->assert_equal(expected) | ||||
|   CheckDefAndScriptFailure2(['submatch("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['submatch(1, "a")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_substitute() | ||||
| @@ -2653,6 +2991,9 @@ def Test_synID() | ||||
|   setline(1, "text") | ||||
|   synID(1, 1, true)->assert_equal(0) | ||||
|   bwipe! | ||||
|   CheckDefAndScriptFailure2(['synID(0z10, 1, true)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['synID("a", true, false)'], 'E1013: Argument 2: type mismatch, expected number but got bool', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['synID(1, 1, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_synIDtrans() | ||||
| @@ -2753,6 +3094,8 @@ def Test_term_gettty() | ||||
|     term_gettty(buf, true)->assert_notequal('') | ||||
|     StopShellInTerminal(buf) | ||||
|   endif | ||||
|   CheckDefAndScriptFailure2(['term_gettty([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['term_gettty(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_term_sendkeys() | ||||
| @@ -2761,6 +3104,12 @@ def Test_term_sendkeys() | ||||
|   CheckDefAndScriptFailure2(['term_sendkeys(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_term_setansicolors() | ||||
|   CheckRunVimInTerminal | ||||
|   CheckDefAndScriptFailure2(['term_setansicolors([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['term_setansicolors(10, {})'], 'E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_term_setapi() | ||||
|   CheckRunVimInTerminal | ||||
|   CheckDefAndScriptFailure2(['term_setapi([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') | ||||
| @@ -2811,6 +3160,15 @@ def Test_test_getvalue() | ||||
|   CheckDefAndScriptFailure2(['test_getvalue(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E474: Invalid argument') | ||||
| enddef | ||||
|  | ||||
| def Test_test_gui_mouse_event() | ||||
|   CheckGui | ||||
|   CheckDefAndScriptFailure2(['test_gui_mouse_event(1.1, 1, 1, 1, 1)'], 'E1013: Argument 1: type mismatch, expected number but got float', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['test_gui_mouse_event(1, "1", 1, 1, 1)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['test_gui_mouse_event(1, 1, "1", 1, 1)'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') | ||||
|   CheckDefAndScriptFailure2(['test_gui_mouse_event(1, 1, 1, "1", 1)'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') | ||||
|   CheckDefAndScriptFailure2(['test_gui_mouse_event(1, 1, 1, 1, "1")'], 'E1013: Argument 5: type mismatch, expected number but got string', 'E1210: Number required for argument 5') | ||||
| enddef | ||||
|  | ||||
| def Test_test_ignore_error() | ||||
|   CheckDefAndScriptFailure2(['test_ignore_error([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E474: Invalid argument') | ||||
|   test_ignore_error('RESET') | ||||
| @@ -2845,6 +3203,11 @@ def Test_timer_info() | ||||
|   assert_equal([], timer_info()) | ||||
| enddef | ||||
|  | ||||
| def Test_timer_pause() | ||||
|   CheckDefAndScriptFailure2(['timer_pause("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['timer_pause(1, "a")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2') | ||||
| enddef | ||||
|  | ||||
| def Test_timer_paused() | ||||
|   var id = timer_start(50, () => 0) | ||||
|   timer_pause(id, true) | ||||
| @@ -2955,6 +3318,9 @@ def Test_win_splitmove() | ||||
|   split | ||||
|   win_splitmove(1, 2, {vertical: true, rightbelow: true}) | ||||
|   close | ||||
|   CheckDefAndScriptFailure2(['win_splitmove("a", 2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') | ||||
|   CheckDefAndScriptFailure2(['win_splitmove(1, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') | ||||
|   CheckDefAndScriptFailure2(['win_splitmove(1, 2, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') | ||||
| enddef | ||||
|  | ||||
| def Test_winbufnr() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user