Mercurial > vim
comparison src/testdir/test_vim9_class.vim @ 33738:2172872dfbcd v9.0.2096
patch 9.0.2096: Vim9: confusing usage of private
Commit: https://github.com/vim/vim/commit/03042a2753e3e6ac971045a8ce256d709214710e
Author: Ernie Rael <errael@raelity.com>
Date: Sat Nov 11 08:53:32 2023 +0100
patch 9.0.2096: Vim9: confusing usage of private
Problem: Vim9: confusing usage of private
Solution: clarify and use protected keyword instead
[vim9class] document `_` as protected instead of private
fixes #13504
closes: #13520
Signed-off-by: Ernie Rael <errael@raelity.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 11 Nov 2023 09:00:06 +0100 |
parents | b076a133faf9 |
children | f0132690cdf9 |
comparison
equal
deleted
inserted
replaced
33737:f065fe97d07a | 33738:2172872dfbcd |
---|---|
322 enddef | 322 enddef |
323 endclass | 323 endclass |
324 END | 324 END |
325 v9.CheckSourceFailure(lines, 'E1388: Public keyword not supported for a method', 3) | 325 v9.CheckSourceFailure(lines, 'E1388: Public keyword not supported for a method', 3) |
326 | 326 |
327 # Using the "public" keyword when defining an object private method | 327 # Using the "public" keyword when defining an object protected method |
328 lines =<< trim END | 328 lines =<< trim END |
329 vim9script | 329 vim9script |
330 class A | 330 class A |
331 public def _Foo() | 331 public def _Foo() |
332 enddef | 332 enddef |
333 endclass | 333 endclass |
334 END | 334 END |
335 v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "this" or "static"', 3) | 335 v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "this" or "static"', 3) |
336 | 336 |
337 # Using the "public" keyword when defining a class private method | 337 # Using the "public" keyword when defining a class protected method |
338 lines =<< trim END | 338 lines =<< trim END |
339 vim9script | 339 vim9script |
340 class A | 340 class A |
341 public static def _Foo() | 341 public static def _Foo() |
342 enddef | 342 enddef |
604 F(outer_obj) | 604 F(outer_obj) |
605 assert_equal(1, inner_obj.value) | 605 assert_equal(1, inner_obj.value) |
606 END | 606 END |
607 v9.CheckSourceSuccess(lines) | 607 v9.CheckSourceSuccess(lines) |
608 | 608 |
609 # Try modifying a private variable using an "any" object | 609 # Try modifying a protected variable using an "any" object |
610 lines =<< trim END | 610 lines =<< trim END |
611 vim9script | 611 vim9script |
612 | 612 |
613 class Inner | 613 class Inner |
614 this._value: string = '' | 614 this._value: string = '' |
624 | 624 |
625 var inner_obj = Inner.new('a') | 625 var inner_obj = Inner.new('a') |
626 var outer_obj = Outer.new(inner_obj) | 626 var outer_obj = Outer.new(inner_obj) |
627 F(outer_obj) | 627 F(outer_obj) |
628 END | 628 END |
629 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_value" in class "Inner"', 1) | 629 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_value" in class "Inner"', 1) |
630 | 630 |
631 # Try modifying a non-existing variable using an "any" object | 631 # Try modifying a non-existing variable using an "any" object |
632 lines =<< trim END | 632 lines =<< trim END |
633 vim9script | 633 vim9script |
634 | 634 |
1083 | 1083 |
1084 var trip = Triple.new() | 1084 var trip = Triple.new() |
1085 assert_equal(1, trip.GetOne()) | 1085 assert_equal(1, trip.GetOne()) |
1086 assert_equal(2, trip.two) | 1086 assert_equal(2, trip.two) |
1087 assert_equal(3, trip.three) | 1087 assert_equal(3, trip.three) |
1088 assert_fails('echo trip._one', 'E1333: Cannot access private variable "_one" in class "Triple"') | 1088 assert_fails('echo trip._one', 'E1333: Cannot access protected variable "_one" in class "Triple"') |
1089 | 1089 |
1090 assert_fails('trip._one = 11', 'E1333: Cannot access private variable "_one" in class "Triple"') | 1090 assert_fails('trip._one = 11', 'E1333: Cannot access protected variable "_one" in class "Triple"') |
1091 assert_fails('trip.two = 22', 'E1335: Variable "two" in class "Triple" is not writable') | 1091 assert_fails('trip.two = 22', 'E1335: Variable "two" in class "Triple" is not writable') |
1092 trip.three = 33 | 1092 trip.three = 33 |
1093 assert_equal(33, trip.three) | 1093 assert_equal(33, trip.three) |
1094 | 1094 |
1095 assert_fails('trip.four = 4', 'E1326: Variable "four" not found in object "Triple"') | 1095 assert_fails('trip.four = 4', 'E1326: Variable "four" not found in object "Triple"') |
1319 var b = B.new() | 1319 var b = B.new() |
1320 b.Foo() | 1320 b.Foo() |
1321 END | 1321 END |
1322 v9.CheckSourceFailure(lines, 'E1335: Variable "ro_class_var" in class "A" is not writable', 1) | 1322 v9.CheckSourceFailure(lines, 'E1335: Variable "ro_class_var" in class "A" is not writable', 1) |
1323 | 1323 |
1324 # A private class variable cannot be accessed from a child class | 1324 # A protected class variable cannot be accessed from a child class |
1325 lines =<< trim END | 1325 lines =<< trim END |
1326 vim9script | 1326 vim9script |
1327 class A | 1327 class A |
1328 static _priv_class_var = 60 | 1328 static _priv_class_var = 60 |
1329 endclass | 1329 endclass |
1335 endclass | 1335 endclass |
1336 | 1336 |
1337 var b = B.new() | 1337 var b = B.new() |
1338 b.Foo() | 1338 b.Foo() |
1339 END | 1339 END |
1340 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_priv_class_var" in class "A"', 1) | 1340 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_priv_class_var" in class "A"', 1) |
1341 | 1341 |
1342 # A private class variable cannot be modified from a child class | 1342 # A protected class variable cannot be modified from a child class |
1343 lines =<< trim END | 1343 lines =<< trim END |
1344 vim9script | 1344 vim9script |
1345 class A | 1345 class A |
1346 static _priv_class_var = 60 | 1346 static _priv_class_var = 60 |
1347 endclass | 1347 endclass |
1353 endclass | 1353 endclass |
1354 | 1354 |
1355 var b = B.new() | 1355 var b = B.new() |
1356 b.Foo() | 1356 b.Foo() |
1357 END | 1357 END |
1358 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_priv_class_var" in class "A"', 1) | 1358 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_priv_class_var" in class "A"', 1) |
1359 | 1359 |
1360 # Access from child class extending a class and from script context | 1360 # Access from child class extending a class and from script context |
1361 lines =<< trim END | 1361 lines =<< trim END |
1362 vim9script | 1362 vim9script |
1363 class A | 1363 class A |
1534 | 1534 |
1535 assert_fails('TextPos.noSuchMember = 2', 'E1337: Class variable "noSuchMember" not found in class "TextPos"') | 1535 assert_fails('TextPos.noSuchMember = 2', 'E1337: Class variable "noSuchMember" not found in class "TextPos"') |
1536 assert_fails('TextPos.counter = 5', 'E1335: Variable "counter" in class "TextPos" is not writable') | 1536 assert_fails('TextPos.counter = 5', 'E1335: Variable "counter" in class "TextPos" is not writable') |
1537 assert_fails('TextPos.counter += 5', 'E1335: Variable "counter" in class "TextPos" is not writable') | 1537 assert_fails('TextPos.counter += 5', 'E1335: Variable "counter" in class "TextPos" is not writable') |
1538 | 1538 |
1539 assert_fails('echo TextPos._secret', 'E1333: Cannot access private variable "_secret" in class "TextPos"') | 1539 assert_fails('echo TextPos._secret', 'E1333: Cannot access protected variable "_secret" in class "TextPos"') |
1540 assert_fails('TextPos._secret = 8', 'E1333: Cannot access private variable "_secret" in class "TextPos"') | 1540 assert_fails('TextPos._secret = 8', 'E1333: Cannot access protected variable "_secret" in class "TextPos"') |
1541 | 1541 |
1542 assert_equal(42, TextPos.anybody) | 1542 assert_equal(42, TextPos.anybody) |
1543 TextPos.anybody = 12 | 1543 TextPos.anybody = 12 |
1544 assert_equal(12, TextPos.anybody) | 1544 assert_equal(12, TextPos.anybody) |
1545 TextPos.anybody += 5 | 1545 TextPos.anybody += 5 |
1581 assert_equal('some text', HTML.MacroSubstitute('some text')) | 1581 assert_equal('some text', HTML.MacroSubstitute('some text')) |
1582 assert_equal('some text', HTML.MacroSubstitute('some text')) | 1582 assert_equal('some text', HTML.MacroSubstitute('some text')) |
1583 END | 1583 END |
1584 v9.CheckSourceSuccess(lines) | 1584 v9.CheckSourceSuccess(lines) |
1585 | 1585 |
1586 # access private member in lambda | 1586 # access protected member in lambda |
1587 lines =<< trim END | 1587 lines =<< trim END |
1588 vim9script | 1588 vim9script |
1589 | 1589 |
1590 class Foo | 1590 class Foo |
1591 this._x: number = 0 | 1591 this._x: number = 0 |
1599 var foo = Foo.new() | 1599 var foo = Foo.new() |
1600 assert_equal(5, foo.Add(5)) | 1600 assert_equal(5, foo.Add(5)) |
1601 END | 1601 END |
1602 v9.CheckSourceSuccess(lines) | 1602 v9.CheckSourceSuccess(lines) |
1603 | 1603 |
1604 # access private member in lambda body | 1604 # access protected member in lambda body |
1605 lines =<< trim END | 1605 lines =<< trim END |
1606 vim9script | 1606 vim9script |
1607 | 1607 |
1608 class Foo | 1608 class Foo |
1609 this._x: number = 6 | 1609 this._x: number = 6 |
1760 endclass | 1760 endclass |
1761 | 1761 |
1762 var o = Child.new() | 1762 var o = Child.new() |
1763 var x = o._v1 | 1763 var x = o._v1 |
1764 END | 1764 END |
1765 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Base"', 11) | 1765 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "Base"', 11) |
1766 lines =<< trim END | 1766 lines =<< trim END |
1767 vim9script | 1767 vim9script |
1768 | 1768 |
1769 class Base | 1769 class Base |
1770 this._v1: list<list<number>> | 1770 this._v1: list<list<number>> |
1777 var o = Child.new() | 1777 var o = Child.new() |
1778 var x = o._v1 | 1778 var x = o._v1 |
1779 enddef | 1779 enddef |
1780 F() | 1780 F() |
1781 END | 1781 END |
1782 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Base"', 2) | 1782 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "Base"', 2) |
1783 lines =<< trim END | 1783 lines =<< trim END |
1784 vim9script | 1784 vim9script |
1785 | 1785 |
1786 class Base | 1786 class Base |
1787 this.v1: list<list<number>> | 1787 this.v1: list<list<number>> |
1809 o.v1 = [] | 1809 o.v1 = [] |
1810 enddef | 1810 enddef |
1811 F() | 1811 F() |
1812 END | 1812 END |
1813 | 1813 |
1814 # Attempt to read a private variable that is in the middle | 1814 # Attempt to read a protected variable that is in the middle |
1815 # of the class hierarchy. | 1815 # of the class hierarchy. |
1816 v9.CheckSourceFailure(lines, 'E1335: Variable "v1" in class "Base" is not writable', 2) | 1816 v9.CheckSourceFailure(lines, 'E1335: Variable "v1" in class "Base" is not writable', 2) |
1817 lines =<< trim END | 1817 lines =<< trim END |
1818 vim9script | 1818 vim9script |
1819 | 1819 |
1831 var o = Child.new() | 1831 var o = Child.new() |
1832 var x = o._v1 | 1832 var x = o._v1 |
1833 enddef | 1833 enddef |
1834 F() | 1834 F() |
1835 END | 1835 END |
1836 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Base"', 2) | 1836 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "Base"', 2) |
1837 | 1837 |
1838 # Attempt to read a private variable that is at the start | 1838 # Attempt to read a protected variable that is at the start |
1839 # of the class hierarchy. | 1839 # of the class hierarchy. |
1840 lines =<< trim END | 1840 lines =<< trim END |
1841 vim9script | 1841 vim9script |
1842 | 1842 |
1843 class Base0 | 1843 class Base0 |
1854 var o = Child.new() | 1854 var o = Child.new() |
1855 var x = o._v1 | 1855 var x = o._v1 |
1856 enddef | 1856 enddef |
1857 F() | 1857 F() |
1858 END | 1858 END |
1859 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Child"', 2) | 1859 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "Child"', 2) |
1860 enddef | 1860 enddef |
1861 | 1861 |
1862 func Test_class_garbagecollect() | 1862 func Test_class_garbagecollect() |
1863 let lines =<< trim END | 1863 let lines =<< trim END |
1864 vim9script | 1864 vim9script |
4130 C.new().Lock() | 4130 C.new().Lock() |
4131 l[0] = 11 | 4131 l[0] = 11 |
4132 END | 4132 END |
4133 v9.CheckSourceFailure(lines, 'E741: Value is locked: l[0] = 11', 11) | 4133 v9.CheckSourceFailure(lines, 'E741: Value is locked: l[0] = 11', 11) |
4134 | 4134 |
4135 # lock a list element referenced by a private object variable | 4135 # lock a list element referenced by a protected object variable |
4136 # in an object fetched via a script level list | 4136 # in an object fetched via a script level list |
4137 lines =<< trim END | 4137 lines =<< trim END |
4138 vim9script | 4138 vim9script |
4139 | 4139 |
4140 class C | 4140 class C |
4153 l[1] = [33] | 4153 l[1] = [33] |
4154 END | 4154 END |
4155 v9.CheckSourceFailure(lines, 'E741: Value is locked: l[1] = [33]', 16) | 4155 v9.CheckSourceFailure(lines, 'E741: Value is locked: l[1] = [33]', 16) |
4156 | 4156 |
4157 # similar to the previous test, except the locking code is executing | 4157 # similar to the previous test, except the locking code is executing |
4158 # in a class that does not own the private variable. | 4158 # in a class that does not own the protected variable. |
4159 # Note that the locking code is in a class has a private variable of | 4159 # Note that the locking code is in a class has a protected variable of |
4160 # the same name. | 4160 # the same name. |
4161 lines =<< trim END | 4161 lines =<< trim END |
4162 vim9script | 4162 vim9script |
4163 | 4163 |
4164 class C2 | 4164 class C2 |
4177 var lc: list<C> = [ o ] | 4177 var lc: list<C> = [ o ] |
4178 | 4178 |
4179 var o2 = C2.new() | 4179 var o2 = C2.new() |
4180 o2.Lock(o) | 4180 o2.Lock(o) |
4181 END | 4181 END |
4182 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "C"') | 4182 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "C"') |
4183 enddef | 4183 enddef |
4184 | 4184 |
4185 " Test builtin islocked() | 4185 " Test builtin islocked() |
4186 def Test_lockvar_islocked() | 4186 def Test_lockvar_islocked() |
4187 # Can't lock class/object variable | 4187 # Can't lock class/object variable |
4501 assert_equal(1, C.SIslocked("l")) | 4501 assert_equal(1, C.SIslocked("l")) |
4502 END | 4502 END |
4503 v9.CheckSourceSuccess(lines) | 4503 v9.CheckSourceSuccess(lines) |
4504 enddef | 4504 enddef |
4505 | 4505 |
4506 " Test for a private object method | 4506 " Test for a protected object method |
4507 def Test_private_object_method() | 4507 def Test_private_object_method() |
4508 # Try calling a private method using an object (at the script level) | 4508 # Try calling a protected method using an object (at the script level) |
4509 var lines =<< trim END | 4509 var lines =<< trim END |
4510 vim9script | 4510 vim9script |
4511 | 4511 |
4512 class A | 4512 class A |
4513 def _Foo(): number | 4513 def _Foo(): number |
4515 enddef | 4515 enddef |
4516 endclass | 4516 endclass |
4517 var a = A.new() | 4517 var a = A.new() |
4518 a._Foo() | 4518 a._Foo() |
4519 END | 4519 END |
4520 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 9) | 4520 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 9) |
4521 | 4521 |
4522 # Try calling a private method using an object (from a def function) | 4522 # Try calling a protected method using an object (from a def function) |
4523 lines =<< trim END | 4523 lines =<< trim END |
4524 vim9script | 4524 vim9script |
4525 | 4525 |
4526 class A | 4526 class A |
4527 def _Foo(): number | 4527 def _Foo(): number |
4532 var a = A.new() | 4532 var a = A.new() |
4533 a._Foo() | 4533 a._Foo() |
4534 enddef | 4534 enddef |
4535 T() | 4535 T() |
4536 END | 4536 END |
4537 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 2) | 4537 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 2) |
4538 | 4538 |
4539 # Use a private method from another object method (in script context) | 4539 # Use a protected method from another object method (in script context) |
4540 lines =<< trim END | 4540 lines =<< trim END |
4541 vim9script | 4541 vim9script |
4542 | 4542 |
4543 class A | 4543 class A |
4544 def _Foo(): number | 4544 def _Foo(): number |
4551 var a = A.new() | 4551 var a = A.new() |
4552 assert_equal(1234, a.Bar()) | 4552 assert_equal(1234, a.Bar()) |
4553 END | 4553 END |
4554 v9.CheckSourceSuccess(lines) | 4554 v9.CheckSourceSuccess(lines) |
4555 | 4555 |
4556 # Use a private method from another object method (def function context) | 4556 # Use a protected method from another object method (def function context) |
4557 lines =<< trim END | 4557 lines =<< trim END |
4558 vim9script | 4558 vim9script |
4559 | 4559 |
4560 class A | 4560 class A |
4561 def _Foo(): number | 4561 def _Foo(): number |
4571 enddef | 4571 enddef |
4572 T() | 4572 T() |
4573 END | 4573 END |
4574 v9.CheckSourceSuccess(lines) | 4574 v9.CheckSourceSuccess(lines) |
4575 | 4575 |
4576 # Try calling a private method without the "this" prefix | 4576 # Try calling a protected method without the "this" prefix |
4577 lines =<< trim END | 4577 lines =<< trim END |
4578 vim9script | 4578 vim9script |
4579 | 4579 |
4580 class A | 4580 class A |
4581 def _Foo(): number | 4581 def _Foo(): number |
4588 var a = A.new() | 4588 var a = A.new() |
4589 a.Bar() | 4589 a.Bar() |
4590 END | 4590 END |
4591 v9.CheckSourceFailure(lines, 'E117: Unknown function: _Foo', 1) | 4591 v9.CheckSourceFailure(lines, 'E117: Unknown function: _Foo', 1) |
4592 | 4592 |
4593 # Try calling a private method using the class name | 4593 # Try calling a protected method using the class name |
4594 lines =<< trim END | 4594 lines =<< trim END |
4595 vim9script | 4595 vim9script |
4596 | 4596 |
4597 class A | 4597 class A |
4598 def _Foo(): number | 4598 def _Foo(): number |
4599 return 1234 | 4599 return 1234 |
4600 enddef | 4600 enddef |
4601 endclass | 4601 endclass |
4602 A._Foo() | 4602 A._Foo() |
4603 END | 4603 END |
4604 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 8) | 4604 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 8) |
4605 | 4605 |
4606 # Define two private methods with the same name | 4606 # Define two protected methods with the same name |
4607 lines =<< trim END | 4607 lines =<< trim END |
4608 vim9script | 4608 vim9script |
4609 | 4609 |
4610 class A | 4610 class A |
4611 def _Foo() | 4611 def _Foo() |
4615 endclass | 4615 endclass |
4616 var a = A.new() | 4616 var a = A.new() |
4617 END | 4617 END |
4618 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 7) | 4618 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 7) |
4619 | 4619 |
4620 # Define a private method and a object method with the same name | 4620 # Define a protected method and a object method with the same name |
4621 lines =<< trim END | 4621 lines =<< trim END |
4622 vim9script | 4622 vim9script |
4623 | 4623 |
4624 class A | 4624 class A |
4625 def _Foo() | 4625 def _Foo() |
4629 endclass | 4629 endclass |
4630 var a = A.new() | 4630 var a = A.new() |
4631 END | 4631 END |
4632 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 7) | 4632 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 7) |
4633 | 4633 |
4634 # Define an object method and a private method with the same name | 4634 # Define an object method and a protected method with the same name |
4635 lines =<< trim END | 4635 lines =<< trim END |
4636 vim9script | 4636 vim9script |
4637 | 4637 |
4638 class A | 4638 class A |
4639 def Foo() | 4639 def Foo() |
4643 endclass | 4643 endclass |
4644 var a = A.new() | 4644 var a = A.new() |
4645 END | 4645 END |
4646 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 7) | 4646 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 7) |
4647 | 4647 |
4648 # Call a public method and a private method from a private method | 4648 # Call a public method and a protected method from a protected method |
4649 lines =<< trim END | 4649 lines =<< trim END |
4650 vim9script | 4650 vim9script |
4651 | 4651 |
4652 class A | 4652 class A |
4653 def Foo(): number | 4653 def Foo(): number |
4667 var a = A.new() | 4667 var a = A.new() |
4668 a.T() | 4668 a.T() |
4669 END | 4669 END |
4670 v9.CheckSourceSuccess(lines) | 4670 v9.CheckSourceSuccess(lines) |
4671 | 4671 |
4672 # Try calling a private method from another class | 4672 # Try calling a protected method from another class |
4673 lines =<< trim END | 4673 lines =<< trim END |
4674 vim9script | 4674 vim9script |
4675 | 4675 |
4676 class A | 4676 class A |
4677 def _Foo(): number | 4677 def _Foo(): number |
4685 enddef | 4685 enddef |
4686 endclass | 4686 endclass |
4687 var b = B.new() | 4687 var b = B.new() |
4688 b.Foo() | 4688 b.Foo() |
4689 END | 4689 END |
4690 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 2) | 4690 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 2) |
4691 | 4691 |
4692 # Call a private object method from a child class object method | 4692 # Call a protected object method from a child class object method |
4693 lines =<< trim END | 4693 lines =<< trim END |
4694 vim9script | 4694 vim9script |
4695 class A | 4695 class A |
4696 def _Foo(): number | 4696 def _Foo(): number |
4697 return 1234 | 4697 return 1234 |
4709 var c = C.new() | 4709 var c = C.new() |
4710 assert_equal(1234, c.Baz()) | 4710 assert_equal(1234, c.Baz()) |
4711 END | 4711 END |
4712 v9.CheckSourceSuccess(lines) | 4712 v9.CheckSourceSuccess(lines) |
4713 | 4713 |
4714 # Call a private object method from a child class object | 4714 # Call a protected object method from a child class object |
4715 lines =<< trim END | 4715 lines =<< trim END |
4716 vim9script | 4716 vim9script |
4717 class A | 4717 class A |
4718 def _Foo(): number | 4718 def _Foo(): number |
4719 return 1234 | 4719 return 1234 |
4728 enddef | 4728 enddef |
4729 endclass | 4729 endclass |
4730 var c = C.new() | 4730 var c = C.new() |
4731 assert_equal(1234, c._Foo()) | 4731 assert_equal(1234, c._Foo()) |
4732 END | 4732 END |
4733 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 16) | 4733 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 16) |
4734 | 4734 |
4735 # Using "_" prefix in a method name should fail outside of a class | 4735 # Using "_" prefix in a method name should fail outside of a class |
4736 lines =<< trim END | 4736 lines =<< trim END |
4737 vim9script | 4737 vim9script |
4738 def _Foo(): number | 4738 def _Foo(): number |
4741 var a = _Foo() | 4741 var a = _Foo() |
4742 END | 4742 END |
4743 v9.CheckSourceFailure(lines, 'E1267: Function name must start with a capital: _Foo(): number', 2) | 4743 v9.CheckSourceFailure(lines, 'E1267: Function name must start with a capital: _Foo(): number', 2) |
4744 enddef | 4744 enddef |
4745 | 4745 |
4746 " Test for an private class method | 4746 " Test for an protected class method |
4747 def Test_private_class_method() | 4747 def Test_private_class_method() |
4748 # Try calling a class private method (at the script level) | 4748 # Try calling a class protected method (at the script level) |
4749 var lines =<< trim END | 4749 var lines =<< trim END |
4750 vim9script | 4750 vim9script |
4751 | 4751 |
4752 class A | 4752 class A |
4753 static def _Foo(): number | 4753 static def _Foo(): number |
4754 return 1234 | 4754 return 1234 |
4755 enddef | 4755 enddef |
4756 endclass | 4756 endclass |
4757 A._Foo() | 4757 A._Foo() |
4758 END | 4758 END |
4759 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 8) | 4759 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 8) |
4760 | 4760 |
4761 # Try calling a class private method (from a def function) | 4761 # Try calling a class protected method (from a def function) |
4762 lines =<< trim END | 4762 lines =<< trim END |
4763 vim9script | 4763 vim9script |
4764 | 4764 |
4765 class A | 4765 class A |
4766 static def _Foo(): number | 4766 static def _Foo(): number |
4770 def T() | 4770 def T() |
4771 A._Foo() | 4771 A._Foo() |
4772 enddef | 4772 enddef |
4773 T() | 4773 T() |
4774 END | 4774 END |
4775 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 1) | 4775 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 1) |
4776 | 4776 |
4777 # Try calling a class private method using an object (at the script level) | 4777 # Try calling a class protected method using an object (at the script level) |
4778 lines =<< trim END | 4778 lines =<< trim END |
4779 vim9script | 4779 vim9script |
4780 | 4780 |
4781 class A | 4781 class A |
4782 static def _Foo(): number | 4782 static def _Foo(): number |
4784 enddef | 4784 enddef |
4785 endclass | 4785 endclass |
4786 var a = A.new() | 4786 var a = A.new() |
4787 a._Foo() | 4787 a._Foo() |
4788 END | 4788 END |
4789 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 9) | 4789 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 9) |
4790 | 4790 |
4791 # Try calling a class private method using an object (from a def function) | 4791 # Try calling a class protected method using an object (from a def function) |
4792 lines =<< trim END | 4792 lines =<< trim END |
4793 vim9script | 4793 vim9script |
4794 | 4794 |
4795 class A | 4795 class A |
4796 static def _Foo(): number | 4796 static def _Foo(): number |
4801 var a = A.new() | 4801 var a = A.new() |
4802 a._Foo() | 4802 a._Foo() |
4803 enddef | 4803 enddef |
4804 T() | 4804 T() |
4805 END | 4805 END |
4806 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 2) | 4806 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 2) |
4807 | 4807 |
4808 # Use a class private method from an object method | 4808 # Use a class protected method from an object method |
4809 lines =<< trim END | 4809 lines =<< trim END |
4810 vim9script | 4810 vim9script |
4811 | 4811 |
4812 class A | 4812 class A |
4813 static def _Foo(): number | 4813 static def _Foo(): number |
4820 var a = A.new() | 4820 var a = A.new() |
4821 a.Bar() | 4821 a.Bar() |
4822 END | 4822 END |
4823 v9.CheckSourceSuccess(lines) | 4823 v9.CheckSourceSuccess(lines) |
4824 | 4824 |
4825 # Use a class private method from another class private method without the | 4825 # Use a class protected method from another class protected method without the |
4826 # class name prefix. | 4826 # class name prefix. |
4827 lines =<< trim END | 4827 lines =<< trim END |
4828 vim9script | 4828 vim9script |
4829 | 4829 |
4830 class A | 4830 class A |
4841 var a = A.new() | 4841 var a = A.new() |
4842 a.Bar() | 4842 a.Bar() |
4843 END | 4843 END |
4844 v9.CheckSourceSuccess(lines) | 4844 v9.CheckSourceSuccess(lines) |
4845 | 4845 |
4846 # Declare a class method and a class private method with the same name | 4846 # Declare a class method and a class protected method with the same name |
4847 lines =<< trim END | 4847 lines =<< trim END |
4848 vim9script | 4848 vim9script |
4849 | 4849 |
4850 class A | 4850 class A |
4851 static def _Foo() | 4851 static def _Foo() |
4855 endclass | 4855 endclass |
4856 var a = A.new() | 4856 var a = A.new() |
4857 END | 4857 END |
4858 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 7) | 4858 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 7) |
4859 | 4859 |
4860 # Try calling a class private method from another class | 4860 # Try calling a class protected method from another class |
4861 lines =<< trim END | 4861 lines =<< trim END |
4862 vim9script | 4862 vim9script |
4863 | 4863 |
4864 class A | 4864 class A |
4865 static def _Foo(): number | 4865 static def _Foo(): number |
4872 enddef | 4872 enddef |
4873 endclass | 4873 endclass |
4874 var b = B.new() | 4874 var b = B.new() |
4875 assert_equal(1234, b.Foo()) | 4875 assert_equal(1234, b.Foo()) |
4876 END | 4876 END |
4877 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 1) | 4877 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 1) |
4878 | 4878 |
4879 # Call a private class method from a child class object method | 4879 # Call a protected class method from a child class object method |
4880 lines =<< trim END | 4880 lines =<< trim END |
4881 vim9script | 4881 vim9script |
4882 class A | 4882 class A |
4883 static def _Foo(): number | 4883 static def _Foo(): number |
4884 return 1234 | 4884 return 1234 |
4894 enddef | 4894 enddef |
4895 endclass | 4895 endclass |
4896 var c = C.new() | 4896 var c = C.new() |
4897 assert_equal(1234, c.Baz()) | 4897 assert_equal(1234, c.Baz()) |
4898 END | 4898 END |
4899 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 1) | 4899 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 1) |
4900 | 4900 |
4901 # Call a private class method from a child class private class method | 4901 # Call a protected class method from a child class protected class method |
4902 lines =<< trim END | 4902 lines =<< trim END |
4903 vim9script | 4903 vim9script |
4904 class A | 4904 class A |
4905 static def _Foo(): number | 4905 static def _Foo(): number |
4906 return 1234 | 4906 return 1234 |
4915 return A._Foo() | 4915 return A._Foo() |
4916 enddef | 4916 enddef |
4917 endclass | 4917 endclass |
4918 assert_equal(1234, C.Baz()) | 4918 assert_equal(1234, C.Baz()) |
4919 END | 4919 END |
4920 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 1) | 4920 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 1) |
4921 | 4921 |
4922 # Call a private class method from a child class object | 4922 # Call a protected class method from a child class object |
4923 lines =<< trim END | 4923 lines =<< trim END |
4924 vim9script | 4924 vim9script |
4925 class A | 4925 class A |
4926 static def _Foo(): number | 4926 static def _Foo(): number |
4927 return 1234 | 4927 return 1234 |
5030 var oc = C.new() | 5030 var oc = C.new() |
5031 assert_equal(101, oa.AccessObject()) | 5031 assert_equal(101, oa.AccessObject()) |
5032 assert_equal(102, ob.AccessObject()) | 5032 assert_equal(102, ob.AccessObject()) |
5033 assert_equal(103, oc.AccessObject()) | 5033 assert_equal(103, oc.AccessObject()) |
5034 | 5034 |
5035 assert_fails('echo oc.AccessPrivateStaticThroughClassName()', 'E1333: Cannot access private variable "_svar" in class "A"') | 5035 assert_fails('echo oc.AccessPrivateStaticThroughClassName()', 'E1333: Cannot access protected variable "_svar" in class "A"') |
5036 | 5036 |
5037 # verify object properly resolves to correct static | 5037 # verify object properly resolves to correct static |
5038 assert_equal(1, oa.AccessStaticThroughObject()) | 5038 assert_equal(1, oa.AccessStaticThroughObject()) |
5039 assert_equal(1, ob.AccessStaticThroughObject()) | 5039 assert_equal(1, ob.AccessStaticThroughObject()) |
5040 assert_equal(1, oc.AccessStaticThroughObject()) | 5040 assert_equal(1, oc.AccessStaticThroughObject()) |
5052 this.val = 20 | 5052 this.val = 20 |
5053 endclass | 5053 endclass |
5054 END | 5054 END |
5055 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4) | 5055 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4) |
5056 | 5056 |
5057 # Duplicate private member variable | 5057 # Duplicate protected member variable |
5058 lines =<< trim END | 5058 lines =<< trim END |
5059 vim9script | 5059 vim9script |
5060 class C | 5060 class C |
5061 this._val = 10 | 5061 this._val = 10 |
5062 this._val = 20 | 5062 this._val = 20 |
5072 public this.val = 20 | 5072 public this.val = 20 |
5073 endclass | 5073 endclass |
5074 END | 5074 END |
5075 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4) | 5075 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4) |
5076 | 5076 |
5077 # Duplicate private member variable | 5077 # Duplicate protected member variable |
5078 lines =<< trim END | 5078 lines =<< trim END |
5079 vim9script | 5079 vim9script |
5080 class C | 5080 class C |
5081 this.val = 10 | 5081 this.val = 10 |
5082 this._val = 20 | 5082 this._val = 20 |
5083 endclass | 5083 endclass |
5084 END | 5084 END |
5085 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 4) | 5085 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 4) |
5086 | 5086 |
5087 # Duplicate public and private member variable | 5087 # Duplicate public and protected member variable |
5088 lines =<< trim END | 5088 lines =<< trim END |
5089 vim9script | 5089 vim9script |
5090 class C | 5090 class C |
5091 this._val = 20 | 5091 this._val = 20 |
5092 public this.val = 10 | 5092 public this.val = 10 |
5102 static _s: string = "def" | 5102 static _s: string = "def" |
5103 endclass | 5103 endclass |
5104 END | 5104 END |
5105 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _s', 4) | 5105 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _s', 4) |
5106 | 5106 |
5107 # Duplicate public and private class member variable | 5107 # Duplicate public and protected class member variable |
5108 lines =<< trim END | 5108 lines =<< trim END |
5109 vim9script | 5109 vim9script |
5110 class C | 5110 class C |
5111 public static s: string = "abc" | 5111 public static s: string = "abc" |
5112 static _s: string = "def" | 5112 static _s: string = "def" |
5141 this.val = 20 | 5141 this.val = 20 |
5142 endclass | 5142 endclass |
5143 END | 5143 END |
5144 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 9) | 5144 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 9) |
5145 | 5145 |
5146 # Duplicate object private member variable in a derived class | 5146 # Duplicate object protected member variable in a derived class |
5147 lines =<< trim END | 5147 lines =<< trim END |
5148 vim9script | 5148 vim9script |
5149 class A | 5149 class A |
5150 this._val = 10 | 5150 this._val = 10 |
5151 endclass | 5151 endclass |
5155 this._val = 20 | 5155 this._val = 20 |
5156 endclass | 5156 endclass |
5157 END | 5157 END |
5158 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 9) | 5158 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 9) |
5159 | 5159 |
5160 # Duplicate object private member variable in a derived class | 5160 # Duplicate object protected member variable in a derived class |
5161 lines =<< trim END | 5161 lines =<< trim END |
5162 vim9script | 5162 vim9script |
5163 class A | 5163 class A |
5164 this.val = 10 | 5164 this.val = 10 |
5165 endclass | 5165 endclass |
5194 endclass | 5194 endclass |
5195 END | 5195 END |
5196 v9.CheckSourceSuccess(lines) | 5196 v9.CheckSourceSuccess(lines) |
5197 enddef | 5197 enddef |
5198 | 5198 |
5199 " Test for accessing a private member outside a class in a def function | 5199 " Test for accessing a protected member outside a class in a def function |
5200 def Test_private_member_access_outside_class() | 5200 def Test_private_member_access_outside_class() |
5201 # private object member variable | 5201 # protected object member variable |
5202 var lines =<< trim END | 5202 var lines =<< trim END |
5203 vim9script | 5203 vim9script |
5204 class A | 5204 class A |
5205 this._val = 10 | 5205 this._val = 10 |
5206 def GetVal(): number | 5206 def GetVal(): number |
5211 var a = A.new() | 5211 var a = A.new() |
5212 a._val = 20 | 5212 a._val = 20 |
5213 enddef | 5213 enddef |
5214 T() | 5214 T() |
5215 END | 5215 END |
5216 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_val" in class "A"', 2) | 5216 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_val" in class "A"', 2) |
5217 | 5217 |
5218 # access a non-existing private object member variable | 5218 # access a non-existing protected object member variable |
5219 lines =<< trim END | 5219 lines =<< trim END |
5220 vim9script | 5220 vim9script |
5221 class A | 5221 class A |
5222 this._val = 10 | 5222 this._val = 10 |
5223 endclass | 5223 endclass |
5227 enddef | 5227 enddef |
5228 T() | 5228 T() |
5229 END | 5229 END |
5230 v9.CheckSourceFailure(lines, 'E1326: Variable "_a" not found in object "A"', 2) | 5230 v9.CheckSourceFailure(lines, 'E1326: Variable "_a" not found in object "A"', 2) |
5231 | 5231 |
5232 # private static member variable | 5232 # protected static member variable |
5233 lines =<< trim END | 5233 lines =<< trim END |
5234 vim9script | 5234 vim9script |
5235 class A | 5235 class A |
5236 static _val = 10 | 5236 static _val = 10 |
5237 endclass | 5237 endclass |
5241 enddef | 5241 enddef |
5242 T() | 5242 T() |
5243 END | 5243 END |
5244 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"', 2) | 5244 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"', 2) |
5245 | 5245 |
5246 # private static member variable | 5246 # protected static member variable |
5247 lines =<< trim END | 5247 lines =<< trim END |
5248 vim9script | 5248 vim9script |
5249 class A | 5249 class A |
5250 static _val = 10 | 5250 static _val = 10 |
5251 endclass | 5251 endclass |
5255 enddef | 5255 enddef |
5256 T() | 5256 T() |
5257 END | 5257 END |
5258 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"', 2) | 5258 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"', 2) |
5259 | 5259 |
5260 # private static class variable | 5260 # protected static class variable |
5261 lines =<< trim END | 5261 lines =<< trim END |
5262 vim9script | 5262 vim9script |
5263 class A | 5263 class A |
5264 static _val = 10 | 5264 static _val = 10 |
5265 endclass | 5265 endclass |
5266 def T() | 5266 def T() |
5267 var x = A._val | 5267 var x = A._val |
5268 enddef | 5268 enddef |
5269 T() | 5269 T() |
5270 END | 5270 END |
5271 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_val" in class "A"', 1) | 5271 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_val" in class "A"', 1) |
5272 | 5272 |
5273 # private static class variable | 5273 # protected static class variable |
5274 lines =<< trim END | 5274 lines =<< trim END |
5275 vim9script | 5275 vim9script |
5276 class A | 5276 class A |
5277 static _val = 10 | 5277 static _val = 10 |
5278 endclass | 5278 endclass |
5279 def T() | 5279 def T() |
5280 A._val = 3 | 5280 A._val = 3 |
5281 enddef | 5281 enddef |
5282 T() | 5282 T() |
5283 END | 5283 END |
5284 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_val" in class "A"', 1) | 5284 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_val" in class "A"', 1) |
5285 enddef | 5285 enddef |
5286 | 5286 |
5287 " Test for changing the member access of an interface in a implementation class | 5287 " Test for changing the member access of an interface in a implementation class |
5288 def Test_change_interface_member_access() | 5288 def Test_change_interface_member_access() |
5289 var lines =<< trim END | 5289 var lines =<< trim END |
5340 assert_equal({a: 1, b: 2}, A.var3) | 5340 assert_equal({a: 1, b: 2}, A.var3) |
5341 A.var2 = [3, 4] | 5341 A.var2 = [3, 4] |
5342 A.var3 = {c: 3, d: 4} | 5342 A.var3 = {c: 3, d: 4} |
5343 assert_equal([3, 4], A.var2) | 5343 assert_equal([3, 4], A.var2) |
5344 assert_equal({c: 3, d: 4}, A.var3) | 5344 assert_equal({c: 3, d: 4}, A.var3) |
5345 assert_fails('echo A._priv_var4', 'E1333: Cannot access private variable "_priv_var4" in class "A"') | 5345 assert_fails('echo A._priv_var4', 'E1333: Cannot access protected variable "_priv_var4" in class "A"') |
5346 enddef | 5346 enddef |
5347 T() | 5347 T() |
5348 END | 5348 END |
5349 v9.CheckSourceSuccess(lines) | 5349 v9.CheckSourceSuccess(lines) |
5350 enddef | 5350 enddef |
6033 enddef | 6033 enddef |
6034 endclass | 6034 endclass |
6035 END | 6035 END |
6036 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 6) | 6036 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 6) |
6037 | 6037 |
6038 # Duplicate private instance method | 6038 # Duplicate protected instance method |
6039 lines =<< trim END | 6039 lines =<< trim END |
6040 vim9script | 6040 vim9script |
6041 class A | 6041 class A |
6042 static def Foo() | 6042 static def Foo() |
6043 enddef | 6043 enddef |
6057 enddef | 6057 enddef |
6058 endclass | 6058 endclass |
6059 END | 6059 END |
6060 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 6) | 6060 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 6) |
6061 | 6061 |
6062 # Duplicate private class method | 6062 # Duplicate protected class method |
6063 lines =<< trim END | 6063 lines =<< trim END |
6064 vim9script | 6064 vim9script |
6065 class A | 6065 class A |
6066 def Foo() | 6066 def Foo() |
6067 enddef | 6067 enddef |
6069 enddef | 6069 enddef |
6070 endclass | 6070 endclass |
6071 END | 6071 END |
6072 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 6) | 6072 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 6) |
6073 | 6073 |
6074 # Duplicate private class and object method | 6074 # Duplicate protected class and object method |
6075 lines =<< trim END | 6075 lines =<< trim END |
6076 vim9script | 6076 vim9script |
6077 class A | 6077 class A |
6078 def _Foo() | 6078 def _Foo() |
6079 enddef | 6079 enddef |
6085 enddef | 6085 enddef |
6086 | 6086 |
6087 " Test for an instance method access level comparison with parent instance | 6087 " Test for an instance method access level comparison with parent instance |
6088 " methods. | 6088 " methods. |
6089 def Test_instance_method_access_level() | 6089 def Test_instance_method_access_level() |
6090 # Private method in subclass | 6090 # protected method in subclass |
6091 var lines =<< trim END | 6091 var lines =<< trim END |
6092 vim9script | 6092 vim9script |
6093 class A | 6093 class A |
6094 def Foo() | 6094 def Foo() |
6095 enddef | 6095 enddef |
6145 END | 6145 END |
6146 v9.CheckSourceSuccess(lines) | 6146 v9.CheckSourceSuccess(lines) |
6147 enddef | 6147 enddef |
6148 | 6148 |
6149 " A interface cannot have a static variable or a static method or a private | 6149 " A interface cannot have a static variable or a static method or a private |
6150 " variable or a private method or a public variable | 6150 " variable or a protected method or a public variable |
6151 def Test_interface_with_unsupported_members() | 6151 def Test_interface_with_unsupported_members() |
6152 var lines =<< trim END | 6152 var lines =<< trim END |
6153 vim9script | 6153 vim9script |
6154 interface A | 6154 interface A |
6155 static num: number | 6155 static num: number |
6209 vim9script | 6209 vim9script |
6210 interface A | 6210 interface A |
6211 this._Foo: list<string> | 6211 this._Foo: list<string> |
6212 endinterface | 6212 endinterface |
6213 END | 6213 END |
6214 v9.CheckSourceFailure(lines, 'E1379: Private variable not supported in an interface', 3) | 6214 v9.CheckSourceFailure(lines, 'E1379: Protected variable not supported in an interface', 3) |
6215 | 6215 |
6216 lines =<< trim END | 6216 lines =<< trim END |
6217 vim9script | 6217 vim9script |
6218 interface A | 6218 interface A |
6219 def _Foo(d: dict<any>): list<string> | 6219 def _Foo(d: dict<any>): list<string> |
6220 endinterface | 6220 endinterface |
6221 END | 6221 END |
6222 v9.CheckSourceFailure(lines, 'E1380: Private method not supported in an interface', 3) | 6222 v9.CheckSourceFailure(lines, 'E1380: Protected method not supported in an interface', 3) |
6223 enddef | 6223 enddef |
6224 | 6224 |
6225 " Test for extending an interface | 6225 " Test for extending an interface |
6226 def Test_extend_interface() | 6226 def Test_extend_interface() |
6227 var lines =<< trim END | 6227 var lines =<< trim END |
7651 const math = Math.new() | 7651 const math = Math.new() |
7652 assert_equal(48, Map(math.Double)(24)) | 7652 assert_equal(48, Map(math.Double)(24)) |
7653 END | 7653 END |
7654 v9.CheckSourceSuccess(lines) | 7654 v9.CheckSourceSuccess(lines) |
7655 | 7655 |
7656 # Try using a private object method funcref from a def function | 7656 # Try using a protected object method funcref from a def function |
7657 lines =<< trim END | 7657 lines =<< trim END |
7658 vim9script | 7658 vim9script |
7659 class A | 7659 class A |
7660 def _Foo() | 7660 def _Foo() |
7661 enddef | 7661 enddef |
7664 var a = A.new() | 7664 var a = A.new() |
7665 var Fn = a._Foo | 7665 var Fn = a._Foo |
7666 enddef | 7666 enddef |
7667 Bar() | 7667 Bar() |
7668 END | 7668 END |
7669 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 2) | 7669 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 2) |
7670 | 7670 |
7671 # Try using a private object method funcref at the script level | 7671 # Try using a protected object method funcref at the script level |
7672 lines =<< trim END | 7672 lines =<< trim END |
7673 vim9script | 7673 vim9script |
7674 class A | 7674 class A |
7675 def _Foo() | 7675 def _Foo() |
7676 enddef | 7676 enddef |
7677 endclass | 7677 endclass |
7678 var a = A.new() | 7678 var a = A.new() |
7679 var Fn = a._Foo | 7679 var Fn = a._Foo |
7680 END | 7680 END |
7681 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 7) | 7681 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 7) |
7682 | 7682 |
7683 # Using a private object method funcref from another object method | 7683 # Using a protected object method funcref from another object method |
7684 lines =<< trim END | 7684 lines =<< trim END |
7685 vim9script | 7685 vim9script |
7686 class A | 7686 class A |
7687 def _Foo(): list<number> | 7687 def _Foo(): list<number> |
7688 return [3, 2, 1] | 7688 return [3, 2, 1] |
7810 | 7810 |
7811 assert_equal(48, Map(Math.StaticDouble)(24)) | 7811 assert_equal(48, Map(Math.StaticDouble)(24)) |
7812 END | 7812 END |
7813 v9.CheckSourceSuccess(lines) | 7813 v9.CheckSourceSuccess(lines) |
7814 | 7814 |
7815 # Try using a private class method funcref in a def function | 7815 # Try using a protected class method funcref in a def function |
7816 lines =<< trim END | 7816 lines =<< trim END |
7817 vim9script | 7817 vim9script |
7818 class A | 7818 class A |
7819 static def _Foo() | 7819 static def _Foo() |
7820 enddef | 7820 enddef |
7822 def Bar() | 7822 def Bar() |
7823 var Fn = A._Foo | 7823 var Fn = A._Foo |
7824 enddef | 7824 enddef |
7825 Bar() | 7825 Bar() |
7826 END | 7826 END |
7827 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 1) | 7827 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 1) |
7828 | 7828 |
7829 # Try using a private class method funcref at script level | 7829 # Try using a protected class method funcref at script level |
7830 lines =<< trim END | 7830 lines =<< trim END |
7831 vim9script | 7831 vim9script |
7832 class A | 7832 class A |
7833 static def _Foo() | 7833 static def _Foo() |
7834 enddef | 7834 enddef |
7835 endclass | 7835 endclass |
7836 var Fn = A._Foo | 7836 var Fn = A._Foo |
7837 END | 7837 END |
7838 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 6) | 7838 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 6) |
7839 | 7839 |
7840 # Using a private class method funcref from another class method | 7840 # Using a protected class method funcref from another class method |
7841 lines =<< trim END | 7841 lines =<< trim END |
7842 vim9script | 7842 vim9script |
7843 class A | 7843 class A |
7844 static def _Foo(): list<number> | 7844 static def _Foo(): list<number> |
7845 return [3, 2, 1] | 7845 return [3, 2, 1] |