patch 9.1.0136: Vim9: need more test for exists()
methods

Problem:  Vim9: need more test for exists()
Solution: Add test for exists() with class/objct variables and methods
          (Yegappan Lakshmanan)

closes: #14088

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/test_exists.vim b/src/testdir/test_exists.vim
index a735a7d..9cdb3fb 100644
--- a/src/testdir/test_exists.vim
+++ b/src/testdir/test_exists.vim
@@ -1,5 +1,7 @@
 " Tests for the exists() function
 
+import './vim9.vim' as v9
+
 func Test_exists()
   augroup myagroup
       autocmd! BufEnter       *.my     echo "myfile edited"
@@ -334,4 +336,51 @@
   call FuncArg_Tests("arg1", "arg2")
 endfunc
 
+" Test for using exists() with class and object variables and methods.
+func Test_exists_class_object()
+  let lines =<< trim END
+    vim9script
+    class A
+      var var1: number = 10
+      static var var2: number = 10
+      static def Foo()
+      enddef
+      def Bar()
+      enddef
+    endclass
+
+    assert_equal(1, exists("A"))
+    var a = A.new()
+    assert_equal(1, exists("a"))
+
+    assert_equal(1, exists("a.var1"))
+    assert_fails('exists("a.var2")', 'E1375: Class variable "var2" accessible only using class "A"')
+    assert_fails('exists("a.var3")', 'E1326: Variable "var3" not found in object "A"')
+    assert_equal(1, exists("A.var2"))
+    assert_fails('exists("A.var1")', 'E1376: Object variable "var1" accessible only using class "A" object')
+    assert_fails('exists("A.var3")', 'E1337: Class variable "var3" not found in class "A"')
+
+    assert_equal(1, exists("a.Bar"))
+    assert_fails('exists("a.Barz")', 'E1326: Variable "Barz" not found in object "A"')
+    assert_fails('exists("a.Foo")', 'E1326: Variable "Foo" not found in object "A"')
+    assert_equal(1, exists("A.Foo"))
+    assert_fails('exists("A.Bar")', 'E1337: Class variable "Bar" not found in class "A"')
+    assert_fails('exists("A.Barz")', 'E1337: Class variable "Barz" not found in class "A"')
+
+    def Baz()
+      assert_equal(1, exists("A"))
+      var aa = A.new()
+      assert_equal(1, exists("A.var2"))
+      assert_fails('exists("A.var1")', 'E1376: Object variable "var1" accessible only using class "A" object')
+      assert_fails('exists("A.var3")', 'E1337: Class variable "var3" not found in class "A"')
+
+      assert_equal(1, exists("A.Foo"))
+      assert_fails('exists("A.Bar")', 'E1337: Class variable "Bar" not found in class "A"')
+      assert_fails('exists("A.Barz")', 'E1337: Class variable "Barz" not found in class "A"')
+    enddef
+    Baz()
+  END
+  call v9.CheckSourceSuccess(lines)
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab