annotate src/testdir/test_vim9_typealias.vim @ 33933:aceaf677dd92 v9.0.2163

patch 9.0.2163: Vim9: type can be assigned to list/dict Commit: https://github.com/vim/vim/commit/fa831102c38c9192edf3aaf0cbcaff9ee5e006ac Author: Ernie Rael <errael@raelity.com> Date: Thu Dec 14 20:06:39 2023 +0100 patch 9.0.2163: Vim9: type can be assigned to list/dict Problem: Vim9: type can be assigned to list/dict Solution: Prevent assigning a `type` to a `list` or `dict` closes: #13683 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 14 Dec 2023 20:15:08 +0100
parents ccdb948c7273
children bdd408288d95
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
1 " Test Vim9 type aliases
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
2
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
3 source check.vim
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
4 import './vim9.vim' as v9
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
5
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
6 " Test for :type command to create type aliases
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
7 def Test_typealias()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
8 # Use type alias at script level
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
9 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
11 type ListOfStrings = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
12 def Foo(a: ListOfStrings): ListOfStrings
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
13 return a
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
14 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
15 var b: ListOfStrings = ['a', 'b']
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
16 assert_equal(['a', 'b'], b)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
17 assert_equal(['e', 'f'], Foo(['e', 'f']))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
18 assert_equal('typealias<list<string>>', typename(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
19 assert_equal(v:t_typealias, type(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
20 assert_equal('ListOfStrings', string(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
21 assert_equal(false, null == ListOfStrings)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
22 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
23 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
24
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
25 # Use type alias at def function level
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
26 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
27 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
28 type ListOfStrings = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
29 def Foo(a: ListOfStrings): ListOfStrings
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
30 return a
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
31 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
32 def Bar()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
33 var c: ListOfStrings = ['c', 'd']
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
34 assert_equal(['c', 'd'], c)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
35 assert_equal(['e', 'f'], Foo(['e', 'f']))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
36 assert_equal('typealias<list<string>>', typename(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
37 assert_equal(v:t_typealias, type(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
38 assert_equal('ListOfStrings', string(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
39 assert_equal(false, null == ListOfStrings)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
40 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
41 Bar()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
42 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
43 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
44
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
45 # Use :type outside a Vim9 script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
46 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
47 type Index = number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
48 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
49 v9.CheckSourceFailure(lines, 'E1393: Type can only be defined in Vim9 script', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
50
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
51 # Use :type without any arguments
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
52 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
53 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
54 type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
55 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
56 v9.CheckSourceFailure(lines, 'E1397: Missing type alias name', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
57
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
58 # Use :type with a name but no type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
59 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
60 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
61 type MyType
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
62 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
63 v9.CheckSourceFailure(lines, "E398: Missing '=': ", 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
64
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
65 # Use :type with a name but no type following "="
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
66 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
67 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
68 type MyType =
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
69 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
70 v9.CheckSourceFailure(lines, 'E1398: Missing type alias type', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
71
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
72 # No space before or after "="
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
73 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
74 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
75 type MyType=number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
76 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
77 v9.CheckSourceFailure(lines, 'E1315: White space required after name: MyType=number', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
78
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
79 # No space after "="
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
80 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
81 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
82 type MyType =number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
83 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
84 v9.CheckSourceFailure(lines, "E1069: White space required after '=': =number", 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
85
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
86 # type alias without "="
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
87 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
88 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
89 type Index number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
90 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
91 v9.CheckSourceFailure(lines, "E398: Missing '=': number", 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
92
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
93 # type alias for a non-existing type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
94 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
95 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
96 type Index = integer
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
97 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
98 v9.CheckSourceFailure(lines, 'E1010: Type not recognized: integer', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
99
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
100 # type alias starting with lower-case letter
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
101 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
102 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
103 type index = number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
104 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
105 v9.CheckSourceFailure(lines, 'E1394: Type name must start with an uppercase letter: index = number', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
106
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
107 # No white space following the alias name
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
108 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
109 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
110 type Index:number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
111 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
112 v9.CheckSourceFailure(lines, 'E1315: White space required after name: Index:number', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
113
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
114 # something following the type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
115 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
116 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
117 type ListOfNums = list<number> string
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
118 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
119 v9.CheckSourceFailure(lines, 'E488: Trailing characters: string', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
120
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
121 # type alias name collides with a variable name
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
122 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
123 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
124 var ListOfNums: number = 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
125 type ListOfNums = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
126 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
127 v9.CheckSourceFailure(lines, 'E1041: Redefining script item: "ListOfNums"', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
128
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
129 # duplicate type alias name
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
130 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
131 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
132 type MyList = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
133 type MyList = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
134 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
135 v9.CheckSourceFailure(lines, 'E1396: Type alias "MyList" already exists', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
136
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
137 # def function argument name collision with a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
138 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
139 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
140 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
141 def Foo(A: number)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
142 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
143 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
144 v9.CheckSourceFailure(lines, 'E1168: Argument already declared in the script: A: number)', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
145
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
146 # def function local variable name collision with a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
147 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
148 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
149 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
150 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
151 var A: number = 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
152 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
153 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
154 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
155 v9.CheckSourceFailure(lines, 'E1054: Variable already declared in the script: A', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
156
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
157 # type alias a variable
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
158 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
159 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
160 var A: list<number> = []
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
161 type B = A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
162 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
163 v9.CheckSourceFailure(lines, 'E1010: Type not recognized: A', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
164
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
165 # type alias a class
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
166 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
167 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
168 class C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
169 endclass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
170 type AC = C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
171 assert_equal('class<C>', typename(AC))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
172 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
173 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
174
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
175 # Sourcing a script twice (which will free script local variables)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
176 # Uses "lines" from the previous test
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
177 new
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
178 setline(1, lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
179 :source
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
180 :source
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
181 bw!
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
182
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
183 # type alias a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
184 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
185 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
186 type A = string
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
187 type B = A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
188 var b: B = 'abc'
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
189 assert_equal('abc', b)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
190 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
191 var c: B = 'def'
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
192 assert_equal('def', c)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
193 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
194 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
195 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
196 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
197
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
198 # Assigning to a type alias (script level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
199 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
200 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
201 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
202 MyType = [1, 2, 3]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
203 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
204 v9.CheckSourceFailure(lines, 'E1395: Type alias "MyType" cannot be modified', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
205
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
206 # Assigning a type alias (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
207 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
208 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
209 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
210 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
211 var x = A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
212 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
213 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
214 END
33924
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
215 v9.CheckSourceFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
216
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
217 # Using type alias in an expression (script level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
218 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
219 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
220 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
221 assert_fails('var m = MyType', 'E1403: Type alias "MyType" cannot be used as a value')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
222 assert_fails('var i = MyType + 1', 'E1400: Using type alias "MyType" as a Number')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
223 assert_fails('var f = 1.0 + MyType', 'E1400: Using type alias "MyType" as a Number')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
224 assert_fails('MyType += 10', 'E1395: Type alias "MyType" cannot be modified')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
225 assert_fails('var x = $"-{MyType}-"', 'E1402: Using type alias "MyType" as a String')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
226 assert_fails('var x = MyType[1]', 'E909: Cannot index a special variable')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
227 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
228 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
229
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
230 # Using type alias in an expression (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
231 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
232 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
233 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
234 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
235 var x = MyType + 1
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
236 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
237 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
238 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
239 v9.CheckSourceFailure(lines, 'E1051: Wrong argument type for +', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
240
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
241 # Using type alias in an expression (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
242 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
243 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
244 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
245 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
246 MyType = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
247 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
248 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
249 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
250 v9.CheckSourceFailure(lines, 'E46: Cannot change read-only variable "MyType"', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
251
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
252 # Using type alias in an expression (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
253 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
254 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
255 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
256 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
257 MyType += 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
258 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
259 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
260 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
261 v9.CheckSourceFailure(lines, 'E46: Cannot change read-only variable "MyType"', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
262
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
263 # Convert type alias to a string (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
264 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
265 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
266 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
267 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
268 var x = $"-{MyType}-"
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
269 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
270 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
271 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
272 v9.CheckSourceFailure(lines, 'E1105: Cannot convert typealias to string', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
273
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
274 # Using type alias as a float
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
275 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
276 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
277 type B = number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
278 sort([1.1, B], 'f')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
279 END
33933
aceaf677dd92 patch 9.0.2163: Vim9: type can be assigned to list/dict
Christian Brabandt <cb@256bit.org>
parents: 33924
diff changeset
280 v9.CheckSourceFailure(lines, 'E1403: Type alias "B" cannot be used as a value', 3)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
281
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
282 # Creating a typealias in a def function
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
283 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
284 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
285 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
286 var n: number = 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
287 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
288 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
289 defcompile
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
290 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
291 v9.CheckSourceFailure(lines, 'E1399: Type can only be used in a script', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
292
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
293 # json_encode should fail with a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
294 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
295 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
296 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
297 var x = json_encode(A)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
298 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
299 v9.CheckSourceFailure(lines, 'E1161: Cannot json encode a typealias', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
300
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
301 # Comparing type alias with a number (script level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
302 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
303 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
304 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
305 var n: number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
306 var x = A == n
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
307 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
308 v9.CheckSourceFailure(lines, 'E1072: Cannot compare typealias with number', 4)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
309
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
310 # Comparing type alias with a number (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
311 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
312 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
313 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
314 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
315 var n: number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
316 var x = A == n
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
317 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
318 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
319 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
320 v9.CheckSourceFailure(lines, 'E1072: Cannot compare typealias with number', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
321
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
322 # casting a number to a type alias (script level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
323 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
324 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
325 type MyType = bool
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
326 assert_equal(true, <MyType>1 == true)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
327 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
328 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
329 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
330
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
331 " Test for exporting and importing type aliases
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
332 def Test_typealias_import()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
333 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
334 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
335 export type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
336 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
337 writefile(lines, 'Xtypeexport.vim', 'D')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
338
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
339 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
340 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
341 import './Xtypeexport.vim' as A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
342
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
343 var myList: A.MyType = [1, 2, 3]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
344 def Foo(l: A.MyType)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
345 assert_equal([1, 2, 3], l)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
346 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
347 Foo(myList)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
348 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
349 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
350
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
351 # Use a non existing type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
352 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
353 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
354 import './Xtypeexport.vim' as A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
355
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
356 var myNum: A.SomeType = 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
357 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
358 v9.CheckScriptFailure(lines, 'E1010: Type not recognized: A.SomeType = 10', 4)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
359
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
360 # Use a type alias that is not exported
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
361 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
362 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
363 type NewType = dict<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
364 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
365 writefile(lines, 'Xtypeexport2.vim', 'D')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
366 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
367 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
368 import './Xtypeexport2.vim' as A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
369
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
370 var myDict: A.NewType = {}
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
371 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
372 v9.CheckScriptFailure(lines, 'E1049: Item not exported in script: NewType', 4)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
373
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
374 # Using the same name as an imported type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
375 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
376 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
377 export type MyType2 = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
378 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
379 writefile(lines, 'Xtypeexport3.vim', 'D')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
380 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
381 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
382 import './Xtypeexport3.vim' as A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
383
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
384 type MyType2 = A.MyType2
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
385 var myList1: A.MyType2 = [1, 2, 3]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
386 var myList2: MyType2 = [4, 5, 6]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
387 assert_equal([1, 2, 3], myList1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
388 assert_equal([4, 5, 6], myList2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
389 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
390 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
391
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
392 # Using an exported class to create a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
393 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
394 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
395 export class MyClass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
396 this.val = 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
397 endclass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
398 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
399 writefile(lines, 'Xtypeexport4.vim', 'D')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
400 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
401 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
402 import './Xtypeexport4.vim' as T
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
403
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
404 type MyType3 = T.MyClass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
405 var c: MyType3 = MyType3.new()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
406 assert_equal(10, c.val)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
407 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
408 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
409 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
410
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
411 " Test for using typealias as a def function argument and return type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
412 def Test_typealias_func_argument()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
413 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
414 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
415 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
416 def Foo(l: A): A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
417 assert_equal([1, 2], l)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
418 return l
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
419 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
420 var x: A = [1, 2]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
421 assert_equal([1, 2], Foo(x))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
422 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
423 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
424
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
425 # passing a type alias variable to a function expecting a specific type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
426 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
427 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
428 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
429 def Foo(l: list<number>)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
430 assert_equal([1, 2], l)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
431 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
432 var x: A = [1, 2]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
433 Foo(x)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
434 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
435 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
436
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
437 # passing a type alias variable to a function expecting any
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
438 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
439 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
440 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
441 def Foo(l: any)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
442 assert_equal([1, 2], l)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
443 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
444 var x: A = [1, 2]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
445 Foo(x)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
446 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
447 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
448 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
449
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
450 " Using a type alias with a builtin function
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
451 def Test_typealias_with_builtin_functions()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
452 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
453 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
454 type A = list<func>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
455 assert_equal(0, empty(A))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
456 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
457 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
458
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
459 # Using a type alias with len()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
460 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
461 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
462 type A = list<func>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
463 var x = len(A)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
464 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
465 v9.CheckScriptFailure(lines, 'E701: Invalid type for len()', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
466
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
467 # Using a type alias with len()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
468 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
469 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
470 type A = list<func>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
471 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
472 var x = len(A)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
473 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
474 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
475 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
476 v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list<any> but got typealias', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
477
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
478 # Using a type alias with eval()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
479 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
480 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
481 type A = number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
482 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
483 var x = eval("A")
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
484 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
485 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
486 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
487 v9.CheckScriptFailure(lines, 'E1403: Type alias "A" cannot be used as a value', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
488 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
489
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
490 " Test for type alias refcount
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
491 def Test_typealias_refcount()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
492 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
493 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
494 type A = list<func>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
495 assert_equal(1, test_refcount(A))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
496 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
497 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
498
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
499 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
500 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
501 type B = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
502 var x: B = []
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
503 assert_equal(1, test_refcount(B))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
504 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
505 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
506 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
507
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
508 " Test for using instanceof() with a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
509 def Test_typealias_instanceof()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
510 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
511 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
512 class C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
513 endclass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
514
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
515 type Ctype = C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
516 var o = C.new()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
517 assert_equal(1, instanceof(o, Ctype))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
518 type Ntype = number
33924
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
519 assert_fails('instanceof(o, Ntype)', 'E693: Class or class typealias required for argument 2')
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
520 assert_fails('instanceof(o, Ctype, Ntype)', 'E693: Class or class typealias required for argument 3')
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
521
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
522 def F()
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
523 var x = instanceof(o, Ntype)
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
524 enddef
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
525 assert_fails('F()', 'E693: Class or class typealias required for argument 2')
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
526
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
527 def G(): bool
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
528 return instanceof(o, Ctype)
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
529 enddef
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
530 assert_equal(1, G())
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
531 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
532 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
533 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
534
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
535 " Test for type aliasing a class
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
536 def Test_typealias_class()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
537 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
538 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
539 class C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
540 this.color = 'green'
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
541 endclass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
542 type MyClass = C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
543 var o: MyClass = MyClass.new()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
544 assert_equal('green', o.color)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
545 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
546 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
547 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
548
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
549 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker