summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_vim9_fails.vim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/testdir/test_vim9_fails.vim62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_fails.vim b/src/testdir/test_vim9_fails.vim
new file mode 100644
index 0000000..9d43370
--- /dev/null
+++ b/src/testdir/test_vim9_fails.vim
@@ -0,0 +1,62 @@
+" Test for Vim9 script with failures, causing memory leaks to be reported.
+" The leaks happen after a fork() and can be ignored.
+
+source check.vim
+
+def Test_assignment()
+ if !has('channel')
+ CheckFeature channel
+ else
+ var chan1: channel
+ var job1: job
+ var job2: job = job_start('willfail')
+ endif
+enddef
+
+" Unclear why this test causes valgrind to report problems.
+def Test_job_info_return_type()
+ if !has('job')
+ CheckFeature job
+ else
+ var job: job = job_start(&shell)
+ var jobs = job_info()
+ assert_equal('list<job>', typename(jobs))
+ assert_equal('dict<any>', typename(job_info(jobs[0])))
+ job_stop(job)
+ endif
+enddef
+
+" Using "idx" from a legacy global function does not work.
+" This caused a crash when called from legacy context.
+" This creates a dict that contains a partial that refers to the dict, causing
+" valgrind to report "possibly leaked memory".
+func Test_partial_call_fails()
+ let lines =<< trim END
+ vim9script
+
+ var l = ['a', 'b', 'c']
+ def Iter(container: any): any
+ var idx = -1
+ var obj = {state: container}
+ def g:NextItem__(self: dict<any>): any
+ ++idx
+ return self.state[idx]
+ enddef
+ obj.__next__ = function('g:NextItem__', [obj])
+ return obj
+ enddef
+
+ var it = Iter(l)
+ echo it.__next__()
+ END
+ call writefile(lines, 'XpartialCall', 'D')
+ let caught = 'no'
+ try
+ source XpartialCall
+ catch /E1248:/
+ let caught = 'yes'
+ endtry
+ call assert_equal('yes', caught)
+ delfunc g:NextItem__
+endfunc
+