patch 9.0.1181: class inheritance and typing insufficiently tested
Problem: Class inheritance and typing insufficiently tested.
Solution: Add more tests. Implement missing behavior.
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index c6da4f4..139a632 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -419,6 +419,44 @@
endfor
enddef
+def Test_object_type()
+ var lines =<< trim END
+ vim9script
+
+ class One
+ this.one = 1
+ endclass
+ class Two
+ this.two = 2
+ endclass
+ class TwoMore extends Two
+ this.more = 9
+ endclass
+
+ var o: One = One.new()
+ var t: Two = Two.new()
+ var m: TwoMore = TwoMore.new()
+ var tm: Two = TwoMore.new()
+
+ t = m
+ END
+ v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+
+ class One
+ this.one = 1
+ endclass
+ class Two
+ this.two = 2
+ endclass
+
+ var o: One = Two.new()
+ END
+ v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected object<One> but got object<Two>')
+enddef
+
def Test_class_member()
# check access rules
var lines =<< trim END
@@ -750,7 +788,7 @@
var p: Point
p = 'text'
END
- v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected object but got string')
+ v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected object<Point> but got string')
enddef
def Test_class_extends()
@@ -895,6 +933,27 @@
echo o.ToString()
END
v9.CheckScriptFailure(lines, 'E1358:')
+
+ lines =<< trim END
+ vim9script
+ class Base
+ this.name: string
+ static def ToString(): string
+ return 'Base class'
+ enddef
+ endclass
+
+ class Child extends Base
+ this.age: number
+ def ToString(): string
+ return Base.ToString() .. ': ' .. this.age
+ enddef
+ endclass
+
+ var o = Child.new('John', 42)
+ assert_equal('Base class: 42', o.ToString())
+ END
+ v9.CheckScriptSuccess(lines)
enddef