Mercurial > vim
changeset 34427:2c0b18822510 v9.1.0136
patch 9.1.0136: Vim9: need more test for exists() methods
Commit: https://github.com/vim/vim/commit/a2ebb6e9176d007c11804bb9784beee35a8050c8
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Sun Feb 25 08:40:10 2024 +0100
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>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 25 Feb 2024 08:45:06 +0100 |
parents | af0fe603b692 |
children | 9054ef2e4642 |
files | runtime/doc/builtin.txt src/testdir/test_exists.vim src/version.c |
diffstat | 3 files changed, 57 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -1,4 +1,4 @@ -*builtin.txt* For Vim version 9.1. Last change: 2024 Feb 24 +*builtin.txt* For Vim version 9.1. Last change: 2024 Feb 25 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2405,11 +2405,11 @@ exists({expr}) The result is a Number, w varname internal variable (see dict.key |internal-variables|). Also works list[i] for |curly-braces-names|, |Dictionary| - import.Func entries, |List| items, imported - items, etc. - Does not work for local variables in a - compiled `:def` function. - Also works for a function in |Vim9| + import.Func entries, |List| items, class and + class.Func object methods, imported items, etc. + object.Func Does not work for local variables in a + class.varname compiled `:def` function. + object.varname Also works for a function in |Vim9| script, since it can be used as a function reference. Beware that evaluating an index may
--- 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 @@ func Test_exists_funcarg() 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