summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_vim9_class.vim
diff options
context:
space:
mode:
authorErnie Rael <errael@raelity.com>2023-10-06 19:55:52 +0200
committerChristian Brabandt <cb@256bit.org>2023-10-06 19:55:52 +0200
commite6c9aa5e6a88d539a412a9b5526f41ea101aa185 (patch)
tree2ba9d1d12205cbe879b917b1e78b3df7bc43f4f9 /src/testdir/test_vim9_class.vim
parent85f4521808dd9a587c00f9a2927e84217721cfca (diff)
patch 9.0.1999: Vim9: some error messages can be improvedv9.0.1999
Problem: Vim9: some error messages can be improved Solution: Mention the defining class for variable access error message closes: #13272 Signed-off-by: Christian Brabandt <cb@256bit.org> Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Co-authored-by: Ernie Rael <errael@raelity.com>
Diffstat (limited to 'src/testdir/test_vim9_class.vim')
-rw-r--r--src/testdir/test_vim9_class.vim113
1 files changed, 113 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index dc539aca49..0c8fd7057a 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -1725,6 +1725,119 @@ def Test_class_member()
v9.CheckSourceFailure(lines, 'E1326: Variable not found on object "A": bar', 5)
enddef
+" These messages should show the defining class of the variable (base class),
+" not the class that did the reference (super class)
+def Test_defining_class_message()
+ var lines =<< trim END
+ vim9script
+
+ class Base
+ this._v1: list<list<number>>
+ endclass
+
+ class Child extends Base
+ endclass
+
+ var o = Child.new()
+ var x = o._v1
+ END
+ v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Base"', 11)
+ lines =<< trim END
+ vim9script
+
+ class Base
+ this._v1: list<list<number>>
+ endclass
+
+ class Child extends Base
+ endclass
+
+ def F()
+ var o = Child.new()
+ var x = o._v1
+ enddef
+ F()
+ END
+ v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Base"', 2)
+ lines =<< trim END
+ vim9script
+
+ class Base
+ this.v1: list<list<number>>
+ endclass
+
+ class Child extends Base
+ endclass
+
+ var o = Child.new()
+ o.v1 = []
+ END
+ v9.CheckSourceFailure(lines, 'E1335: Variable "v1" in class "Base" is not writable', 11)
+ lines =<< trim END
+ vim9script
+
+ class Base
+ this.v1: list<list<number>>
+ endclass
+
+ class Child extends Base
+ endclass
+
+ def F()
+ var o = Child.new()
+ o.v1 = []
+ enddef
+ F()
+ END
+
+ # Attempt to read a private variable that is in the middle
+ # of the class hierarchy.
+ v9.CheckSourceFailure(lines, 'E1335: Variable "v1" in class "Base" is not writable', 2)
+ lines =<< trim END
+ vim9script
+
+ class Base0
+ endclass
+
+ class Base extends Base0
+ this._v1: list<list<number>>
+ endclass
+
+ class Child extends Base
+ endclass
+
+ def F()
+ var o = Child.new()
+ var x = o._v1
+ enddef
+ F()
+ END
+ v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Base"', 2)
+
+ # Attempt to read a private variable that is at the start
+ # of the class hierarchy.
+ lines =<< trim END
+ vim9script
+
+ class Base0
+ endclass
+
+ class Base extends Base0
+ endclass
+
+ class Child extends Base
+ this._v1: list<list<number>>
+ endclass
+
+ def F()
+ var o = Child.new()
+ var x = o._v1
+ enddef
+ F()
+ END
+ v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Child"', 2)
+enddef
+
func Test_class_garbagecollect()
let lines =<< trim END
vim9script