summaryrefslogtreecommitdiffstats
path: root/src/testdir
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2023-08-28 21:26:23 +0200
committerChristian Brabandt <cb@256bit.org>2023-08-28 21:26:23 +0200
commit2ba9d2e14e3633c92a32abba2a12533f93fefbf5 (patch)
treee0ef8dc5b5972ce3dee19b1395b2dab7709e08fb /src/testdir
parent1d3e0e8f3110a7807431eae056914ccea57b057b (diff)
patch 9.0.1814: Vim9 no error on duplicate object member varv9.0.1814
Problem: Vim9 no error on duplicate object member var Solution: detect duplicate members and error out closes: #12938 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Diffstat (limited to 'src/testdir')
-rw-r--r--src/testdir/test_vim9_class.vim97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index f7d6b73f49..319eb0546d 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -894,6 +894,15 @@ def Test_class_object_member_access()
endclass
END
v9.CheckScriptFailure(lines, 'E1065:')
+
+ # Test for "static" cannot be followed by "this".
+ lines =<< trim END
+ vim9script
+ class Something
+ static this.val = 1
+ endclass
+ END
+ v9.CheckScriptFailure(lines, 'E1368: Static cannot be followed by "this" in a member name')
enddef
def Test_class_object_compare()
@@ -3438,4 +3447,92 @@ def Test_objmethod_funcarg()
v9.CheckScriptSuccess(lines)
enddef
+" Test for declaring duplicate object and class members
+def Test_dup_member_variable()
+ # Duplicate member variable
+ var lines =<< trim END
+ vim9script
+ class C
+ this.val = 10
+ this.val = 20
+ endclass
+ END
+ v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val')
+
+ # Duplicate private member variable
+ lines =<< trim END
+ vim9script
+ class C
+ this._val = 10
+ this._val = 20
+ endclass
+ END
+ v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _val')
+
+ # Duplicate public member variable
+ lines =<< trim END
+ vim9script
+ class C
+ public this.val = 10
+ public this.val = 20
+ endclass
+ END
+ v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val')
+
+ # Duplicate private member variable
+ lines =<< trim END
+ vim9script
+ class C
+ this.val = 10
+ this._val = 20
+ endclass
+ END
+ v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _val')
+
+ # Duplicate public and private member variable
+ lines =<< trim END
+ vim9script
+ class C
+ this._val = 20
+ public this.val = 10
+ endclass
+ END
+ v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val')
+
+ # Duplicate class member variable
+ lines =<< trim END
+ vim9script
+ class C
+ static s: string = "abc"
+ static _s: string = "def"
+ endclass
+ END
+ v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _s')
+
+ # Duplicate public and private class member variable
+ lines =<< trim END
+ vim9script
+ class C
+ public static s: string = "abc"
+ static _s: string = "def"
+ endclass
+ END
+ v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _s')
+
+ # Duplicate class and object member variable
+ lines =<< trim END
+ vim9script
+ class C
+ static val = 10
+ this.val = 20
+ def new()
+ enddef
+ endclass
+ var c = C.new()
+ assert_equal(10, C.val)
+ assert_equal(20, c.val)
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker