To: vim_dev@googlegroups.com Subject: Patch 8.2.1777 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1777 Problem: Vim9: some assignment tests in the wrong file. Solution: Move assignment tests to test_vim9_assign. Files: src/testdir/test_vim9_assign.vim, src/testdir/test_vim9_script.vim *** ../vim-8.2.1776/src/testdir/test_vim9_assign.vim 2020-09-27 22:47:01.880163387 +0200 --- src/testdir/test_vim9_assign.vim 2020-09-30 22:57:48.136647924 +0200 *************** *** 768,771 **** --- 768,966 ---- CheckScriptFailure(lines, 'E990:') enddef + def Test_let_func_call() + var lines =<< trim END + vim9script + func GetValue() + if exists('g:count') + let g:count += 1 + else + let g:count = 1 + endif + return 'this' + endfunc + var val: string = GetValue() + # env var is always a string + var env = $TERM + END + writefile(lines, 'Xfinished') + source Xfinished + # GetValue() is not called during discovery phase + assert_equal(1, g:count) + + unlet g:count + delete('Xfinished') + enddef + + def Test_let_missing_type() + var lines =<< trim END + vim9script + var name = g:unknown + END + CheckScriptFailure(lines, 'E121:') + + lines =<< trim END + vim9script + var nr: number = 123 + var name = nr + END + CheckScriptSuccess(lines) + enddef + + def Test_let_declaration() + var lines =<< trim END + vim9script + var name: string + g:var_uninit = name + name = 'text' + g:var_test = name + # prefixing s: is optional + s:name = 'prefixed' + g:var_prefixed = s:name + + var s:other: number + other = 1234 + g:other_var = other + + # type is inferred + s:dict = {'a': 222} + def GetDictVal(key: any) + g:dict_val = s:dict[key] + enddef + GetDictVal('a') + END + CheckScriptSuccess(lines) + assert_equal('', g:var_uninit) + assert_equal('text', g:var_test) + assert_equal('prefixed', g:var_prefixed) + assert_equal(1234, g:other_var) + assert_equal(222, g:dict_val) + + unlet g:var_uninit + unlet g:var_test + unlet g:var_prefixed + unlet g:other_var + enddef + + def Test_let_declaration_fails() + var lines =<< trim END + vim9script + final var: string + END + CheckScriptFailure(lines, 'E1125:') + + lines =<< trim END + vim9script + const var: string + END + CheckScriptFailure(lines, 'E1021:') + + lines =<< trim END + vim9script + var 9var: string + END + CheckScriptFailure(lines, 'E475:') + enddef + + def Test_let_type_check() + var lines =<< trim END + vim9script + var name: string + name = 1234 + END + CheckScriptFailure(lines, 'E1012:') + + lines =<< trim END + vim9script + var name:string + END + CheckScriptFailure(lines, 'E1069:') + + lines =<< trim END + vim9script + var name: asdf + END + CheckScriptFailure(lines, 'E1010:') + + lines =<< trim END + vim9script + var s:l: list + s:l = [] + END + CheckScriptSuccess(lines) + + lines =<< trim END + vim9script + var s:d: dict + s:d = {} + END + CheckScriptSuccess(lines) + enddef + + let g:dict_number = #{one: 1, two: 2} + + def Test_let_list_dict_type() + var ll: list + ll = [1, 2, 2, 3, 3, 3]->uniq() + ll->assert_equal([1, 2, 3]) + + var dd: dict + dd = g:dict_number + dd->assert_equal(g:dict_number) + + var lines =<< trim END + var ll: list + ll = [1, 2, 3]->map('"one"') + END + CheckDefExecFailure(lines, 'E1012: Type mismatch; expected list but got list') + enddef + + def Test_unlet() + g:somevar = 'yes' + assert_true(exists('g:somevar')) + unlet g:somevar + assert_false(exists('g:somevar')) + unlet! g:somevar + + # also works for script-local variable in legacy Vim script + s:somevar = 'legacy' + assert_true(exists('s:somevar')) + unlet s:somevar + assert_false(exists('s:somevar')) + unlet! s:somevar + + CheckScriptFailure([ + 'vim9script', + 'var svar = 123', + 'unlet svar', + ], 'E1081:') + CheckScriptFailure([ + 'vim9script', + 'var svar = 123', + 'unlet s:svar', + ], 'E1081:') + CheckScriptFailure([ + 'vim9script', + 'var svar = 123', + 'def Func()', + ' unlet svar', + 'enddef', + 'defcompile', + ], 'E1081:') + CheckScriptFailure([ + 'vim9script', + 'var svar = 123', + 'def Func()', + ' unlet s:svar', + 'enddef', + 'defcompile', + ], 'E1081:') + + $ENVVAR = 'foobar' + assert_equal('foobar', $ENVVAR) + unlet $ENVVAR + assert_equal('', $ENVVAR) + enddef + + " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker *** ../vim-8.2.1776/src/testdir/test_vim9_script.vim 2020-09-27 22:47:01.880163387 +0200 --- src/testdir/test_vim9_script.vim 2020-09-30 22:57:13.912773616 +0200 *************** *** 29,81 **** let g:astring = 'text' let g:anumber = 123 - def Test_unlet() - g:somevar = 'yes' - assert_true(exists('g:somevar')) - unlet g:somevar - assert_false(exists('g:somevar')) - unlet! g:somevar - - # also works for script-local variable in legacy Vim script - s:somevar = 'legacy' - assert_true(exists('s:somevar')) - unlet s:somevar - assert_false(exists('s:somevar')) - unlet! s:somevar - - CheckScriptFailure([ - 'vim9script', - 'var svar = 123', - 'unlet svar', - ], 'E1081:') - CheckScriptFailure([ - 'vim9script', - 'var svar = 123', - 'unlet s:svar', - ], 'E1081:') - CheckScriptFailure([ - 'vim9script', - 'var svar = 123', - 'def Func()', - ' unlet svar', - 'enddef', - 'defcompile', - ], 'E1081:') - CheckScriptFailure([ - 'vim9script', - 'var svar = 123', - 'def Func()', - ' unlet s:svar', - 'enddef', - 'defcompile', - ], 'E1081:') - - $ENVVAR = 'foobar' - assert_equal('foobar', $ENVVAR) - unlet $ENVVAR - assert_equal('', $ENVVAR) - enddef - def Test_delfunction() # Check function is defined in script namespace CheckScriptSuccess([ --- 29,34 ---- *************** *** 2460,2612 **** delete('Xfinished') enddef - def Test_let_func_call() - var lines =<< trim END - vim9script - func GetValue() - if exists('g:count') - let g:count += 1 - else - let g:count = 1 - endif - return 'this' - endfunc - var val: string = GetValue() - # env var is always a string - var env = $TERM - END - writefile(lines, 'Xfinished') - source Xfinished - # GetValue() is not called during discovery phase - assert_equal(1, g:count) - - unlet g:count - delete('Xfinished') - enddef - - def Test_let_missing_type() - var lines =<< trim END - vim9script - var name = g:unknown - END - CheckScriptFailure(lines, 'E121:') - - lines =<< trim END - vim9script - var nr: number = 123 - var name = nr - END - CheckScriptSuccess(lines) - enddef - - def Test_let_declaration() - var lines =<< trim END - vim9script - var name: string - g:var_uninit = name - name = 'text' - g:var_test = name - # prefixing s: is optional - s:name = 'prefixed' - g:var_prefixed = s:name - - var s:other: number - other = 1234 - g:other_var = other - - # type is inferred - s:dict = {'a': 222} - def GetDictVal(key: any) - g:dict_val = s:dict[key] - enddef - GetDictVal('a') - END - CheckScriptSuccess(lines) - assert_equal('', g:var_uninit) - assert_equal('text', g:var_test) - assert_equal('prefixed', g:var_prefixed) - assert_equal(1234, g:other_var) - assert_equal(222, g:dict_val) - - unlet g:var_uninit - unlet g:var_test - unlet g:var_prefixed - unlet g:other_var - enddef - - def Test_let_declaration_fails() - var lines =<< trim END - vim9script - final var: string - END - CheckScriptFailure(lines, 'E1125:') - - lines =<< trim END - vim9script - const var: string - END - CheckScriptFailure(lines, 'E1021:') - - lines =<< trim END - vim9script - var 9var: string - END - CheckScriptFailure(lines, 'E475:') - enddef - - def Test_let_type_check() - var lines =<< trim END - vim9script - var name: string - name = 1234 - END - CheckScriptFailure(lines, 'E1012:') - - lines =<< trim END - vim9script - var name:string - END - CheckScriptFailure(lines, 'E1069:') - - lines =<< trim END - vim9script - var name: asdf - END - CheckScriptFailure(lines, 'E1010:') - - lines =<< trim END - vim9script - var s:l: list - s:l = [] - END - CheckScriptSuccess(lines) - - lines =<< trim END - vim9script - var s:d: dict - s:d = {} - END - CheckScriptSuccess(lines) - enddef - - let g:dict_number = #{one: 1, two: 2} - - def Test_let_list_dict_type() - var ll: list - ll = [1, 2, 2, 3, 3, 3]->uniq() - ll->assert_equal([1, 2, 3]) - - var dd: dict - dd = g:dict_number - dd->assert_equal(g:dict_number) - - var lines =<< trim END - var ll: list - ll = [1, 2, 3]->map('"one"') - END - CheckDefExecFailure(lines, 'E1012: Type mismatch; expected list but got list') - enddef - def Test_forward_declaration() var lines =<< trim END vim9script --- 2413,2418 ---- *** ../vim-8.2.1776/src/version.c 2020-09-30 22:45:35.687288258 +0200 --- src/version.c 2020-09-30 22:59:17.428319410 +0200 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 1777, /**/ -- hundred-and-one symptoms of being an internet addict: 28. You have comandeered your teenager's phone line for the net and even his friends know not to call on his line anymore. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///