Mercurial > octave-antonio
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")