patch 9.0.1201: assignment with operator doesn't work in object method
Problem: Assignment with operator doesn't work in object method.
Solution: Handle loading the object member. (closes #11820) Add a few more
tests.
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 4a2b87c..56b2dad 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -200,6 +200,25 @@
v9.CheckScriptSuccess(lines)
enddef
+def Test_assignment_with_operator()
+ var lines =<< trim END
+ vim9script
+
+ class Foo
+ this.x: number
+
+ def Add(n: number)
+ this.x += n
+ enddef
+ endclass
+
+ var f = Foo.new(3)
+ f.Add(17)
+ assert_equal(20, f.x)
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
def Test_class_default_new()
var lines =<< trim END
vim9script
@@ -521,6 +540,25 @@
END
v9.CheckScriptSuccess(lines)
+ # example in the help
+ lines =<< trim END
+ vim9script
+ class OtherThing
+ this.size: number
+ static totalSize: number
+
+ def new(this.size)
+ totalSize += this.size
+ enddef
+ endclass
+ assert_equal(0, OtherThing.totalSize)
+ var to3 = OtherThing.new(3)
+ assert_equal(3, OtherThing.totalSize)
+ var to7 = OtherThing.new(7)
+ assert_equal(10, OtherThing.totalSize)
+ END
+ v9.CheckScriptSuccess(lines)
+
# check shadowing
lines =<< trim END
vim9script
@@ -986,6 +1024,23 @@
assert_equal('Base class: 42', o.ToString())
END
v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+ class Base
+ this.value = 1
+ def new(init: number)
+ this.value = number + 1
+ enddef
+ endclass
+ class Child extends Base
+ def new()
+ this.new(3)
+ enddef
+ endclass
+ var c = Child.new()
+ END
+ v9.CheckScriptFailure(lines, 'E1325: Method not found on class "Child": new(')
enddef
def Test_class_import()