Mercurial > hg > octave-lyh
changeset 16977:0d5d3e53255f
test.m: Fix randomly failing %!warning test blocks (bug #35850, bug #38679).
* scripts/testfun/test.m: Initialize lasterr and lastwarn to "" before running
code block. Rewrite trimleft which generated its own error with "" input.
Change output messages to correctly print "error" or "warning" depending on
code block type. Workaround really odd bug with lastwarn function when embedded
in try/catch blocks.
author | Rik <rik@octave.org> |
---|---|
date | Sat, 13 Jul 2013 16:27:49 -0700 |
parents | 13affad7347c |
children | 00379f9f8773 |
files | scripts/testfun/test.m |
diffstat | 1 files changed, 19 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/testfun/test.m +++ b/scripts/testfun/test.m @@ -395,7 +395,7 @@ if (! strcmp (__pattern, '.')) __patstr = ["<",__pattern,">"]; else - __patstr = "an error"; + __patstr = ifelse (__warning, "a warning", "an error"); endif endif try @@ -411,17 +411,25 @@ __success = 0; __warnstate = warning ("query", "quiet"); warning ("on", "quiet"); + ## Clear error and warning strings before starting + lasterr (""); + lastwarn (""); try + ## FIXME: lastwarn () must be called once from *WITHIN* the try block + ## or subsequent warning/lastwarn statements may fail. + ## Likely this is something to do with the specialness of + ## the try block which is disabling normal errors. + lastwarn (); eval (sprintf ("__test__(%s);", __shared)); if (! __warning) __msg = sprintf ("%serror failed.\nExpected %s but got no error\n", __signal_fail, __patstr); else if (! isempty (__id)) - [~, __err] = lastwarn; + [~, __err] = lastwarn (); __mismatch = ! strcmp (__err, __id); else - __err = trimerr (lastwarn, "warning"); + __err = trimerr (lastwarn (), "warning"); __mismatch = isempty (regexp (__err, __pattern, "once")); endif warning (__warnstate.state, "quiet"); @@ -430,7 +438,7 @@ "Expected %s but got no warning\n"], __signal_fail, __patstr); elseif (__mismatch) - __msg = sprintf ("%serror failed.\nExpected %s but got <%s>\n", + __msg = sprintf ("%swarning failed.\nExpected %s but got <%s>\n", __signal_fail, __patstr, __err); else __success = 1; @@ -439,10 +447,10 @@ catch if (! isempty (__id)) - [~, __err] = lasterr; + [~, __err] = lasterr (); __mismatch = ! strcmp (__err, __id); else - __err = trimerr (lasterr, "error"); + __err = trimerr (lasterr (), "error"); __mismatch = isempty (regexp (__err, __pattern, "once")); endif warning (__warnstate.state, "quiet"); @@ -645,20 +653,17 @@ ## Strip '.*prefix:' from '.*prefix: msg\n' and strip trailing blanks. function msg = trimerr (msg, prefix) - idx = index (msg, cstrcat (prefix, ":")); + idx = index (msg, [prefix ":"]); if (idx > 0) msg(1:idx+length(prefix)) = []; endif - msg = trimleft (deblank (msg)); + msg = strtrim (msg); endfunction ## Strip leading blanks from string. function str = trimleft (str) - idx = find (isspace (str)); - leading = find (idx == 1:length (idx)); - if (! isempty (leading)) - str = str(leading(end)+1:end); - endif + idx = find (! isspace (str), 1); + str = str(idx:end); endfunction ## Make a structure out of the named variables @@ -686,6 +691,7 @@ endif endfunction + ### example from toeplitz %!shared msg1,msg2 %! msg1="C must be a vector";