diff scripts/testfun/fail.m @ 20140:64a2d4c87ecb stable

Don't save "warning: " prefix in lastwarn() message. * error.cc (vwarning): Save base_msg (without "warning: ") to Vlast_warning_message. * error.cc (error_1): Use std::string operators rather than strsave to strip "\n" from fmt string. Simpler syntax avoids having to delete [] memory created with new. * error.cc (warning_1): Strip trailing newline from fmt string as error_1 does. * fail.m: Fix input validation which allowed nonsensical second input with 3 args. Don't post-process warning or error messages from lastwarn or lasterr. Add BIST test for input validation.
author Rik <rik@octave.org>
date Tue, 28 Apr 2015 14:03:03 -0700
parents 2d5cbb6ac845
children 2645f9ef8c88
line wrap: on
line diff
--- a/scripts/testfun/fail.m	Tue Apr 28 12:12:16 2015 -0400
+++ b/scripts/testfun/fail.m	Tue Apr 28 14:03:03 2015 -0700
@@ -67,11 +67,20 @@
   endif
 
   ## Parse input arguments
-  test_warning = (nargin > 1 && strcmp (pattern, "warning"));
-  if (nargin == 3)
-    pattern = warning_pattern;
-  elseif (nargin == 1 || (nargin == 2 && test_warning))
+  test_warning = false;
+  if (nargin == 1)
     pattern = "";
+  elseif (nargin == 2 && ! strcmp (pattern, "warning"))
+    ## Normal error test
+  elseif (nargin >= 2 && strcmp (pattern, "warning"))
+    test_warning = true;
+    if (nargin == 2)
+      pattern = "";
+    else
+      pattern = warning_pattern;
+    endif
+  else
+    print_usage ();
   endif
 
   ## Match any nonempty message
@@ -89,28 +98,24 @@
     ## Clear old warnings.
     lastwarn ("");
     ## Make sure warnings are turned on.
-    state = warning ("query", "quiet");
+    wstate = warning ("query", "quiet");
     warning ("on", "quiet");
     try
       evalin ("caller", [code ";"]);
       ## Retrieve new warnings.
       warn = lastwarn ();
-      warning (state.state, "quiet");
+      warning (wstate.state, "quiet");
       if (isempty (warn))
         msg = sprintf ("expected warning <%s> but got none", pattern);
       else
-        ## Transform "warning: ...\n" to "...".
-        warn([1:9, end]) = [];
         if (! isempty (regexp (warn, pattern, "once")))
           return;
         endif
         msg = sprintf ("expected warning <%s>\nbut got <%s>", pattern, warn);
       endif
     catch
-      warning (state.state, "quiet");
-      err = lasterr;
-      ## Transform "error: ...\n", to "...".
-      err([1:6, end]) = [];
+      warning (wstate.state, "quiet");
+      err = lasterr ();
       msg = sprintf ("expected warning <%s>\nbut got error <%s>", pattern, err);
     end_try_catch
 
@@ -121,9 +126,6 @@
       msg = sprintf ("expected error <%s> but got none", pattern);
     catch
       err = lasterr ();
-      if (strcmp (err(1:7), "error:"))
-         err([1:6, end]) = []; # transform "error: ...\n", to "..."
-      endif
       if (! isempty (regexp (err, pattern, "once")))
         return;
       endif
@@ -153,4 +155,5 @@
 ## Test input validation
 %!error fail ()
 %!error fail (1,2,3,4)
+%!error fail (1, "nowarning", "foo")