comparison src/testdir/test_vim9_expr.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 285cde4b8d0e
comparison
equal deleted inserted replaced
23071:20dac5998fa6 23072:4b398a229b0b
25 assert_equal('one', !!'x' 25 assert_equal('one', !!'x'
26 ? 'one' 26 ? 'one'
27 : 'two') 27 : 'two')
28 assert_equal('one', !!0z1234 ? 'one' : 'two') 28 assert_equal('one', !!0z1234 ? 'one' : 'two')
29 assert_equal('one', !![0] ? 'one' : 'two') 29 assert_equal('one', !![0] ? 'one' : 'two')
30 assert_equal('one', !!#{x: 0} ? 'one' : 'two') 30 assert_equal('one', !!{x: 0} ? 'one' : 'two')
31 var name = 1 31 var name = 1
32 assert_equal('one', name ? 'one' : 'two') 32 assert_equal('one', name ? 'one' : 'two')
33 33
34 assert_equal('two', false ? 'one' : 'two') 34 assert_equal('two', false ? 'one' : 'two')
35 assert_equal('two', 0 ? 'one' : 'two') 35 assert_equal('two', 0 ? 'one' : 'two')
204 var lines =<< trim END 204 var lines =<< trim END
205 assert_equal(v:true, v:true ?? 456) 205 assert_equal(v:true, v:true ?? 456)
206 assert_equal(123, 123 ?? 456) 206 assert_equal(123, 123 ?? 456)
207 assert_equal('yes', 'yes' ?? 456) 207 assert_equal('yes', 'yes' ?? 456)
208 assert_equal([1], [1] ?? 456) 208 assert_equal([1], [1] ?? 456)
209 assert_equal(#{one: 1}, #{one: 1} ?? 456) 209 assert_equal({one: 1}, {one: 1} ?? 456)
210 if has('float') 210 if has('float')
211 assert_equal(0.1, 0.1 ?? 456) 211 assert_equal(0.1, 0.1 ?? 456)
212 endif 212 endif
213 213
214 assert_equal(456, v:false ?? 456) 214 assert_equal(456, v:false ?? 456)
551 assert_equal(true, [2, 3, 4] == g:alist) 551 assert_equal(true, [2, 3, 4] == g:alist)
552 assert_equal(false, g:alist == [2, 3, 1]) 552 assert_equal(false, g:alist == [2, 3, 1])
553 assert_equal(false, [1, 2, 3] == []) 553 assert_equal(false, [1, 2, 3] == [])
554 assert_equal(false, [1, 2, 3] == ['1', '2', '3']) 554 assert_equal(false, [1, 2, 3] == ['1', '2', '3'])
555 555
556 assert_equal(true, #{one: 1, two: 2} == #{one: 1, two: 2}) 556 assert_equal(true, {one: 1, two: 2} == {one: 1, two: 2})
557 assert_equal(false, #{one: 1, two: 2} == #{one: 2, two: 2}) 557 assert_equal(false, {one: 1, two: 2} == {one: 2, two: 2})
558 assert_equal(false, #{one: 1, two: 2} == #{two: 2}) 558 assert_equal(false, {one: 1, two: 2} == {two: 2})
559 assert_equal(false, #{one: 1, two: 2} == #{}) 559 assert_equal(false, {one: 1, two: 2} == {})
560 assert_equal(true, g:adict == #{bbb: 8, aaa: 2}) 560 assert_equal(true, g:adict == {bbb: 8, aaa: 2})
561 assert_equal(false, #{ccc: 9, aaa: 2} == g:adict) 561 assert_equal(false, {ccc: 9, aaa: 2} == g:adict)
562 562
563 assert_equal(true, function('g:Test_expr4_equal') == function('g:Test_expr4_equal')) 563 assert_equal(true, function('g:Test_expr4_equal') == function('g:Test_expr4_equal'))
564 assert_equal(false, function('g:Test_expr4_equal') == function('g:Test_expr4_is')) 564 assert_equal(false, function('g:Test_expr4_equal') == function('g:Test_expr4_is'))
565 565
566 assert_equal(true, function('g:Test_expr4_equal', [123]) == function('g:Test_expr4_equal', [123])) 566 assert_equal(true, function('g:Test_expr4_equal', [123]) == function('g:Test_expr4_equal', [123]))
648 assert_equal(false, [2, 3, 4] != g:alist) 648 assert_equal(false, [2, 3, 4] != g:alist)
649 assert_equal(true, g:alist != [2, 3, 1]) 649 assert_equal(true, g:alist != [2, 3, 1])
650 assert_equal(true, [1, 2, 3] != []) 650 assert_equal(true, [1, 2, 3] != [])
651 assert_equal(true, [1, 2, 3] != ['1', '2', '3']) 651 assert_equal(true, [1, 2, 3] != ['1', '2', '3'])
652 652
653 assert_equal(false, #{one: 1, two: 2} != #{one: 1, two: 2}) 653 assert_equal(false, {one: 1, two: 2} != {one: 1, two: 2})
654 assert_equal(true, #{one: 1, two: 2} != #{one: 2, two: 2}) 654 assert_equal(true, {one: 1, two: 2} != {one: 2, two: 2})
655 assert_equal(true, #{one: 1, two: 2} != #{two: 2}) 655 assert_equal(true, {one: 1, two: 2} != {two: 2})
656 assert_equal(true, #{one: 1, two: 2} != #{}) 656 assert_equal(true, {one: 1, two: 2} != {})
657 assert_equal(false, g:adict != #{bbb: 8, aaa: 2}) 657 assert_equal(false, g:adict != {bbb: 8, aaa: 2})
658 assert_equal(true, #{ccc: 9, aaa: 2} != g:adict) 658 assert_equal(true, {ccc: 9, aaa: 2} != g:adict)
659 659
660 assert_equal(false, function('g:Test_expr4_equal') != function('g:Test_expr4_equal')) 660 assert_equal(false, function('g:Test_expr4_equal') != function('g:Test_expr4_equal'))
661 assert_equal(true, function('g:Test_expr4_equal') != function('g:Test_expr4_is')) 661 assert_equal(true, function('g:Test_expr4_equal') != function('g:Test_expr4_is'))
662 662
663 assert_equal(false, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [123])) 663 assert_equal(false, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [123]))
1195 echo 'a' .. [1] 1195 echo 'a' .. [1]
1196 END 1196 END
1197 CheckScriptFailure(lines, 'E730:', 2) 1197 CheckScriptFailure(lines, 'E730:', 2)
1198 lines =<< trim END 1198 lines =<< trim END
1199 vim9script 1199 vim9script
1200 echo 'a' .. #{a: 1} 1200 echo 'a' .. {a: 1}
1201 END 1201 END
1202 CheckScriptFailure(lines, 'E731:', 2) 1202 CheckScriptFailure(lines, 'E731:', 2)
1203 lines =<< trim END 1203 lines =<< trim END
1204 vim9script 1204 vim9script
1205 echo 'a' .. test_void() 1205 echo 'a' .. test_void()
1285 call CheckDefFailure(["var x = [3] + 0z1122"], 'E1051:', 1) 1285 call CheckDefFailure(["var x = [3] + 0z1122"], 'E1051:', 1)
1286 call CheckDefFailure(["var x = 'asdf' + 0z1122"], 'E1051:', 1) 1286 call CheckDefFailure(["var x = 'asdf' + 0z1122"], 'E1051:', 1)
1287 call CheckDefFailure(["var x = 6 + xxx"], 'E1001:', 1) 1287 call CheckDefFailure(["var x = 6 + xxx"], 'E1001:', 1)
1288 1288
1289 call CheckDefFailure(["var x = 'a' .. [1]"], 'E1105:', 1) 1289 call CheckDefFailure(["var x = 'a' .. [1]"], 'E1105:', 1)
1290 call CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1105:', 1) 1290 call CheckDefFailure(["var x = 'a' .. {a: 1}"], 'E1105:', 1)
1291 call CheckDefFailure(["var x = 'a' .. test_void()"], 'E1105:', 1) 1291 call CheckDefFailure(["var x = 'a' .. test_void()"], 'E1105:', 1)
1292 call CheckDefFailure(["var x = 'a' .. 0z32"], 'E1105:', 1) 1292 call CheckDefFailure(["var x = 'a' .. 0z32"], 'E1105:', 1)
1293 call CheckDefFailure(["var x = 'a' .. function('len')"], 'E1105:', 1) 1293 call CheckDefFailure(["var x = 'a' .. function('len')"], 'E1105:', 1)
1294 call CheckDefFailure(["var x = 'a' .. function('len', ['a'])"], 'E1105:', 1) 1294 call CheckDefFailure(["var x = 'a' .. function('len', ['a'])"], 'E1105:', 1)
1295 1295
1467 1467
1468 call CheckDefFailure(["var x = [1] * [2]"], 'E1036:', 1) 1468 call CheckDefFailure(["var x = [1] * [2]"], 'E1036:', 1)
1469 call CheckDefFailure(["var x = [1] / [2]"], 'E1036:', 1) 1469 call CheckDefFailure(["var x = [1] / [2]"], 'E1036:', 1)
1470 call CheckDefFailure(["var x = [1] % [2]"], 'E1035:', 1) 1470 call CheckDefFailure(["var x = [1] % [2]"], 'E1035:', 1)
1471 1471
1472 call CheckDefFailure(["var x = #{one: 1} * #{two: 2}"], 'E1036:', 1) 1472 call CheckDefFailure(["var x = {one: 1} * {two: 2}"], 'E1036:', 1)
1473 call CheckDefFailure(["var x = #{one: 1} / #{two: 2}"], 'E1036:', 1) 1473 call CheckDefFailure(["var x = {one: 1} / {two: 2}"], 'E1036:', 1)
1474 call CheckDefFailure(["var x = #{one: 1} % #{two: 2}"], 'E1035:', 1) 1474 call CheckDefFailure(["var x = {one: 1} % {two: 2}"], 'E1035:', 1)
1475 1475
1476 call CheckDefFailure(["var x = 0xff[1]"], 'E1107:', 1) 1476 call CheckDefFailure(["var x = 0xff[1]"], 'E1107:', 1)
1477 if has('float') 1477 if has('float')
1478 call CheckDefFailure(["var x = 0.7[1]"], 'E1107:', 1) 1478 call CheckDefFailure(["var x = 0.7[1]"], 'E1107:', 1)
1479 endif 1479 endif
1794 assert_equal([1, 3, 5], [1, 2, 3]->map({key, val -> key + val})) 1794 assert_equal([1, 3, 5], [1, 2, 3]->map({key, val -> key + val}))
1795 1795
1796 # line continuation inside lambda with "cond ? expr : expr" works 1796 # line continuation inside lambda with "cond ? expr : expr" works
1797 var ll = range(3) 1797 var ll = range(3)
1798 map(ll, {k, v -> v % 2 ? { 1798 map(ll, {k, v -> v % 2 ? {
1799 '111': 111 } : {} 1799 ['111']: 111 } : {}
1800 }) 1800 })
1801 assert_equal([{}, {'111': 111}, {}], ll) 1801 assert_equal([{}, {111: 111}, {}], ll)
1802 1802
1803 ll = range(3) 1803 ll = range(3)
1804 map(ll, {k, v -> v == 8 || v 1804 map(ll, {k, v -> v == 8 || v
1805 == 9 1805 == 9
1806 || v % 2 ? 111 : 222 1806 || v % 2 ? 111 : 222
1812 != 9 1812 != 9
1813 && v % 2 == 0 ? 111 : 222 1813 && v % 2 == 0 ? 111 : 222
1814 }) 1814 })
1815 assert_equal([111, 222, 111], ll) 1815 assert_equal([111, 222, 111], ll)
1816 1816
1817 var dl = [{'key': 0}, {'key': 22}]->filter({ _, v -> v['key'] }) 1817 var dl = [{key: 0}, {key: 22}]->filter({ _, v -> v['key'] })
1818 assert_equal([{'key': 22}], dl) 1818 assert_equal([{key: 22}], dl)
1819 1819
1820 dl = [{'key': 12}, {'foo': 34}] 1820 dl = [{key: 12}, {['foo']: 34}]
1821 assert_equal([{'key': 12}], filter(dl, 1821 assert_equal([{key: 12}], filter(dl,
1822 {_, v -> has_key(v, 'key') ? v['key'] == 12 : 0})) 1822 {_, v -> has_key(v, 'key') ? v['key'] == 12 : 0}))
1823 1823
1824 assert_equal(false, LambdaWithComments()(0)) 1824 assert_equal(false, LambdaWithComments()(0))
1825 assert_equal(true, LambdaWithComments()(1)) 1825 assert_equal(true, LambdaWithComments()(1))
1826 assert_equal(true, LambdaWithComments()(2)) 1826 assert_equal(true, LambdaWithComments()(2))
1844 'E1106: One argument too many') 1844 'E1106: One argument too many')
1845 CheckDefExecFailure(["var s = 'asdf'->{a -> a}('x', 'y')"], 1845 CheckDefExecFailure(["var s = 'asdf'->{a -> a}('x', 'y')"],
1846 'E1106: 2 arguments too many') 1846 'E1106: 2 arguments too many')
1847 CheckDefFailure(["echo 'asdf'->{a -> a}(x)"], 'E1001:', 1) 1847 CheckDefFailure(["echo 'asdf'->{a -> a}(x)"], 'E1001:', 1)
1848 1848
1849 CheckDefSuccess(['var Fx = {a -> #{k1: 0,', ' k2: 1}}']) 1849 CheckDefSuccess(['var Fx = {a -> {k1: 0,', ' k2: 1}}'])
1850 CheckDefFailure(['var Fx = {a -> #{k1: 0', ' k2: 1}}'], 'E722:', 2) 1850 CheckDefFailure(['var Fx = {a -> {k1: 0', ' k2: 1}}'], 'E722:', 2)
1851 CheckDefFailure(['var Fx = {a -> #{k1: 0,', ' k2 1}}'], 'E720:', 2) 1851 CheckDefFailure(['var Fx = {a -> {k1: 0,', ' k2 1}}'], 'E720:', 2)
1852 1852
1853 CheckDefSuccess(['var Fx = {a -> [0,', ' 1]}']) 1853 CheckDefSuccess(['var Fx = {a -> [0,', ' 1]}'])
1854 CheckDefFailure(['var Fx = {a -> [0', ' 1]}'], 'E696:', 2) 1854 CheckDefFailure(['var Fx = {a -> [0', ' 1]}'], 'E696:', 2)
1855 enddef 1855 enddef
1856 1856
1892 def Test_expr7_dict() 1892 def Test_expr7_dict()
1893 # dictionary 1893 # dictionary
1894 var lines =<< trim END 1894 var lines =<< trim END
1895 assert_equal(g:dict_empty, {}) 1895 assert_equal(g:dict_empty, {})
1896 assert_equal(g:dict_empty, { }) 1896 assert_equal(g:dict_empty, { })
1897 assert_equal(g:dict_one, {'one': 1}) 1897 assert_equal(g:dict_one, {['one']: 1})
1898 var key = 'one' 1898 var key = 'one'
1899 var val = 1 1899 var val = 1
1900 assert_equal(g:dict_one, {[key]: val}) 1900 assert_equal(g:dict_one, {[key]: val})
1901 1901
1902 var numbers: dict<number> = {a: 1, b: 2, c: 3} 1902 var numbers: dict<number> = {a: 1, b: 2, c: 3}
1903 numbers = #{a: 1} 1903 numbers = {a: 1}
1904 numbers = #{} 1904 numbers = {}
1905 1905
1906 var strings: dict<string> = {a: 'a', b: 'b', c: 'c'} 1906 var strings: dict<string> = {a: 'a', b: 'b', c: 'c'}
1907 strings = #{a: 'x'} 1907 strings = {a: 'x'}
1908 strings = #{} 1908 strings = {}
1909
1910 var dash = {xx-x: 8}
1911 assert_equal({['xx-x']: 8}, dash)
1912
1913 var dnr = {8: 8}
1914 assert_equal({['8']: 8}, dnr)
1909 1915
1910 var mixed: dict<any> = {a: 'a', b: 42} 1916 var mixed: dict<any> = {a: 'a', b: 42}
1911 mixed = #{a: 'x'} 1917 mixed = {a: 'x'}
1912 mixed = #{a: 234} 1918 mixed = {a: 234}
1913 mixed = #{} 1919 mixed = {}
1914 1920
1915 var dictlist: dict<list<string>> = #{absent: [], present: ['hi']} 1921 var dictlist: dict<list<string>> = {absent: [], present: ['hi']}
1916 dictlist = #{absent: ['hi'], present: []} 1922 dictlist = {absent: ['hi'], present: []}
1917 dictlist = #{absent: [], present: []} 1923 dictlist = {absent: [], present: []}
1918 1924
1919 var dictdict: dict<dict<string>> = #{one: #{a: 'text'}, two: #{}} 1925 var dictdict: dict<dict<string>> = {one: {a: 'text'}, two: {}}
1920 dictdict = #{one: #{}, two: #{a: 'text'}} 1926 dictdict = {one: {}, two: {a: 'text'}}
1921 dictdict = #{one: #{}, two: #{}} 1927 dictdict = {one: {}, two: {}}
1922 1928
1923 assert_equal({'': 0}, {matchstr('string', 'wont match'): 0}) 1929 assert_equal({['']: 0}, {[matchstr('string', 'wont match')]: 0})
1924 1930
1925 assert_equal(g:test_space_dict, {['']: 'empty', [' ']: 'space'}) 1931 assert_equal(g:test_space_dict, {['']: 'empty', [' ']: 'space'})
1926 assert_equal(g:test_hash_dict, {one: 1, two: 2}) 1932 assert_equal(g:test_hash_dict, {one: 1, two: 2})
1927 END 1933 END
1928 CheckDefAndScriptSuccess(lines) 1934 CheckDefAndScriptSuccess(lines)
1929 1935
1930 CheckDefFailure(["var x = #{a:8}"], 'E1069:', 1) 1936 # legacy syntax doesn't work
1931 CheckDefFailure(["var x = #{a : 8}"], 'E1068:', 1) 1937 CheckDefFailure(["var x = #{key: 8}"], 'E1097:', 2)
1932 CheckDefFailure(["var x = #{a :8}"], 'E1068:', 1) 1938 CheckDefFailure(["var x = {'key': 8}"], 'E1014:', 1)
1933 CheckDefFailure(["var x = #{a: 8 , b: 9}"], 'E1068:', 1) 1939 CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1097:', 2)
1934 CheckDefFailure(["var x = #{a: 1,b: 2}"], 'E1069:', 1) 1940
1935 1941 CheckDefFailure(["var x = {a:8}"], 'E1069:', 1)
1936 CheckDefFailure(["var x = #{8: 8}"], 'E1014:', 1) 1942 CheckDefFailure(["var x = {a : 8}"], 'E1059:', 1)
1937 CheckDefFailure(["var x = #{xxx}"], 'E720:', 1) 1943 CheckDefFailure(["var x = {a :8}"], 'E1059:', 1)
1938 CheckDefFailure(["var x = #{xxx: 1", "var y = 2"], 'E722:', 2) 1944 CheckDefFailure(["var x = {a: 8 , b: 9}"], 'E1068:', 1)
1939 CheckDefFailure(["var x = #{xxx: 1,"], 'E723:', 2) 1945 CheckDefFailure(["var x = {a: 1,b: 2}"], 'E1069:', 1)
1940 CheckDefFailure(["var x = {'a': xxx}"], 'E1001:', 1) 1946
1941 CheckDefFailure(["var x = {xx-x: 8}"], 'E1001:', 1) 1947 CheckDefFailure(["var x = {xxx}"], 'E720:', 1)
1942 CheckDefFailure(["var x = #{a: 1, a: 2}"], 'E721:', 1) 1948 CheckDefFailure(["var x = {xxx: 1", "var y = 2"], 'E722:', 2)
1949 CheckDefFailure(["var x = {xxx: 1,"], 'E723:', 2)
1950 CheckDefFailure(["var x = {['a']: xxx}"], 'E1001:', 1)
1951 CheckDefFailure(["var x = {a: 1, a: 2}"], 'E721:', 1)
1943 CheckDefExecFailure(["var x = g:anint.member"], 'E715:', 1) 1952 CheckDefExecFailure(["var x = g:anint.member"], 'E715:', 1)
1944 CheckDefExecFailure(["var x = g:dict_empty.member"], 'E716:', 1) 1953 CheckDefExecFailure(["var x = g:dict_empty.member"], 'E716:', 1)
1945 1954
1946 CheckDefExecFailure(['var x: dict<number> = #{a: 234, b: "1"}'], 'E1012:', 1) 1955 CheckDefExecFailure(['var x: dict<number> = {a: 234, b: "1"}'], 'E1012:', 1)
1947 CheckDefExecFailure(['var x: dict<number> = #{a: "x", b: 134}'], 'E1012:', 1) 1956 CheckDefExecFailure(['var x: dict<number> = {a: "x", b: 134}'], 'E1012:', 1)
1948 CheckDefExecFailure(['var x: dict<string> = #{a: 234, b: "1"}'], 'E1012:', 1) 1957 CheckDefExecFailure(['var x: dict<string> = {a: 234, b: "1"}'], 'E1012:', 1)
1949 CheckDefExecFailure(['var x: dict<string> = #{a: "x", b: 134}'], 'E1012:', 1) 1958 CheckDefExecFailure(['var x: dict<string> = {a: "x", b: 134}'], 'E1012:', 1)
1950 1959
1951 CheckDefFailure(['var x = ({'], 'E723:', 2) 1960 CheckDefFailure(['var x = ({'], 'E723:', 2)
1952 CheckDefExecFailure(['{}[getftype("")]'], 'E716: Key not present in Dictionary: ""', 1) 1961 CheckDefExecFailure(['{}[getftype("")]'], 'E716: Key not present in Dictionary: ""', 1)
1953 enddef 1962 enddef
1954 1963
1955 def Test_expr7_dict_vim9script() 1964 def Test_expr7_dict_vim9script()
1956 var lines =<< trim END 1965 var lines =<< trim END
1957 vim9script 1966 vim9script
1958 var d = { 1967 var d = {
1959 'one': 1968 ['one']:
1960 1, 1969 1,
1961 'two': 2, 1970 ['two']: 2,
1962 } 1971 }
1963 assert_equal({'one': 1, 'two': 2}, d) 1972 assert_equal({one: 1, two: 2}, d)
1964 1973
1965 d = { # comment 1974 d = { # comment
1966 'one': 1975 ['one']:
1967 # comment 1976 # comment
1968 1977
1969 1, 1978 1,
1970 # comment 1979 # comment
1971 # comment 1980 # comment
1972 'two': 2, 1981 ['two']: 2,
1973 } 1982 }
1974 assert_equal({'one': 1, 'two': 2}, d) 1983 assert_equal({one: 1, two: 2}, d)
1975 END 1984 END
1976 CheckScriptSuccess(lines) 1985 CheckScriptSuccess(lines)
1977 1986
1978 lines =<< trim END 1987 lines =<< trim END
1979 vim9script 1988 vim9script
1980 var d = { "one": "one", "two": "two", } 1989 var d = { ["one"]: "one", ["two"]: "two", }
1981 assert_equal({'one': 'one', 'two': 'two'}, d) 1990 assert_equal({one: 'one', two: 'two'}, d)
1982 END 1991 END
1983 CheckScriptSuccess(lines) 1992 CheckScriptSuccess(lines)
1984 1993
1985 lines =<< trim END 1994 lines =<< trim END
1986 vim9script 1995 vim9script
1987 var d = #{one: 1, 1996 var d = {one: 1,
1988 two: 2, 1997 two: 2,
1989 } 1998 }
1990 assert_equal({'one': 1, 'two': 2}, d) 1999 assert_equal({one: 1, two: 2}, d)
1991 END 2000 END
1992 CheckScriptSuccess(lines) 2001 CheckScriptSuccess(lines)
1993 2002
1994 lines =<< trim END 2003 lines =<< trim END
1995 vim9script 2004 vim9script
1996 var d = #{one:1, two: 2} 2005 var d = {one:1, two: 2}
1997 END 2006 END
1998 CheckScriptFailure(lines, 'E1069:', 2) 2007 CheckScriptFailure(lines, 'E1069:', 2)
1999 2008
2000 lines =<< trim END 2009 lines =<< trim END
2001 vim9script 2010 vim9script
2002 var d = #{one: 1,two: 2} 2011 var d = {one: 1,two: 2}
2003 END 2012 END
2004 CheckScriptFailure(lines, 'E1069:', 2) 2013 CheckScriptFailure(lines, 'E1069:', 2)
2005 2014
2006 lines =<< trim END 2015 lines =<< trim END
2007 vim9script 2016 vim9script
2008 var d = #{one : 1} 2017 var d = {one : 1}
2018 END
2019 CheckScriptFailure(lines, 'E1059:', 2)
2020
2021 lines =<< trim END
2022 vim9script
2023 var d = {one:1}
2024 END
2025 CheckScriptFailure(lines, 'E1069:', 2)
2026
2027 lines =<< trim END
2028 vim9script
2029 var d = {one: 1 , two: 2}
2009 END 2030 END
2010 CheckScriptFailure(lines, 'E1068:', 2) 2031 CheckScriptFailure(lines, 'E1068:', 2)
2011 2032
2012 lines =<< trim END 2033 lines =<< trim END
2013 vim9script
2014 var d = #{one:1}
2015 END
2016 CheckScriptFailure(lines, 'E1069:', 2)
2017
2018 lines =<< trim END
2019 vim9script
2020 var d = #{one: 1 , two: 2}
2021 END
2022 CheckScriptFailure(lines, 'E1068:', 2)
2023
2024 lines =<< trim END
2025 vim9script 2034 vim9script
2026 var l: dict<number> = #{a: 234, b: 'x'} 2035 var l: dict<number> = {a: 234, b: 'x'}
2027 END 2036 END
2028 CheckScriptFailure(lines, 'E1012:', 2) 2037 CheckScriptFailure(lines, 'E1012:', 2)
2029 lines =<< trim END 2038 lines =<< trim END
2030 vim9script 2039 vim9script
2031 var l: dict<number> = #{a: 'x', b: 234} 2040 var l: dict<number> = {a: 'x', b: 234}
2032 END 2041 END
2033 CheckScriptFailure(lines, 'E1012:', 2) 2042 CheckScriptFailure(lines, 'E1012:', 2)
2034 lines =<< trim END 2043 lines =<< trim END
2035 vim9script 2044 vim9script
2036 var l: dict<string> = #{a: 'x', b: 234} 2045 var l: dict<string> = {a: 'x', b: 234}
2037 END 2046 END
2038 CheckScriptFailure(lines, 'E1012:', 2) 2047 CheckScriptFailure(lines, 'E1012:', 2)
2039 lines =<< trim END 2048 lines =<< trim END
2040 vim9script 2049 vim9script
2041 var l: dict<string> = #{a: 234, b: 'x'} 2050 var l: dict<string> = {a: 234, b: 'x'}
2042 END 2051 END
2043 CheckScriptFailure(lines, 'E1012:', 2) 2052 CheckScriptFailure(lines, 'E1012:', 2)
2044 2053
2045 lines =<< trim END 2054 lines =<< trim END
2046 vim9script 2055 vim9script
2047 def Failing() 2056 def Failing()
2048 job_stop() 2057 job_stop()
2049 enddef 2058 enddef
2050 var dict = #{name: Failing} 2059 var dict = {name: Failing}
2051 END 2060 END
2052 if has('channel') 2061 if has('channel')
2053 CheckScriptFailure(lines, 'E119:', 1) 2062 CheckScriptFailure(lines, 'E119:', 1)
2054 else 2063 else
2055 CheckScriptFailure(lines, 'E117:', 1) 2064 CheckScriptFailure(lines, 'E117:', 1)
2065 assert_equal(1, d[ 2074 assert_equal(1, d[
2066 'one' 2075 'one'
2067 ]) 2076 ])
2068 assert_equal(1, d 2077 assert_equal(1, d
2069 .one) 2078 .one)
2070 d = {'1': 1, '_': 2} 2079 d = {1: 1, _: 2}
2071 assert_equal(1, d 2080 assert_equal(1, d
2072 .1) 2081 .1)
2073 assert_equal(2, d 2082 assert_equal(2, d
2074 ._) 2083 ._)
2075 2084
2076 # getting the one member should clear the dict after getting the item 2085 # getting the one member should clear the dict after getting the item
2077 assert_equal('one', #{one: 'one'}.one) 2086 assert_equal('one', {one: 'one'}.one)
2078 assert_equal('one', #{one: 'one'}[g:oneString]) 2087 assert_equal('one', {one: 'one'}[g:oneString])
2079 2088
2080 CheckDefFailure(["var x = g:dict_one.#$!"], 'E1002:', 1) 2089 CheckDefFailure(["var x = g:dict_one.#$!"], 'E1002:', 1)
2081 CheckDefExecFailure(["var d: dict<any>", "echo d['a']"], 'E716:', 2) 2090 CheckDefExecFailure(["var d: dict<any>", "echo d['a']"], 'E716:', 2)
2082 CheckDefExecFailure(["var d: dict<number>", "d = g:list_empty"], 'E1012: Type mismatch; expected dict<number> but got list<unknown>', 2) 2091 CheckDefExecFailure(["var d: dict<number>", "d = g:list_empty"], 'E1012: Type mismatch; expected dict<number> but got list<unknown>', 2)
2083 enddef 2092 enddef
2139 assert_equal([1, 2, 3], g:testlist[1:-1]) 2148 assert_equal([1, 2, 3], g:testlist[1:-1])
2140 assert_equal([1], g:testlist[1:-3]) 2149 assert_equal([1], g:testlist[1:-3])
2141 assert_equal([], g:testlist[1:-4]) 2150 assert_equal([], g:testlist[1:-4])
2142 assert_equal([], g:testlist[1:-9]) 2151 assert_equal([], g:testlist[1:-9])
2143 2152
2144 g:testdict = #{a: 1, b: 2} 2153 g:testdict = {a: 1, b: 2}
2145 assert_equal(1, g:testdict['a']) 2154 assert_equal(1, g:testdict['a'])
2146 assert_equal(2, g:testdict['b']) 2155 assert_equal(2, g:testdict['b'])
2147 END 2156 END
2148 2157
2149 CheckDefSuccess(lines) 2158 CheckDefSuccess(lines)
2170 enddef 2179 enddef
2171 2180
2172 def Test_expr_member_vim9script() 2181 def Test_expr_member_vim9script()
2173 var lines =<< trim END 2182 var lines =<< trim END
2174 vim9script 2183 vim9script
2175 var d = #{one: 2184 var d = {one:
2176 'one', 2185 'one',
2177 two: 'two', 2186 two: 'two',
2178 1: 1, 2187 1: 1,
2179 _: 2} 2188 _: 2}
2180 assert_equal('one', d.one) 2189 assert_equal('one', d.one)
2404 assert_equal(true, !test_null_partial()) 2413 assert_equal(true, !test_null_partial())
2405 assert_equal(false, !{-> 'yes'}) 2414 assert_equal(false, !{-> 'yes'})
2406 2415
2407 assert_equal(true, !test_null_dict()) 2416 assert_equal(true, !test_null_dict())
2408 assert_equal(true, !{}) 2417 assert_equal(true, !{})
2409 assert_equal(false, !{'yes': 'no'}) 2418 assert_equal(false, !{yes: 'no'})
2410 2419
2411 if has('channel') 2420 if has('channel')
2412 assert_equal(true, !test_null_job()) 2421 assert_equal(true, !test_null_job())
2413 assert_equal(true, !test_null_channel()) 2422 assert_equal(true, !test_null_channel())
2414 endif 2423 endif
2431 2440
2432 call CheckDefFailure(["var x = -'xx'"], "E1030:", 1) 2441 call CheckDefFailure(["var x = -'xx'"], "E1030:", 1)
2433 call CheckDefFailure(["var x = +'xx'"], "E1030:", 1) 2442 call CheckDefFailure(["var x = +'xx'"], "E1030:", 1)
2434 call CheckDefFailure(["var x = -0z12"], "E974:", 1) 2443 call CheckDefFailure(["var x = -0z12"], "E974:", 1)
2435 call CheckDefExecFailure(["var x = -[8]"], "E39:", 1) 2444 call CheckDefExecFailure(["var x = -[8]"], "E39:", 1)
2436 call CheckDefExecFailure(["var x = -{'a': 1}"], "E39:", 1) 2445 call CheckDefExecFailure(["var x = -{a: 1}"], "E39:", 1)
2437 2446
2438 call CheckDefFailure(["var x = @"], "E1002:", 1) 2447 call CheckDefFailure(["var x = @"], "E1002:", 1)
2439 call CheckDefFailure(["var x = @<"], "E354:", 1) 2448 call CheckDefFailure(["var x = @<"], "E354:", 1)
2440 2449
2441 call CheckDefFailure(["var x = [1, 2"], "E697:", 2) 2450 call CheckDefFailure(["var x = [1, 2"], "E697:", 2)
2462 call CheckDefFailure(["var x = ''", "var y = x.memb"], 'E715:', 2) 2471 call CheckDefFailure(["var x = ''", "var y = x.memb"], 'E715:', 2)
2463 2472
2464 call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: ->', 1) 2473 call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: ->', 1)
2465 2474
2466 call CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2) 2475 call CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2)
2467 call CheckDefExecFailure(["#{a: 1->len()"], 'E722:', 1) 2476 call CheckDefExecFailure(["{a: 1->len()"], 'E451:', 1)
2468 call CheckDefExecFailure(["{'a': 1->len()"], 'E723:', 2) 2477 call CheckDefExecFailure(["{['a']: 1->len()"], 'E723:', 2)
2469 endfunc 2478 endfunc
2470 2479
2471 let g:Funcrefs = [function('add')] 2480 let g:Funcrefs = [function('add')]
2472 2481
2473 func CallMe(arg) 2482 func CallMe(arg)
2505 l = [2, 5] 2514 l = [2, 5]
2506 l->{l -> add(l, 8)}() 2515 l->{l -> add(l, 8)}()
2507 assert_equal([2, 5, 8], l) 2516 assert_equal([2, 5, 8], l)
2508 2517
2509 # dict member 2518 # dict member
2510 var d = #{key: 123} 2519 var d = {key: 123}
2511 assert_equal(123, d.key) 2520 assert_equal(123, d.key)
2512 enddef 2521 enddef
2513 2522
2514 def Test_expr7_string_subscript() 2523 def Test_expr7_string_subscript()
2515 var lines =<< trim END 2524 var lines =<< trim END
2592 enddef 2601 enddef
2593 2602
2594 def Test_expr7_dict_subscript() 2603 def Test_expr7_dict_subscript()
2595 var lines =<< trim END 2604 var lines =<< trim END
2596 vim9script 2605 vim9script
2597 var l = [#{lnum: 2}, #{lnum: 1}] 2606 var l = [{lnum: 2}, {lnum: 1}]
2598 var res = l[0].lnum > l[1].lnum 2607 var res = l[0].lnum > l[1].lnum
2599 assert_true(res) 2608 assert_true(res)
2600 END 2609 END
2601 CheckScriptSuccess(lines) 2610 CheckScriptSuccess(lines)
2602 enddef 2611 enddef
2627 assert_equal(['0', '1', '2'], l) 2636 assert_equal(['0', '1', '2'], l)
2628 2637
2629 assert_equal('1', l[ 2638 assert_equal('1', l[
2630 1]) 2639 1])
2631 2640
2632 var d = #{one: 33} 2641 var d = {one: 33}
2633 assert_equal(33, d. 2642 assert_equal(33, d.
2634 one) 2643 one)
2635 enddef 2644 enddef
2636 2645
2637 def Test_expr7_method_call() 2646 def Test_expr7_method_call()
2641 "third"->append(2) 2650 "third"->append(2)
2642 assert_equal(['first', 'second', 'third', 'last'], getline(1, '$')) 2651 assert_equal(['first', 'second', 'third', 'last'], getline(1, '$'))
2643 bwipe! 2652 bwipe!
2644 2653
2645 var bufnr = bufnr() 2654 var bufnr = bufnr()
2646 var loclist = [#{bufnr: bufnr, lnum: 42, col: 17, text: 'wrong'}] 2655 var loclist = [{bufnr: bufnr, lnum: 42, col: 17, text: 'wrong'}]
2647 loclist->setloclist(0) 2656 loclist->setloclist(0)
2648 assert_equal([#{bufnr: bufnr, 2657 assert_equal([{bufnr: bufnr,
2649 lnum: 42, 2658 lnum: 42,
2650 col: 17, 2659 col: 17,
2651 text: 'wrong', 2660 text: 'wrong',
2652 pattern: '', 2661 pattern: '',
2653 valid: 1, 2662 valid: 1,
2655 nr: 0, 2664 nr: 0,
2656 type: '', 2665 type: '',
2657 module: ''} 2666 module: ''}
2658 ], getloclist(0)) 2667 ], getloclist(0))
2659 2668
2660 var result: bool = get(#{n: 0}, 'n', 0) 2669 var result: bool = get({n: 0}, 'n', 0)
2661 assert_equal(false, result) 2670 assert_equal(false, result)
2662 enddef 2671 enddef
2663 2672
2664 func Test_expr7_trailing_fails() 2673 func Test_expr7_trailing_fails()
2665 call CheckDefFailure(['var l = [2]', 'l->{l -> add(l, 8)}'], 'E107:', 2) 2674 call CheckDefFailure(['var l = [2]', 'l->{l -> add(l, 8)}'], 'E107:', 2)