patch 9.1.1119: Vim9: Not able to use an autoloaded class from another autoloaded script
Problem: Vim9: Not able to use an autoloaded class from another
autoloaded script (Elliot)
Solution: make it work (Yegappan Lakshmanan)
fixes: #15031
closes: #16652
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 0f692ed..1e63f22 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -544,7 +544,7 @@
var lines =<< trim END
@_ = null_class.member
END
- v9.CheckDefExecAndScriptFailure(lines, ['E715: Dictionary required', 'E1363: Incomplete type'])
+ v9.CheckDefExecAndScriptFailure(lines, ['E1395: Using a null class', 'E1363: Incomplete type'])
# Test for using a null class as a value
lines =<< trim END
diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim
index c92aed0..8d81697 100644
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -3494,4 +3494,75 @@
&rtp = save_rtp
enddef
+" Test for using an autoloaded class from another autoloaded script
+def Test_class_from_auloaded_script()
+ mkdir('Xdir', 'R')
+ var save_rtp = &rtp
+ &rtp = getcwd()
+ exe 'set rtp^=' .. getcwd() .. '/Xdir'
+
+ mkdir('Xdir/autoload/SomeClass/bar', 'p')
+
+ var lines =<< trim END
+ vim9script
+
+ export class Baz
+ static var v1: string = "v1"
+ var v2: string = "v2"
+ def GetName(): string
+ return "baz"
+ enddef
+ endclass
+ END
+ writefile(lines, 'Xdir/autoload/SomeClass/bar/baz.vim', 'D')
+
+ lines =<< trim END
+ vim9script
+
+ import autoload './bar/baz.vim'
+
+ export def MyTestFoo(): string
+ assert_fails('var x = baz.Baz.NonExisting()', 'E1325: Method "NonExisting" not found in class "Baz"')
+ assert_fails('var x = baz.Baz.foobar', 'E1337: Class variable "foobar" not found in class "Baz"')
+
+ const instance = baz.Baz.new()
+ return $'{instance.GetName()} {baz.Baz.v1} {instance.v2}'
+ enddef
+ END
+ writefile(lines, 'Xdir/autoload/SomeClass/foo.vim', 'D')
+
+ lines =<< trim END
+ vim9script
+
+ import autoload 'SomeClass/foo.vim'
+ import autoload 'SomeClass/bar/baz.vim'
+
+ def NotInAutoload()
+ # Use non-existing class method and variable
+ assert_fails('var x = baz.Baz.NonExisting()', 'E1325: Method "NonExisting" not found in class "Baz"')
+
+ var caught_exception = false
+ try
+ var x = baz.Baz.foobar
+ catch /E1337: Class variable "foobar" not found in class "Baz"/
+ caught_exception = true
+ endtry
+ assert_true(caught_exception)
+
+ const instance = baz.Baz.new()
+ assert_equal("baz v1 v2", $'{instance.GetName()} {baz.Baz.v1} {instance.v2}')
+ enddef
+
+ def InAutoload()
+ assert_equal("baz v1 v2", foo.MyTestFoo())
+ enddef
+
+ NotInAutoload()
+ InAutoload()
+ END
+ v9.CheckScriptSuccess(lines)
+
+ &rtp = save_rtp
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker