# HG changeset patch # User Jaroslav Hajek # Date 1267791691 -3600 # Node ID f7cf1a53e1c5917bf432e2b3427af7c66bd5c79c # Parent 180931276a52f3663a869937dcb9f8ae993ba034 support ID test for errors and warningsin test suites diff -r 180931276a52 -r f7cf1a53e1c5 scripts/ChangeLog --- a/scripts/ChangeLog Fri Mar 05 12:40:06 2010 +0100 +++ b/scripts/ChangeLog Fri Mar 05 13:21:31 2010 +0100 @@ -1,3 +1,7 @@ +2010-03-05 Jaroslav Hajek + + * testfun/test.m: Support catching warnings and errors by IDs. + 2010-03-05 Jaroslav Hajek * general/accumdim.m: Optimize the summation case. diff -r 180931276a52 -r f7cf1a53e1c5 scripts/testfun/test.m --- a/scripts/testfun/test.m Fri Mar 05 12:40:06 2010 +0100 +++ b/scripts/testfun/test.m Fri Mar 05 13:21:31 2010 +0100 @@ -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 from ' 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