diff src/testdir/test_vim9_class.vim @ 31738:ad0712119bee v9.0.1201

patch 9.0.1201: assignment with operator doesn't work in object method Commit: https://github.com/vim/vim/commit/4cae845ce32797bcae845aacf740ed865b479f34 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 15 15:51:48 2023 +0000 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 https://github.com/vim/vim/issues/11820) Add a few more tests.
author Bram Moolenaar <Bram@vim.org>
date Sun, 15 Jan 2023 17:00:04 +0100
parents ef7a9a7eb197
children 22a4824d7964
line wrap: on
line diff
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -200,6 +200,25 @@ def Test_class_member_initializer()
   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 @@ def Test_class_member()
   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 @@ def Test_class_extends()
       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()