comparison src/testdir/test_vim9_assign.vim @ 23072:4b398a229b0b v8.2.2082

patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax Commit: https://github.com/vim/vim/commit/e0de171ecd2ff7acd56deda2cf81f0d13a69c803 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Dec 2 17:36:54 2020 +0100 patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax Problem: Vim9: can still use the depricated #{} dict syntax. Solution: Remove support for #{} in Vim9 script. (closes https://github.com/vim/vim/issues/7406, closes https://github.com/vim/vim/issues/7405)
author Bram Moolenaar <Bram@vim.org>
date Wed, 02 Dec 2020 17:45:05 +0100
parents 6a70803f4cbe
children c713358da074
comparison
equal deleted inserted replaced
23071:20dac5998fa6 23072:4b398a229b0b
358 358
359 def Test_extend_dict() 359 def Test_extend_dict()
360 var lines =<< trim END 360 var lines =<< trim END
361 vim9script 361 vim9script
362 var d: dict<number> 362 var d: dict<number>
363 extend(d, #{a: 1}) 363 extend(d, {a: 1})
364 assert_equal(#{a: 1}, d) 364 assert_equal({a: 1}, d)
365 365
366 var d2: dict<number> 366 var d2: dict<number>
367 d2['one'] = 1 367 d2['one'] = 1
368 assert_equal(#{one: 1}, d2) 368 assert_equal({one: 1}, d2)
369 END 369 END
370 CheckScriptSuccess(lines) 370 CheckScriptSuccess(lines)
371 371
372 lines =<< trim END 372 lines =<< trim END
373 vim9script 373 vim9script
374 var d: dict<string> = test_null_dict() 374 var d: dict<string> = test_null_dict()
375 extend(d, #{a: 'x'}) 375 extend(d, {a: 'x'})
376 assert_equal(#{a: 'x'}, d) 376 assert_equal({a: 'x'}, d)
377 END 377 END
378 CheckScriptSuccess(lines) 378 CheckScriptSuccess(lines)
379 379
380 lines =<< trim END 380 lines =<< trim END
381 vim9script 381 vim9script
382 extend(test_null_dict(), #{a: 'x'}) 382 extend(test_null_dict(), {a: 'x'})
383 END 383 END
384 CheckScriptFailure(lines, 'E1133:', 2) 384 CheckScriptFailure(lines, 'E1133:', 2)
385 enddef 385 enddef
386 386
387 def Test_single_letter_vars() 387 def Test_single_letter_vars()
485 END 485 END
486 CheckScriptSuccess(lines) 486 CheckScriptSuccess(lines)
487 enddef 487 enddef
488 488
489 def Test_assignment_dict() 489 def Test_assignment_dict()
490 var dict1: dict<bool> = #{one: false, two: true} 490 var dict1: dict<bool> = {one: false, two: true}
491 var dict2: dict<number> = #{one: 1, two: 2} 491 var dict2: dict<number> = {one: 1, two: 2}
492 var dict3: dict<string> = #{key: 'value'} 492 var dict3: dict<string> = {key: 'value'}
493 var dict4: dict<any> = #{one: 1, two: '2'} 493 var dict4: dict<any> = {one: 1, two: '2'}
494 var dict5: dict<blob> = #{one: 0z01, two: 0z02} 494 var dict5: dict<blob> = {one: 0z01, two: 0z02}
495 495
496 # overwrite 496 # overwrite
497 dict3['key'] = 'another' 497 dict3['key'] = 'another'
498 assert_equal(dict3, #{key: 'another'}) 498 assert_equal(dict3, {key: 'another'})
499 dict3.key = 'yet another' 499 dict3.key = 'yet another'
500 assert_equal(dict3, #{key: 'yet another'}) 500 assert_equal(dict3, {key: 'yet another'})
501 501
502 var lines =<< trim END 502 var lines =<< trim END
503 var dd = #{one: 1} 503 var dd = {one: 1}
504 dd.one) = 2 504 dd.one) = 2
505 END 505 END
506 CheckDefFailure(lines, 'E15:', 2) 506 CheckDefFailure(lines, 'E15:', 2)
507 507
508 # empty key can be used 508 # empty key can be used
509 var dd = {} 509 var dd = {}
510 dd[""] = 6 510 dd[""] = 6
511 assert_equal({'': 6}, dd) 511 assert_equal({['']: 6}, dd)
512 512
513 # type becomes dict<any> 513 # type becomes dict<any>
514 var somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 514 var somedict = rand() > 0 ? {a: 1, b: 2} : {a: 'a', b: 'b'}
515 515
516 # assignment to script-local dict 516 # assignment to script-local dict
517 lines =<< trim END 517 lines =<< trim END
518 vim9script 518 vim9script
519 var test: dict<any> = {} 519 var test: dict<any> = {}
520 def FillDict(): dict<any> 520 def FillDict(): dict<any>
521 test['a'] = 43 521 test['a'] = 43
522 return test 522 return test
523 enddef 523 enddef
524 assert_equal(#{a: 43}, FillDict()) 524 assert_equal({a: 43}, FillDict())
525 END 525 END
526 CheckScriptSuccess(lines) 526 CheckScriptSuccess(lines)
527 527
528 lines =<< trim END 528 lines =<< trim END
529 vim9script 529 vim9script
542 g:test = {} 542 g:test = {}
543 def FillDict(): dict<any> 543 def FillDict(): dict<any>
544 g:test['a'] = 43 544 g:test['a'] = 43
545 return g:test 545 return g:test
546 enddef 546 enddef
547 assert_equal(#{a: 43}, FillDict()) 547 assert_equal({a: 43}, FillDict())
548 END 548 END
549 CheckScriptSuccess(lines) 549 CheckScriptSuccess(lines)
550 550
551 # assignment to buffer dict 551 # assignment to buffer dict
552 lines =<< trim END 552 lines =<< trim END
554 b:test = {} 554 b:test = {}
555 def FillDict(): dict<any> 555 def FillDict(): dict<any>
556 b:test['a'] = 43 556 b:test['a'] = 43
557 return b:test 557 return b:test
558 enddef 558 enddef
559 assert_equal(#{a: 43}, FillDict()) 559 assert_equal({a: 43}, FillDict())
560 END 560 END
561 CheckScriptSuccess(lines) 561 CheckScriptSuccess(lines)
562 enddef 562 enddef
563 563
564 def Test_assignment_local() 564 def Test_assignment_local()
634 var thechannel: channel 634 var thechannel: channel
635 assert_equal(test_null_channel(), thechannel) 635 assert_equal(test_null_channel(), thechannel)
636 636
637 if has('unix') && executable('cat') 637 if has('unix') && executable('cat')
638 # check with non-null job and channel, types must match 638 # check with non-null job and channel, types must match
639 thejob = job_start("cat ", #{}) 639 thejob = job_start("cat ", {})
640 thechannel = job_getchannel(thejob) 640 thechannel = job_getchannel(thejob)
641 job_stop(thejob, 'kill') 641 job_stop(thejob, 'kill')
642 endif 642 endif
643 endif 643 endif
644 644
825 CheckScriptFailure(['vim9script', 'def Func()', 'var dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') 825 CheckScriptFailure(['vim9script', 'def Func()', 'var dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:')
826 826
827 CheckDefFailure(['var name: list<string> = [123]'], 'expected list<string> but got list<number>') 827 CheckDefFailure(['var name: list<string> = [123]'], 'expected list<string> but got list<number>')
828 CheckDefFailure(['var name: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 828 CheckDefFailure(['var name: list<number> = ["xx"]'], 'expected list<number> but got list<string>')
829 829
830 CheckDefFailure(['var name: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 830 CheckDefFailure(['var name: dict<string> = {key: 123}'], 'expected dict<string> but got dict<number>')
831 CheckDefFailure(['var name: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 831 CheckDefFailure(['var name: dict<number> = {key: "xx"}'], 'expected dict<number> but got dict<string>')
832 832
833 CheckDefFailure(['var name = feedkeys("0")'], 'E1031:') 833 CheckDefFailure(['var name = feedkeys("0")'], 'E1031:')
834 CheckDefFailure(['var name: number = feedkeys("0")'], 'expected number but got void') 834 CheckDefFailure(['var name: number = feedkeys("0")'], 'expected number but got void')
835 835
836 CheckDefFailure(['var name: dict <number>'], 'E1068:') 836 CheckDefFailure(['var name: dict <number>'], 'E1068:')
881 881
882 var nrd: dict<number> = {} 882 var nrd: dict<number> = {}
883 for i in range(3) 883 for i in range(3)
884 nrd[i] = i 884 nrd[i] = i
885 endfor 885 endfor
886 assert_equal({'0': 0, '1': 1, '2': 2}, nrd) 886 assert_equal({0: 0, 1: 1, 2: 2}, nrd)
887 887
888 CheckDefFailure(["var d: dict<number> = #{a: '', b: true}"], 'E1012: Type mismatch; expected dict<number> but got dict<any>', 1) 888 CheckDefFailure(["var d: dict<number> = {a: '', b: true}"], 'E1012: Type mismatch; expected dict<number> but got dict<any>', 1)
889 CheckDefFailure(["var d: dict<dict<number>> = #{x: #{a: '', b: true}}"], 'E1012: Type mismatch; expected dict<dict<number>> but got dict<dict<any>>', 1) 889 CheckDefFailure(["var d: dict<dict<number>> = {x: {a: '', b: true}}"], 'E1012: Type mismatch; expected dict<dict<number>> but got dict<dict<any>>', 1)
890 enddef 890 enddef
891 891
892 def Test_assign_dict_unknown_type() 892 def Test_assign_dict_unknown_type()
893 var lines =<< trim END 893 var lines =<< trim END
894 vim9script 894 vim9script
895 var mylist = [] 895 var mylist = []
896 mylist += [#{one: 'one'}] 896 mylist += [{one: 'one'}]
897 def Func() 897 def Func()
898 var dd = mylist[0] 898 var dd = mylist[0]
899 assert_equal('one', dd.one) 899 assert_equal('one', dd.one)
900 enddef 900 enddef
901 Func() 901 Func()
903 CheckScriptSuccess(lines) 903 CheckScriptSuccess(lines)
904 904
905 lines =<< trim END 905 lines =<< trim END
906 vim9script 906 vim9script
907 var mylist = [[]] 907 var mylist = [[]]
908 mylist[0] += [#{one: 'one'}] 908 mylist[0] += [{one: 'one'}]
909 def Func() 909 def Func()
910 var dd = mylist[0][0] 910 var dd = mylist[0][0]
911 assert_equal('one', dd.one) 911 assert_equal('one', dd.one)
912 enddef 912 enddef
913 Func() 913 Func()
1008 var s:other: number 1008 var s:other: number
1009 other = 1234 1009 other = 1234
1010 g:other_var = other 1010 g:other_var = other
1011 1011
1012 # type is inferred 1012 # type is inferred
1013 s:dict = {'a': 222} 1013 s:dict = {['a']: 222}
1014 def GetDictVal(key: any) 1014 def GetDictVal(key: any)
1015 g:dict_val = s:dict[key] 1015 g:dict_val = s:dict[key]
1016 enddef 1016 enddef
1017 GetDictVal('a') 1017 GetDictVal('a')
1018 END 1018 END