Mercurial > vim
comparison src/testdir/test_vim9_class.vim @ 33343:41b50abddeea v9.0.1935
patch 9.0.1935: Vim9: not consistent error messages
Commit: https://github.com/vim/vim/commit/7fe8f43f49f4fa6f024d0e0ea76d3df5b62a0879
Author: RestorerZ <restorer@mail2k.ru>
Date: Sun Sep 24 23:21:24 2023 +0200
patch 9.0.1935: Vim9: not consistent error messages
Problem: Vim9: not consistent error messages
Solution: Make error messages more consistent. Use "variable" for
(object/class) member
closes: #13155
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: RestorerZ <restorer@mail2k.ru>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 24 Sep 2023 23:30:06 +0200 |
parents | 19b4f85c2649 |
children | 3e9a91624b40 |
comparison
equal
deleted
inserted
replaced
33342:bc1076074f49 | 33343:41b50abddeea |
---|---|
130 this.state = 0 | 130 this.state = 0 |
131 enddef | 131 enddef |
132 endclass | 132 endclass |
133 var obj = Something.new() | 133 var obj = Something.new() |
134 END | 134 END |
135 v9.CheckSourceFailure(lines, 'E1326: Member not found on object "Something": state') | 135 v9.CheckSourceFailure(lines, 'E1326: Variable not found on object "Something": state') |
136 | 136 |
137 # Space before ":" in a member variable declaration | 137 # Space before ":" in a member variable declaration |
138 lines =<< trim END | 138 lines =<< trim END |
139 vim9script | 139 vim9script |
140 class Something | 140 class Something |
561 | 561 |
562 var inner_obj = Inner.new('a') | 562 var inner_obj = Inner.new('a') |
563 var outer_obj = Outer.new(inner_obj) | 563 var outer_obj = Outer.new(inner_obj) |
564 F(outer_obj) | 564 F(outer_obj) |
565 END | 565 END |
566 v9.CheckSourceFailure(lines, 'E1333: Cannot access private member: _value') | 566 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable: _value') |
567 | 567 |
568 # Try modifying a non-existing variable using an "any" object | 568 # Try modifying a non-existing variable using an "any" object |
569 lines =<< trim END | 569 lines =<< trim END |
570 vim9script | 570 vim9script |
571 | 571 |
583 | 583 |
584 var inner_obj = Inner.new('a') | 584 var inner_obj = Inner.new('a') |
585 var outer_obj = Outer.new(inner_obj) | 585 var outer_obj = Outer.new(inner_obj) |
586 F(outer_obj) | 586 F(outer_obj) |
587 END | 587 END |
588 v9.CheckSourceFailure(lines, 'E1326: Member not found on object "Inner": someval') | 588 v9.CheckSourceFailure(lines, 'E1326: Variable not found on object "Inner": someval') |
589 enddef | 589 enddef |
590 | 590 |
591 " Nested assignment to a object variable which is of another class type | 591 " Nested assignment to a object variable which is of another class type |
592 def Test_assignment_nested_type() | 592 def Test_assignment_nested_type() |
593 var lines =<< trim END | 593 var lines =<< trim END |
1007 vim9script | 1007 vim9script |
1008 class A | 1008 class A |
1009 this.value: void | 1009 this.value: void |
1010 endclass | 1010 endclass |
1011 END | 1011 END |
1012 v9.CheckSourceFailure(lines, 'E1330: Invalid type for object member: void') | 1012 v9.CheckSourceFailure(lines, 'E1330: Invalid type for object variable: void') |
1013 enddef | 1013 enddef |
1014 | 1014 |
1015 " Test for instance variable access | 1015 " Test for instance variable access |
1016 def Test_instance_variable_access() | 1016 def Test_instance_variable_access() |
1017 var lines =<< trim END | 1017 var lines =<< trim END |
1152 class A | 1152 class A |
1153 public this.val = 1 | 1153 public this.val = 1 |
1154 endclass | 1154 endclass |
1155 A.val = 1 | 1155 A.val = 1 |
1156 END | 1156 END |
1157 v9.CheckSourceFailure(lines, 'E1376: Object member "val" accessible only using class "A" object') | 1157 v9.CheckSourceFailure(lines, 'E1376: Object variable "val" accessible only using class "A" object') |
1158 | 1158 |
1159 # Read a instance variable using the class name in the script context | 1159 # Read a instance variable using the class name in the script context |
1160 lines =<< trim END | 1160 lines =<< trim END |
1161 vim9script | 1161 vim9script |
1162 class A | 1162 class A |
1163 public this.val = 1 | 1163 public this.val = 1 |
1164 endclass | 1164 endclass |
1165 var i = A.val | 1165 var i = A.val |
1166 END | 1166 END |
1167 v9.CheckSourceFailure(lines, 'E1376: Object member "val" accessible only using class "A" object') | 1167 v9.CheckSourceFailure(lines, 'E1376: Object variable "val" accessible only using class "A" object') |
1168 | 1168 |
1169 # Modify a instance variable using the class name in a def function | 1169 # Modify a instance variable using the class name in a def function |
1170 lines =<< trim END | 1170 lines =<< trim END |
1171 vim9script | 1171 vim9script |
1172 class A | 1172 class A |
1175 def T() | 1175 def T() |
1176 A.val = 1 | 1176 A.val = 1 |
1177 enddef | 1177 enddef |
1178 T() | 1178 T() |
1179 END | 1179 END |
1180 v9.CheckSourceFailure(lines, 'E1376: Object member "val" accessible only using class "A" object') | 1180 v9.CheckSourceFailure(lines, 'E1376: Object variable "val" accessible only using class "A" object') |
1181 | 1181 |
1182 # Read a instance variable using the class name in a def function | 1182 # Read a instance variable using the class name in a def function |
1183 lines =<< trim END | 1183 lines =<< trim END |
1184 vim9script | 1184 vim9script |
1185 class A | 1185 class A |
1188 def T() | 1188 def T() |
1189 var i = A.val | 1189 var i = A.val |
1190 enddef | 1190 enddef |
1191 T() | 1191 T() |
1192 END | 1192 END |
1193 v9.CheckSourceFailure(lines, 'E1376: Object member "val" accessible only using class "A" object') | 1193 v9.CheckSourceFailure(lines, 'E1376: Object variable "val" accessible only using class "A" object') |
1194 | 1194 |
1195 # Access from child class extending a class: | 1195 # Access from child class extending a class: |
1196 lines =<< trim END | 1196 lines =<< trim END |
1197 vim9script | 1197 vim9script |
1198 class A | 1198 class A |
1235 vim9script | 1235 vim9script |
1236 class Something | 1236 class Something |
1237 static this.val = 1 | 1237 static this.val = 1 |
1238 endclass | 1238 endclass |
1239 END | 1239 END |
1240 v9.CheckSourceFailure(lines, 'E1368: Static cannot be followed by "this" in a member name') | 1240 v9.CheckSourceFailure(lines, 'E1368: Static cannot be followed by "this" in a variable name') |
1241 | 1241 |
1242 # Test for "static" cannot be followed by "public". | 1242 # Test for "static" cannot be followed by "public". |
1243 lines =<< trim END | 1243 lines =<< trim END |
1244 vim9script | 1244 vim9script |
1245 class Something | 1245 class Something |
1280 endclass | 1280 endclass |
1281 | 1281 |
1282 var b = B.new() | 1282 var b = B.new() |
1283 b.Foo() | 1283 b.Foo() |
1284 END | 1284 END |
1285 v9.CheckSourceFailure(lines, 'E1333: Cannot access private member: _priv_class_var') | 1285 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable: _priv_class_var') |
1286 | 1286 |
1287 # A private class variable cannot be modified from a child class | 1287 # A private class variable cannot be modified from a child class |
1288 lines =<< trim END | 1288 lines =<< trim END |
1289 vim9script | 1289 vim9script |
1290 class A | 1290 class A |
1298 endclass | 1298 endclass |
1299 | 1299 |
1300 var b = B.new() | 1300 var b = B.new() |
1301 b.Foo() | 1301 b.Foo() |
1302 END | 1302 END |
1303 v9.CheckSourceFailure(lines, 'E1333: Cannot access private member: _priv_class_var') | 1303 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable: _priv_class_var') |
1304 | 1304 |
1305 # Access from child class extending a class and from script context | 1305 # Access from child class extending a class and from script context |
1306 lines =<< trim END | 1306 lines =<< trim END |
1307 vim9script | 1307 vim9script |
1308 class A | 1308 class A |
1687 class A | 1687 class A |
1688 endclass | 1688 endclass |
1689 var a = A.new() | 1689 var a = A.new() |
1690 var v = a.bar | 1690 var v = a.bar |
1691 END | 1691 END |
1692 v9.CheckSourceFailure(lines, 'E1326: Member not found on object "A": bar') | 1692 v9.CheckSourceFailure(lines, 'E1326: Variable not found on object "A": bar') |
1693 enddef | 1693 enddef |
1694 | 1694 |
1695 func Test_class_garbagecollect() | 1695 func Test_class_garbagecollect() |
1696 let lines =<< trim END | 1696 let lines =<< trim END |
1697 vim9script | 1697 vim9script |
1879 enddef | 1879 enddef |
1880 endclass | 1880 endclass |
1881 | 1881 |
1882 defcompile C.new | 1882 defcompile C.new |
1883 END | 1883 END |
1884 v9.CheckSourceFailure(lines, 'E1370: Cannot define a "new" function as static') | 1884 v9.CheckSourceFailure(lines, 'E1370: Cannot define a "new" method as static') |
1885 | 1885 |
1886 # Trying to compile a function using a non-existing class variable | 1886 # Trying to compile a function using a non-existing class variable |
1887 lines =<< trim END | 1887 lines =<< trim END |
1888 vim9script | 1888 vim9script |
1889 defcompile x.Foo() | 1889 defcompile x.Foo() |
2101 def Method(nr: number) | 2101 def Method(nr: number) |
2102 echo nr | 2102 echo nr |
2103 enddef | 2103 enddef |
2104 endclass | 2104 endclass |
2105 END | 2105 END |
2106 v9.CheckSourceFailure(lines, 'E1348: Member "counter" of interface "Some" is not implemented') | 2106 v9.CheckSourceFailure(lines, 'E1348: Variable "counter" of interface "Some" is not implemented') |
2107 | 2107 |
2108 lines =<< trim END | 2108 lines =<< trim END |
2109 vim9script | 2109 vim9script |
2110 | 2110 |
2111 interface Some | 2111 interface Some |
2716 this.new(3) | 2716 this.new(3) |
2717 enddef | 2717 enddef |
2718 endclass | 2718 endclass |
2719 var c = Child.new() | 2719 var c = Child.new() |
2720 END | 2720 END |
2721 v9.CheckSourceFailure(lines, 'E1375: Class member "new" accessible only using class "Child"') | 2721 v9.CheckSourceFailure(lines, 'E1385: Class method "new" accessible only using class "Child"') |
2722 | 2722 |
2723 # base class with more than one object member | 2723 # base class with more than one object member |
2724 lines =<< trim END | 2724 lines =<< trim END |
2725 vim9script | 2725 vim9script |
2726 | 2726 |
3998 var oc = C.new() | 3998 var oc = C.new() |
3999 assert_equal(101, oa.AccessObject()) | 3999 assert_equal(101, oa.AccessObject()) |
4000 assert_equal(102, ob.AccessObject()) | 4000 assert_equal(102, ob.AccessObject()) |
4001 assert_equal(103, oc.AccessObject()) | 4001 assert_equal(103, oc.AccessObject()) |
4002 | 4002 |
4003 assert_fails('echo oc.AccessPrivateStaticThroughClassName()', 'E1333: Cannot access private member: _svar') | 4003 assert_fails('echo oc.AccessPrivateStaticThroughClassName()', 'E1333: Cannot access private variable: _svar') |
4004 | 4004 |
4005 # verify object properly resolves to correct static | 4005 # verify object properly resolves to correct static |
4006 assert_equal(1, oa.AccessStaticThroughObject()) | 4006 assert_equal(1, oa.AccessStaticThroughObject()) |
4007 assert_equal(1, ob.AccessStaticThroughObject()) | 4007 assert_equal(1, ob.AccessStaticThroughObject()) |
4008 assert_equal(1, oc.AccessStaticThroughObject()) | 4008 assert_equal(1, oc.AccessStaticThroughObject()) |
4018 class C | 4018 class C |
4019 this.val = 10 | 4019 this.val = 10 |
4020 this.val = 20 | 4020 this.val = 20 |
4021 endclass | 4021 endclass |
4022 END | 4022 END |
4023 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: val') | 4023 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val') |
4024 | 4024 |
4025 # Duplicate private member variable | 4025 # Duplicate private member variable |
4026 lines =<< trim END | 4026 lines =<< trim END |
4027 vim9script | 4027 vim9script |
4028 class C | 4028 class C |
4029 this._val = 10 | 4029 this._val = 10 |
4030 this._val = 20 | 4030 this._val = 20 |
4031 endclass | 4031 endclass |
4032 END | 4032 END |
4033 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: _val') | 4033 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val') |
4034 | 4034 |
4035 # Duplicate public member variable | 4035 # Duplicate public member variable |
4036 lines =<< trim END | 4036 lines =<< trim END |
4037 vim9script | 4037 vim9script |
4038 class C | 4038 class C |
4039 public this.val = 10 | 4039 public this.val = 10 |
4040 public this.val = 20 | 4040 public this.val = 20 |
4041 endclass | 4041 endclass |
4042 END | 4042 END |
4043 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: val') | 4043 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val') |
4044 | 4044 |
4045 # Duplicate private member variable | 4045 # Duplicate private member variable |
4046 lines =<< trim END | 4046 lines =<< trim END |
4047 vim9script | 4047 vim9script |
4048 class C | 4048 class C |
4049 this.val = 10 | 4049 this.val = 10 |
4050 this._val = 20 | 4050 this._val = 20 |
4051 endclass | 4051 endclass |
4052 END | 4052 END |
4053 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: _val') | 4053 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val') |
4054 | 4054 |
4055 # Duplicate public and private member variable | 4055 # Duplicate public and private member variable |
4056 lines =<< trim END | 4056 lines =<< trim END |
4057 vim9script | 4057 vim9script |
4058 class C | 4058 class C |
4059 this._val = 20 | 4059 this._val = 20 |
4060 public this.val = 10 | 4060 public this.val = 10 |
4061 endclass | 4061 endclass |
4062 END | 4062 END |
4063 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: val') | 4063 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val') |
4064 | 4064 |
4065 # Duplicate class member variable | 4065 # Duplicate class member variable |
4066 lines =<< trim END | 4066 lines =<< trim END |
4067 vim9script | 4067 vim9script |
4068 class C | 4068 class C |
4069 static s: string = "abc" | 4069 static s: string = "abc" |
4070 static _s: string = "def" | 4070 static _s: string = "def" |
4071 endclass | 4071 endclass |
4072 END | 4072 END |
4073 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: _s') | 4073 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _s') |
4074 | 4074 |
4075 # Duplicate public and private class member variable | 4075 # Duplicate public and private class member variable |
4076 lines =<< trim END | 4076 lines =<< trim END |
4077 vim9script | 4077 vim9script |
4078 class C | 4078 class C |
4079 public static s: string = "abc" | 4079 public static s: string = "abc" |
4080 static _s: string = "def" | 4080 static _s: string = "def" |
4081 endclass | 4081 endclass |
4082 END | 4082 END |
4083 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: _s') | 4083 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _s') |
4084 | 4084 |
4085 # Duplicate class and object member variable | 4085 # Duplicate class and object member variable |
4086 lines =<< trim END | 4086 lines =<< trim END |
4087 vim9script | 4087 vim9script |
4088 class C | 4088 class C |
4107 endclass | 4107 endclass |
4108 class C extends B | 4108 class C extends B |
4109 this.val = 20 | 4109 this.val = 20 |
4110 endclass | 4110 endclass |
4111 END | 4111 END |
4112 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: val') | 4112 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val') |
4113 | 4113 |
4114 # Duplicate object private member variable in a derived class | 4114 # Duplicate object private member variable in a derived class |
4115 lines =<< trim END | 4115 lines =<< trim END |
4116 vim9script | 4116 vim9script |
4117 class A | 4117 class A |
4121 endclass | 4121 endclass |
4122 class C extends B | 4122 class C extends B |
4123 this._val = 20 | 4123 this._val = 20 |
4124 endclass | 4124 endclass |
4125 END | 4125 END |
4126 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: _val') | 4126 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val') |
4127 | 4127 |
4128 # Duplicate object private member variable in a derived class | 4128 # Duplicate object private member variable in a derived class |
4129 lines =<< trim END | 4129 lines =<< trim END |
4130 vim9script | 4130 vim9script |
4131 class A | 4131 class A |
4135 endclass | 4135 endclass |
4136 class C extends B | 4136 class C extends B |
4137 this._val = 20 | 4137 this._val = 20 |
4138 endclass | 4138 endclass |
4139 END | 4139 END |
4140 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: _val') | 4140 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val') |
4141 | 4141 |
4142 # Duplicate object member variable in a derived class | 4142 # Duplicate object member variable in a derived class |
4143 lines =<< trim END | 4143 lines =<< trim END |
4144 vim9script | 4144 vim9script |
4145 class A | 4145 class A |
4149 endclass | 4149 endclass |
4150 class C extends B | 4150 class C extends B |
4151 this.val = 20 | 4151 this.val = 20 |
4152 endclass | 4152 endclass |
4153 END | 4153 END |
4154 v9.CheckSourceFailure(lines, 'E1369: Duplicate member: val') | 4154 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val') |
4155 | 4155 |
4156 # Two member variables with a common prefix | 4156 # Two member variables with a common prefix |
4157 lines =<< trim END | 4157 lines =<< trim END |
4158 vim9script | 4158 vim9script |
4159 class A | 4159 class A |
4179 var a = A.new() | 4179 var a = A.new() |
4180 a._val = 20 | 4180 a._val = 20 |
4181 enddef | 4181 enddef |
4182 T() | 4182 T() |
4183 END | 4183 END |
4184 v9.CheckSourceFailure(lines, 'E1333: Cannot access private member: _val') | 4184 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable: _val') |
4185 | 4185 |
4186 # access a non-existing private object member variable | 4186 # access a non-existing private object member variable |
4187 lines =<< trim END | 4187 lines =<< trim END |
4188 vim9script | 4188 vim9script |
4189 class A | 4189 class A |
4193 var a = A.new() | 4193 var a = A.new() |
4194 a._a = 1 | 4194 a._a = 1 |
4195 enddef | 4195 enddef |
4196 T() | 4196 T() |
4197 END | 4197 END |
4198 v9.CheckSourceFailure(lines, 'E1326: Member not found on object "A": _a') | 4198 v9.CheckSourceFailure(lines, 'E1326: Variable not found on object "A": _a') |
4199 | 4199 |
4200 # private static member variable | 4200 # private static member variable |
4201 lines =<< trim END | 4201 lines =<< trim END |
4202 vim9script | 4202 vim9script |
4203 class A | 4203 class A |
4207 var a = A.new() | 4207 var a = A.new() |
4208 var x = a._val | 4208 var x = a._val |
4209 enddef | 4209 enddef |
4210 T() | 4210 T() |
4211 END | 4211 END |
4212 v9.CheckSourceFailure(lines, 'E1375: Class member "_val" accessible only using class "A"') | 4212 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"') |
4213 | 4213 |
4214 # private static member variable | 4214 # private static member variable |
4215 lines =<< trim END | 4215 lines =<< trim END |
4216 vim9script | 4216 vim9script |
4217 class A | 4217 class A |
4221 var a = A.new() | 4221 var a = A.new() |
4222 a._val = 3 | 4222 a._val = 3 |
4223 enddef | 4223 enddef |
4224 T() | 4224 T() |
4225 END | 4225 END |
4226 v9.CheckSourceFailure(lines, 'E1375: Class member "_val" accessible only using class "A"') | 4226 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"') |
4227 | 4227 |
4228 # private static class variable | 4228 # private static class variable |
4229 lines =<< trim END | 4229 lines =<< trim END |
4230 vim9script | 4230 vim9script |
4231 class A | 4231 class A |
4234 def T() | 4234 def T() |
4235 var x = A._val | 4235 var x = A._val |
4236 enddef | 4236 enddef |
4237 T() | 4237 T() |
4238 END | 4238 END |
4239 v9.CheckSourceFailure(lines, 'E1333: Cannot access private member: _val') | 4239 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable: _val') |
4240 | 4240 |
4241 # private static class variable | 4241 # private static class variable |
4242 lines =<< trim END | 4242 lines =<< trim END |
4243 vim9script | 4243 vim9script |
4244 class A | 4244 class A |
4247 def T() | 4247 def T() |
4248 A._val = 3 | 4248 A._val = 3 |
4249 enddef | 4249 enddef |
4250 T() | 4250 T() |
4251 END | 4251 END |
4252 v9.CheckSourceFailure(lines, 'E1333: Cannot access private member: _val') | 4252 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable: _val') |
4253 enddef | 4253 enddef |
4254 | 4254 |
4255 " Test for changing the member access of an interface in a implementation class | 4255 " Test for changing the member access of an interface in a implementation class |
4256 def Test_change_interface_member_access() | 4256 def Test_change_interface_member_access() |
4257 var lines =<< trim END | 4257 var lines =<< trim END |
4261 endinterface | 4261 endinterface |
4262 class B implements A | 4262 class B implements A |
4263 this.val = 10 | 4263 this.val = 10 |
4264 endclass | 4264 endclass |
4265 END | 4265 END |
4266 v9.CheckSourceFailure(lines, 'E1367: Access level of member "val" of interface "A" is different') | 4266 v9.CheckSourceFailure(lines, 'E1367: Access level of variable "val" of interface "A" is different') |
4267 | 4267 |
4268 lines =<< trim END | 4268 lines =<< trim END |
4269 vim9script | 4269 vim9script |
4270 interface A | 4270 interface A |
4271 this.val: number | 4271 this.val: number |
4272 endinterface | 4272 endinterface |
4273 class B implements A | 4273 class B implements A |
4274 public this.val = 10 | 4274 public this.val = 10 |
4275 endclass | 4275 endclass |
4276 END | 4276 END |
4277 v9.CheckSourceFailure(lines, 'E1367: Access level of member "val" of interface "A" is different') | 4277 v9.CheckSourceFailure(lines, 'E1367: Access level of variable "val" of interface "A" is different') |
4278 enddef | 4278 enddef |
4279 | 4279 |
4280 " Test for trying to change a readonly member from a def function | 4280 " Test for trying to change a readonly member from a def function |
4281 def Test_readonly_member_change_in_def_func() | 4281 def Test_readonly_member_change_in_def_func() |
4282 var lines =<< trim END | 4282 var lines =<< trim END |
4308 assert_equal({a: 1, b: 2}, A.var3) | 4308 assert_equal({a: 1, b: 2}, A.var3) |
4309 A.var2 = [3, 4] | 4309 A.var2 = [3, 4] |
4310 A.var3 = {c: 3, d: 4} | 4310 A.var3 = {c: 3, d: 4} |
4311 assert_equal([3, 4], A.var2) | 4311 assert_equal([3, 4], A.var2) |
4312 assert_equal({c: 3, d: 4}, A.var3) | 4312 assert_equal({c: 3, d: 4}, A.var3) |
4313 assert_fails('echo A._priv_var4', 'E1333: Cannot access private member: _priv_var4') | 4313 assert_fails('echo A._priv_var4', 'E1333: Cannot access private variable: _priv_var4') |
4314 enddef | 4314 enddef |
4315 T() | 4315 T() |
4316 END | 4316 END |
4317 v9.CheckSourceSuccess(lines) | 4317 v9.CheckSourceSuccess(lines) |
4318 enddef | 4318 enddef |
4350 endclass | 4350 endclass |
4351 | 4351 |
4352 var a = A.new() | 4352 var a = A.new() |
4353 echo a.svar2 | 4353 echo a.svar2 |
4354 END | 4354 END |
4355 v9.CheckSourceFailure(lines, 'E1375: Class member "svar2" accessible only using class "A"') | 4355 v9.CheckSourceFailure(lines, 'E1375: Class variable "svar2" accessible only using class "A"') |
4356 | 4356 |
4357 # Cannot write to a class variable using an object in script context | 4357 # Cannot write to a class variable using an object in script context |
4358 lines =<< trim END | 4358 lines =<< trim END |
4359 vim9script | 4359 vim9script |
4360 class A | 4360 class A |
4363 endclass | 4363 endclass |
4364 | 4364 |
4365 var a = A.new() | 4365 var a = A.new() |
4366 a.svar2 = [2] | 4366 a.svar2 = [2] |
4367 END | 4367 END |
4368 v9.CheckSourceFailure(lines, 'E1375: Class member "svar2" accessible only using class "A"') | 4368 v9.CheckSourceFailure(lines, 'E1375: Class variable "svar2" accessible only using class "A"') |
4369 | 4369 |
4370 # Cannot read from a class variable using an object in def method context | 4370 # Cannot read from a class variable using an object in def method context |
4371 lines =<< trim END | 4371 lines =<< trim END |
4372 vim9script | 4372 vim9script |
4373 class A | 4373 class A |
4379 var a = A.new() | 4379 var a = A.new() |
4380 echo a.svar2 | 4380 echo a.svar2 |
4381 enddef | 4381 enddef |
4382 T() | 4382 T() |
4383 END | 4383 END |
4384 v9.CheckSourceFailure(lines, 'E1375: Class member "svar2" accessible only using class "A"') | 4384 v9.CheckSourceFailure(lines, 'E1375: Class variable "svar2" accessible only using class "A"') |
4385 | 4385 |
4386 # Cannot write to a class variable using an object in def method context | 4386 # Cannot write to a class variable using an object in def method context |
4387 lines =<< trim END | 4387 lines =<< trim END |
4388 vim9script | 4388 vim9script |
4389 class A | 4389 class A |
4395 var a = A.new() | 4395 var a = A.new() |
4396 a.svar2 = [2] | 4396 a.svar2 = [2] |
4397 enddef | 4397 enddef |
4398 T() | 4398 T() |
4399 END | 4399 END |
4400 v9.CheckSourceFailure(lines, 'E1375: Class member "svar2" accessible only using class "A"') | 4400 v9.CheckSourceFailure(lines, 'E1375: Class variable "svar2" accessible only using class "A"') |
4401 enddef | 4401 enddef |
4402 | 4402 |
4403 " Test for using a interface method using a child object | 4403 " Test for using a interface method using a child object |
4404 def Test_interface_method_from_child() | 4404 def Test_interface_method_from_child() |
4405 var lines =<< trim END | 4405 var lines =<< trim END |
4634 endclass | 4634 endclass |
4635 | 4635 |
4636 var b = B.new() | 4636 var b = B.new() |
4637 b.Bar() | 4637 b.Bar() |
4638 END | 4638 END |
4639 v9.CheckSourceFailure(lines, 'E1374: Class member "Foo" accessible only inside class "A"') | 4639 v9.CheckSourceFailure(lines, 'E1384: Class method "Foo" accessible only inside class "A"') |
4640 enddef | 4640 enddef |
4641 | 4641 |
4642 " Test for calling a class method using an object in a def function context and | 4642 " Test for calling a class method using an object in a def function context and |
4643 " script context. | 4643 " script context. |
4644 def Test_class_method_call_using_object() | 4644 def Test_class_method_call_using_object() |
4678 endclass | 4678 endclass |
4679 | 4679 |
4680 var a = A.new() | 4680 var a = A.new() |
4681 assert_equal('foo', a.Foo()) | 4681 assert_equal('foo', a.Foo()) |
4682 END | 4682 END |
4683 v9.CheckSourceFailure(lines, 'E1375: Class member "Foo" accessible only using class "A"') | 4683 v9.CheckSourceFailure(lines, 'E1385: Class method "Foo" accessible only using class "A"') |
4684 | 4684 |
4685 # def function context | 4685 # def function context |
4686 lines =<< trim END | 4686 lines =<< trim END |
4687 vim9script | 4687 vim9script |
4688 class A | 4688 class A |
4695 var a = A.new() | 4695 var a = A.new() |
4696 assert_equal('foo', a.Foo()) | 4696 assert_equal('foo', a.Foo()) |
4697 enddef | 4697 enddef |
4698 T() | 4698 T() |
4699 END | 4699 END |
4700 v9.CheckSourceFailure(lines, 'E1375: Class member "Foo" accessible only using class "A"') | 4700 v9.CheckSourceFailure(lines, 'E1385: Class method "Foo" accessible only using class "A"') |
4701 enddef | 4701 enddef |
4702 | 4702 |
4703 def Test_class_variable() | 4703 def Test_class_variable() |
4704 var lines =<< trim END | 4704 var lines =<< trim END |
4705 vim9script | 4705 vim9script |
4748 val = 20 | 4748 val = 20 |
4749 enddef | 4749 enddef |
4750 endclass | 4750 endclass |
4751 B.ClassFunc() | 4751 B.ClassFunc() |
4752 END | 4752 END |
4753 v9.CheckSourceFailure(lines, 'E1374: Class member "val" accessible only inside class "A"') | 4753 v9.CheckSourceFailure(lines, 'E1374: Class variable "val" accessible only inside class "A"') |
4754 | 4754 |
4755 # Reading a parent class variable from a child class method | 4755 # Reading a parent class variable from a child class method |
4756 lines =<< trim END | 4756 lines =<< trim END |
4757 vim9script | 4757 vim9script |
4758 | 4758 |
4765 var i = val | 4765 var i = val |
4766 enddef | 4766 enddef |
4767 endclass | 4767 endclass |
4768 B.ClassFunc() | 4768 B.ClassFunc() |
4769 END | 4769 END |
4770 v9.CheckSourceFailure(lines, 'E1374: Class member "val" accessible only inside class "A"') | 4770 v9.CheckSourceFailure(lines, 'E1374: Class variable "val" accessible only inside class "A"') |
4771 | 4771 |
4772 # Modifying a parent class variable from a child object method | 4772 # Modifying a parent class variable from a child object method |
4773 lines =<< trim END | 4773 lines =<< trim END |
4774 vim9script | 4774 vim9script |
4775 | 4775 |
4783 enddef | 4783 enddef |
4784 endclass | 4784 endclass |
4785 var b = B.new() | 4785 var b = B.new() |
4786 b.ObjFunc() | 4786 b.ObjFunc() |
4787 END | 4787 END |
4788 v9.CheckSourceFailure(lines, 'E1374: Class member "val" accessible only inside class "A"') | 4788 v9.CheckSourceFailure(lines, 'E1374: Class variable "val" accessible only inside class "A"') |
4789 | 4789 |
4790 # Reading a parent class variable from a child object method | 4790 # Reading a parent class variable from a child object method |
4791 lines =<< trim END | 4791 lines =<< trim END |
4792 vim9script | 4792 vim9script |
4793 | 4793 |
4801 enddef | 4801 enddef |
4802 endclass | 4802 endclass |
4803 var b = B.new() | 4803 var b = B.new() |
4804 b.ObjFunc() | 4804 b.ObjFunc() |
4805 END | 4805 END |
4806 v9.CheckSourceFailure(lines, 'E1374: Class member "val" accessible only inside class "A"') | 4806 v9.CheckSourceFailure(lines, 'E1374: Class variable "val" accessible only inside class "A"') |
4807 | 4807 |
4808 # Modifying a class variable using an object at script level | 4808 # Modifying a class variable using an object at script level |
4809 lines =<< trim END | 4809 lines =<< trim END |
4810 vim9script | 4810 vim9script |
4811 | 4811 |
4813 static val: number = 10 | 4813 static val: number = 10 |
4814 endclass | 4814 endclass |
4815 var a = A.new() | 4815 var a = A.new() |
4816 a.val = 20 | 4816 a.val = 20 |
4817 END | 4817 END |
4818 v9.CheckSourceFailure(lines, 'E1375: Class member "val" accessible only using class "A"') | 4818 v9.CheckSourceFailure(lines, 'E1375: Class variable "val" accessible only using class "A"') |
4819 | 4819 |
4820 # Reading a class variable using an object at script level | 4820 # Reading a class variable using an object at script level |
4821 lines =<< trim END | 4821 lines =<< trim END |
4822 vim9script | 4822 vim9script |
4823 | 4823 |
4825 static val: number = 10 | 4825 static val: number = 10 |
4826 endclass | 4826 endclass |
4827 var a = A.new() | 4827 var a = A.new() |
4828 var i = a.val | 4828 var i = a.val |
4829 END | 4829 END |
4830 v9.CheckSourceFailure(lines, 'E1375: Class member "val" accessible only using class "A"') | 4830 v9.CheckSourceFailure(lines, 'E1375: Class variable "val" accessible only using class "A"') |
4831 | 4831 |
4832 # Modifying a class variable using an object at function level | 4832 # Modifying a class variable using an object at function level |
4833 lines =<< trim END | 4833 lines =<< trim END |
4834 vim9script | 4834 vim9script |
4835 | 4835 |
4841 var a = A.new() | 4841 var a = A.new() |
4842 a.val = 20 | 4842 a.val = 20 |
4843 enddef | 4843 enddef |
4844 T() | 4844 T() |
4845 END | 4845 END |
4846 v9.CheckSourceFailure(lines, 'E1375: Class member "val" accessible only using class "A"') | 4846 v9.CheckSourceFailure(lines, 'E1375: Class variable "val" accessible only using class "A"') |
4847 | 4847 |
4848 # Reading a class variable using an object at function level | 4848 # Reading a class variable using an object at function level |
4849 lines =<< trim END | 4849 lines =<< trim END |
4850 vim9script | 4850 vim9script |
4851 | 4851 |
4856 var a = A.new() | 4856 var a = A.new() |
4857 var i = a.val | 4857 var i = a.val |
4858 enddef | 4858 enddef |
4859 T() | 4859 T() |
4860 END | 4860 END |
4861 v9.CheckSourceFailure(lines, 'E1375: Class member "val" accessible only using class "A"') | 4861 v9.CheckSourceFailure(lines, 'E1375: Class variable "val" accessible only using class "A"') |
4862 enddef | 4862 enddef |
4863 | 4863 |
4864 " Test for using a duplicate class method and class variable in a child class | 4864 " Test for using a duplicate class method and class variable in a child class |
4865 def Test_dup_class_member() | 4865 def Test_dup_class_member() |
4866 # duplicate class variable, class method and overridden object method | 4866 # duplicate class variable, class method and overridden object method |
4955 echo "foo" | 4955 echo "foo" |
4956 enddef | 4956 enddef |
4957 endclass | 4957 endclass |
4958 A.Foo() | 4958 A.Foo() |
4959 END | 4959 END |
4960 v9.CheckSourceFailure(lines, 'E1376: Object member "Foo" accessible only using class "A" object') | 4960 v9.CheckSourceFailure(lines, 'E1386: Object method "Foo" accessible only using class "A" object') |
4961 | 4961 |
4962 # Invoke an object method using a class in def function context | 4962 # Invoke an object method using a class in def function context |
4963 lines =<< trim END | 4963 lines =<< trim END |
4964 vim9script | 4964 vim9script |
4965 class A | 4965 class A |
4970 def T() | 4970 def T() |
4971 A.Foo() | 4971 A.Foo() |
4972 enddef | 4972 enddef |
4973 T() | 4973 T() |
4974 END | 4974 END |
4975 v9.CheckSourceFailure(lines, 'E1376: Object member "Foo" accessible only using class "A" object') | 4975 v9.CheckSourceFailure(lines, 'E1386: Object method "Foo" accessible only using class "A" object') |
4976 enddef | 4976 enddef |
4977 | 4977 |
4978 " Test for duplicate class method and instance method | 4978 " Test for duplicate class method and instance method |
4979 def Test_dup_classmethod_objmethod() | 4979 def Test_dup_classmethod_objmethod() |
4980 # Duplicate instance method | 4980 # Duplicate instance method |
5216 class C implements A, B | 5216 class C implements A, B |
5217 def Foo() | 5217 def Foo() |
5218 enddef | 5218 enddef |
5219 endclass | 5219 endclass |
5220 END | 5220 END |
5221 v9.CheckSourceFailure(lines, 'E1348: Member "var2" of interface "B" is not implemented') | 5221 v9.CheckSourceFailure(lines, 'E1348: Variable "var2" of interface "B" is not implemented') |
5222 | 5222 |
5223 # interface cannot extend a class | 5223 # interface cannot extend a class |
5224 lines =<< trim END | 5224 lines =<< trim END |
5225 vim9script | 5225 vim9script |
5226 class A | 5226 class A |
5274 interface C extends B | 5274 interface C extends B |
5275 this.val1: string | 5275 this.val1: string |
5276 this.val2: number | 5276 this.val2: number |
5277 endinterface | 5277 endinterface |
5278 END | 5278 END |
5279 v9.CheckSourceFailure(lines, 'E1382: Member "val1": type mismatch, expected number but got string') | 5279 v9.CheckSourceFailure(lines, 'E1382: Variable "val1": type mismatch, expected number but got string') |
5280 enddef | 5280 enddef |
5281 | 5281 |
5282 " Test for a child class implementing an interface when some of the methods are | 5282 " Test for a child class implementing an interface when some of the methods are |
5283 " defined in the parent class. | 5283 " defined in the parent class. |
5284 def Test_child_class_implements_interface() | 5284 def Test_child_class_implements_interface() |
5431 class C extends B implements Intf | 5431 class C extends B implements Intf |
5432 this.v3: list<list<number>> = [[0]] | 5432 this.v3: list<list<number>> = [[0]] |
5433 this.var1 = [{a: 10}] | 5433 this.var1 = [{a: 10}] |
5434 endclass | 5434 endclass |
5435 END | 5435 END |
5436 v9.CheckSourceFailure(lines, 'E1348: Member "var3" of interface "Intf" is not implemented') | 5436 v9.CheckSourceFailure(lines, 'E1348: Variable "var3" of interface "Intf" is not implemented') |
5437 | 5437 |
5438 # One of the interface variables is of different type | 5438 # One of the interface variables is of different type |
5439 lines =<< trim END | 5439 lines =<< trim END |
5440 vim9script | 5440 vim9script |
5441 | 5441 |
5458 class C extends B implements Intf | 5458 class C extends B implements Intf |
5459 this.v3: list<list<number>> = [[0]] | 5459 this.v3: list<list<number>> = [[0]] |
5460 this.var1 = [{a: 10}] | 5460 this.var1 = [{a: 10}] |
5461 endclass | 5461 endclass |
5462 END | 5462 END |
5463 v9.CheckSourceFailure(lines, 'E1382: Member "var3": type mismatch, expected list<dict<number>> but got list<dict<string>>') | 5463 v9.CheckSourceFailure(lines, 'E1382: Variable "var3": type mismatch, expected list<dict<number>> but got list<dict<string>>') |
5464 enddef | 5464 enddef |
5465 | 5465 |
5466 " Test for extending an interface with duplicate variables and methods | 5466 " Test for extending an interface with duplicate variables and methods |
5467 def Test_interface_extends_with_dup_members() | 5467 def Test_interface_extends_with_dup_members() |
5468 var lines =<< trim END | 5468 var lines =<< trim END |
5529 class B implements A | 5529 class B implements A |
5530 this.val = {a: 1, b: 2} | 5530 this.val = {a: 1, b: 2} |
5531 endclass | 5531 endclass |
5532 var b = B.new() | 5532 var b = B.new() |
5533 END | 5533 END |
5534 v9.CheckSourceFailure(lines, 'E1382: Member "val": type mismatch, expected list<dict<string>> but got dict<number>') | 5534 v9.CheckSourceFailure(lines, 'E1382: Variable "val": type mismatch, expected list<dict<string>> but got dict<number>') |
5535 enddef | 5535 enddef |
5536 | 5536 |
5537 " Test for assigning to a member variable in a nested class | 5537 " Test for assigning to a member variable in a nested class |
5538 def Test_nested_object_assignment() | 5538 def Test_nested_object_assignment() |
5539 var lines =<< trim END | 5539 var lines =<< trim END |