changeset 25522:90c8325c14be

test.m: Warn if %!tests leak variables in to base workspace. * test.m: Compare list of variables in base workspace (using evalin) before and after running %!tests. Emit a warning (not error) if variables are leaked.
author Rik <rik@octave.org>
date Fri, 29 Jun 2018 11:25:02 -0700
parents a87b4dca2ce3
children 366d4b8f6668
files scripts/testfun/test.m
diffstat 1 files changed, 11 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/testfun/test.m	Fri Jun 29 09:44:35 2018 -0700
+++ b/scripts/testfun/test.m	Fri Jun 29 11:25:02 2018 -0700
@@ -296,6 +296,9 @@
   ## Track file descriptor leaks
   __fid_list_orig = fopen ("all"); 
 
+  ## Track variable leaks
+  __variables_orig = evalin ("base", "whos");
+
   ## Assume all tests will pass.
   __all_success = true;
 
@@ -740,6 +743,14 @@
     warning ("test: file %s leaked file descriptors\n", __file);
   endif
 
+  ## Verify test file did not leak variables in to base workspace
+  __variables_post = evalin ("base", "whos");
+  if (! size_equal (__variables_post, __variables_orig))
+    __leaked_var = setdiff ({__variables_post.name},  {__variables_orig.name});
+    warning ("test: file %s leaked variables:%s\n",
+             __file, sprintf (" %s", __leaked_var{:}));
+  endif
+
   if (nargout == 0)
     if (__tests || __xfail || __xbug || __xskip || __xrtskip)
       if (__xfail || __xbug)