Mercurial > hg > octave-lojdl
changeset 10398:f7cf1a53e1c5
support ID test for errors and warningsin test suites
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 05 Mar 2010 13:21:31 +0100 |
parents | 180931276a52 |
children | 81bcdf5fd7a9 |
files | scripts/ChangeLog scripts/testfun/test.m |
diffstat | 2 files changed, 41 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,7 @@ +2010-03-05 Jaroslav Hajek <highegg@gmail.com> + + * testfun/test.m: Support catching warnings and errors by IDs. + 2010-03-05 Jaroslav Hajek <highegg@gmail.com> * general/accumdim.m: Optimize the summation case.
--- a/scripts/testfun/test.m +++ b/scripts/testfun/test.m @@ -373,7 +373,12 @@ elseif (strcmp (__type, "error") || strcmp(__type, "warning")) __istest = 1; __warning = strcmp (__type, "warning"); - [__pattern, __code] = getpattern (__code); + [__pattern, __id, __code] = getpattern (__code); + if (__id) + __patstr = ["id=",__id]; + else + __patstr = ["<",__pattern,">"]; + endif try eval (sprintf ("function __test__(%s)\n%s\nendfunction", __shared, __code)); @@ -390,31 +395,43 @@ try eval (sprintf ("__test__(%s);", __shared)); if (! __warning) - __msg = sprintf ("%sexpected <%s> but got no error\n", - __signal_fail, __pattern); + __msg = sprintf ("%sexpected %s but got no error\n", + __signal_fail, __patstr); else - __err = trimerr (lastwarn, "warning"); + if (! isempty (__id)) + [~, __err] = lastwarn; + __mismatch = ! strcmp (__err, __id); + else + __err = trimerr (lastwarn, "warning"); + __mismatch = isempty (regexp (__err, __pattern, "once")); + endif warning (__warnstate.state, "quiet"); if (isempty (__err)) - __msg = sprintf ("%sexpected <%s> but got no warning\n", - __signal_fail, __pattern); - elseif (isempty (regexp (__err, __pattern, "once"))) - __msg = sprintf ("%sexpected <%s> but got %s\n", - __signal_fail, __pattern, __err); + __msg = sprintf ("%sexpected %s but got no warning\n", + __signal_fail, __patstr); + elseif (__mismatch) + __msg = sprintf ("%sexpected %s but got %s\n", + __signal_fail, __patstr, __err); else __success = 1; endif endif catch - __err = trimerr (lasterr, "error"); + if (! isempty (__id)) + [~, __err] = lasterr; + __mismatch = ! strcmp (__err, __id); + else + __err = trimerr (lasterr, "error"); + __mismatch = isempty (regexp (__err, __pattern, "once")); + endif warning (__warnstate.state, "quiet"); if (__warning) - __msg = sprintf ("%sexpected warning <%s> but got error %s\n", - __signal_fail, __pattern, __err); - elseif (isempty (regexp (__err, __pattern, "once"))) - __msg = sprintf ("%sexpected <%s> but got %s\n", - __signal_fail, __pattern, __err); + __msg = sprintf ("%sexpected warning %s but got error %s\n", + __signal_fail, __patstr, __err); + elseif (__mismatch) + __msg = sprintf ("%sexpected %s but got %s\n", + __signal_fail, __patstr, __err); else __success = 1; endif @@ -576,8 +593,10 @@ endfunction ## Strip <pattern> from '<pattern> code'. -function [pattern, rest] = getpattern (str) +## Also handles 'id=ID code' +function [pattern, id, rest] = getpattern (str) pattern = "."; + id = []; rest = str; str = trimleft (str); if (! isempty (str) && str(1) == "<") @@ -586,6 +605,8 @@ pattern = str(2:close-1); rest = str(close+1:end); endif + elseif (strncmp (str, "id=", 3)) + [id, rest] = strtok (str(4:end)); endif endfunction