changeset 7242:e4398e3903be

[project @ 2007-12-03 23:52:07 by dbateman]
author dbateman
date Mon, 03 Dec 2007 23:52:07 +0000
parents da540e715d05
children e8d7eed42935
files scripts/ChangeLog scripts/testfun/test.m src/ChangeLog src/DLD-FUNCTIONS/regexp.cc
diffstat 4 files changed, 142 insertions(+), 139 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog	Mon Dec 03 22:55:21 2007 +0000
+++ b/scripts/ChangeLog	Mon Dec 03 23:52:07 2007 +0000
@@ -1,5 +1,7 @@
 2007-12-03  David Bateman  <dbateman@free.fr>
 
+	* testfun/test.m: Add "testif" type to allow for conditional tests.
+
 	* plot/plotyy.m: Use activepositionproperty property of axes
 	object. Set second axis color to "none".
 	* plot/__go_draw_axes__.m: Respect the activepositionproperty
--- a/scripts/testfun/test.m	Mon Dec 03 22:55:21 2007 +0000
+++ b/scripts/testfun/test.m	Mon Dec 03 23:52:07 2007 +0000
@@ -75,14 +75,16 @@
 
 ## PKG_ADD: mark_as_command test
 
-function [__ret1, __ret2, __ret3] = test (__name, __flag, __fid)
+function [__ret1, __ret2, __ret3, __ret4] = test (__name, __flag, __fid)
   ## information from test will be introduced by "key" 
   persistent __signal_fail =  "!!!!! ";
   persistent __signal_empty = "????? ";
   persistent __signal_block = "  ***** ";
   persistent __signal_file =  ">>>>> ";
+  persistent __signal_skip = "----- ";
 
   __xfail = 0;
+  __xskip = 0;
 
   if (nargin < 2 || isempty (__flag))
     __flag = "quiet";
@@ -415,6 +417,20 @@
       endif
       __code = ""; # code already processed
       
+    ## TESTIF
+    elseif (strcmp (__type, "testif"))
+      [__e, __feat] = regexp (__code, '^\s*([^\s]+)', 'end', 'tokens');
+      if (isempty (findstr (octave_config_info ("DEFS"), __feat{1}{1})))
+        __xskip++;
+	__success = 0;
+	__istest = 0;
+	__code = ""; # skip the code
+	__msg = sprintf ("%sskipped test\n", __signal_skip);
+      else
+        __istest = 1;
+	__code = __code(__e + 1 : end);
+      endif
+
     ## TEST
     elseif (strcmp (__type, "test") || strcmp (__type, "xtest"))
       __istest = 1;
@@ -495,6 +511,9 @@
     else
       printf ("PASSES %d out of %d tests\n", __successes, __tests);
     endif
+    if (__xskip)
+      printf ("Skipped %d tests due to missing features\n", __xskip);
+    endif
   elseif (__grabdemo)
     __ret1 = __demo_code;
     __ret2 = __demo_idx;
@@ -504,6 +523,7 @@
     __ret1 = __successes;
     __ret2 = __tests;
     __ret3 = __xfail;
+    __ret4 = __xskip;
   endif
 endfunction
 
@@ -594,6 +614,14 @@
   endif
 endfunction
 
+## Test for test for missing features
+%!testif OCTAVE_SOURCE
+%! ## This test should be run
+%! assert (true);
+%!testif HAVE_FOOBAR
+%! ## missing feature. Fail if this test is run
+%! error("Failed missing feature test");
+
 ### Test for a known failure
 %!xtest error("This test is known to fail")
 
--- a/src/ChangeLog	Mon Dec 03 22:55:21 2007 +0000
+++ b/src/ChangeLog	Mon Dec 03 23:52:07 2007 +0000
@@ -1,11 +1,12 @@
-2007-12-02  David Bateman  <dbateman@free.fr>
+2007-12-03  David Bateman  <dbateman@free.fr>
+
+	* DLD-FUNCTIONS/regexp.cc: Use "%!testif" blocks for conditional
+	tests on PCRE.
 
 	* graphics.cc (class axes): Add color and activepositionproperty
 	properties to axis objects.
 	* graphics.h.in (class axes): ditto.
 
-2007-12-03  David Bateman  <dbateman@free.fr>
-
 	* DLD-FUNCTIONS/regexp.cc: Also include sys/types.h for regexp.
 
 2007-11-30  John W. Eaton  <jwe@octave.org>
--- a/src/DLD-FUNCTIONS/regexp.cc	Mon Dec 03 22:55:21 2007 +0000
+++ b/src/DLD-FUNCTIONS/regexp.cc	Mon Dec 03 23:52:07 2007 +0000
@@ -927,95 +927,81 @@
 %! ## Matlab gives [1,0] here but that seems wrong.
 %! assert (size(t), [1,1])
 
-%!test
+%!testif HAVE_PCRE
 %! ## This test is expected to fail if PCRE is not installed
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   [s, e, te, m, t, nm] = regexp('short test string','(?<word1>\w*t)\s*(?<word2>\w*t)');
-%!   assert (s,1)
-%!   assert (e,10)
-%!   assert (size(te), [1,1])
-%!   assert (te{1}, [1 5; 7, 10])
-%!   assert (m{1},'short test')
-%!   assert (size(t),[1,1])
-%!   assert (t{1}{1},'short')
-%!   assert (t{1}{2},'test')
-%!   assert (size(nm), [1,1])
-%!   assert (!isempty(fieldnames(nm)))
-%!   assert (sort(fieldnames(nm)),{'word1';'word2'})
-%!   assert (nm.word1,'short')
-%!   assert (nm.word2,'test')
-%! endif
+%! [s, e, te, m, t, nm] = regexp('short test string','(?<word1>\w*t)\s*(?<word2>\w*t)');
+%! assert (s,1)
+%! assert (e,10)
+%! assert (size(te), [1,1])
+%! assert (te{1}, [1 5; 7, 10])
+%! assert (m{1},'short test')
+%! assert (size(t),[1,1])
+%! assert (t{1}{1},'short')
+%! assert (t{1}{2},'test')
+%! assert (size(nm), [1,1])
+%! assert (!isempty(fieldnames(nm)))
+%! assert (sort(fieldnames(nm)),{'word1';'word2'})
+%! assert (nm.word1,'short')
+%! assert (nm.word2,'test')
 
-%!test
+%!testif HAVE_PCRE
 %! ## This test is expected to fail if PCRE is not installed
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   [nm, m, te, e, s, t] = regexp('short test string','(?<word1>\w*t)\s*(?<word2>\w*t)', 'names', 'match', 'tokenExtents', 'end', 'start', 'tokens');
-%!   assert (s,1)
-%!   assert (e,10)
-%!   assert (size(te), [1,1])
-%!   assert (te{1}, [1 5; 7, 10])
-%!   assert (m{1},'short test')
-%!   assert (size(t),[1,1])
-%!   assert (t{1}{1},'short')
-%!   assert (t{1}{2},'test')
-%!   assert (size(nm), [1,1])
-%!   assert (!isempty(fieldnames(nm)))
-%!   assert (sort(fieldnames(nm)),{'word1';'word2'})
-%!   assert (nm.word1,'short')
-%!   assert (nm.word2,'test')
-%! endif
+%! [nm, m, te, e, s, t] = regexp('short test string','(?<word1>\w*t)\s*(?<word2>\w*t)', 'names', 'match', 'tokenExtents', 'end', 'start', 'tokens');
+%! assert (s,1)
+%! assert (e,10)
+%! assert (size(te), [1,1])
+%! assert (te{1}, [1 5; 7, 10])
+%! assert (m{1},'short test')
+%! assert (size(t),[1,1])
+%! assert (t{1}{1},'short')
+%! assert (t{1}{2},'test')
+%! assert (size(nm), [1,1])
+%! assert (!isempty(fieldnames(nm)))
+%! assert (sort(fieldnames(nm)),{'word1';'word2'})
+%! assert (nm.word1,'short')
+%! assert (nm.word2,'test')
 
-%!test
+%!testif HAVE_PCRE
 %! ## This test is expected to fail if PCRE is not installed
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   [t, nm] = regexp("John Davis\nRogers, James",'(?<first>\w+)\s+(?<last>\w+)|(?<last>\w+),\s+(?<first>\w+)','tokens','names');
-%!   assert (size(t), [1,2]);
-%!   assert (t{1}{1},'John');
-%!   assert (t{1}{2},'Davis');
-%!   assert (t{2}{1},'Rogers');
-%!   assert (t{2}{2},'James');
-%!   assert (size(nm), [1,1]);
-%!   assert (nm.first{1},'John');
-%!   assert (nm.first{2},'James');
-%!   assert (nm.last{1},'Davis');
-%!   assert (nm.last{2},'Rogers');
-%! endif
+%! [t, nm] = regexp("John Davis\nRogers, James",'(?<first>\w+)\s+(?<last>\w+)|(?<last>\w+),\s+(?<first>\w+)','tokens','names');
+%! assert (size(t), [1,2]);
+%! assert (t{1}{1},'John');
+%! assert (t{1}{2},'Davis');
+%! assert (t{2}{1},'Rogers');
+%! assert (t{2}{2},'James');
+%! assert (size(nm), [1,1]);
+%! assert (nm.first{1},'John');
+%! assert (nm.first{2},'James');
+%! assert (nm.last{1},'Davis');
+%! assert (nm.last{2},'Rogers');
 
 %!assert(regexp("abc\nabc",'.'),[1:7])
 %!assert(regexp("abc\nabc",'.','dotall'),[1:7])
-%!test
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   assert(regexp("abc\nabc",'(?s).'),[1:7])
-%!   assert(regexp("abc\nabc",'.','dotexceptnewline'),[1,2,3,5,6,7])
-%!   assert(regexp("abc\nabc",'(?-s).'),[1,2,3,5,6,7])
-%! endif
+%!testif HAVE_PCRE
+%! assert(regexp("abc\nabc",'(?s).'),[1:7])
+%! assert(regexp("abc\nabc",'.','dotexceptnewline'),[1,2,3,5,6,7])
+%! assert(regexp("abc\nabc",'(?-s).'),[1,2,3,5,6,7])
 
 %!assert(regexp("caseCaSe",'case'),1)
 %!assert(regexp("caseCaSe",'case',"matchcase"),1)
 %!assert(regexp("caseCaSe",'case',"ignorecase"),[1,5])
-%!test
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   assert(regexp("caseCaSe",'(?-i)case'),1)
-%!   assert(regexp("caseCaSe",'(?i)case'),[1,5])
-%! endif
+%!testif HAVE_PCRE
+%! assert(regexp("caseCaSe",'(?-i)case'),1)
+%! assert(regexp("caseCaSe",'(?i)case'),[1,5])
 
 %!assert (regexp("abc\nabc",'c$'),7)
 %!assert (regexp("abc\nabc",'c$',"stringanchors"),7)
-%!test
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   assert (regexp("abc\nabc",'(?-m)c$'),7)
-%!   assert (regexp("abc\nabc",'c$',"lineanchors"),[3,7])
-%!   assert (regexp("abc\nabc",'(?m)c$'),[3,7])
-%! endif
+%!testif HAVE_PCRE
+%! assert (regexp("abc\nabc",'(?-m)c$'),7)
+%! assert (regexp("abc\nabc",'c$',"lineanchors"),[3,7])
+%! assert (regexp("abc\nabc",'(?m)c$'),[3,7])
 
 %!assert (regexp("this word",'s w'),4)
 %!assert (regexp("this word",'s w','literalspacing'),4)
-%!test
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   assert (regexp("this word",'(?-x)s w','literalspacing'),4)
-%!   assert (regexp("this word",'s w','freespacing'),zeros(1,0))
-%!   assert (regexp("this word",'(?x)s w'),zeros(1,0))
-%! endif
+%!testif HAVE_PCRE
+%! assert (regexp("this word",'(?-x)s w','literalspacing'),4)
+%! assert (regexp("this word",'s w','freespacing'),zeros(1,0))
+%! assert (regexp("this word",'(?x)s w'),zeros(1,0))
 
 %!error regexp('string', 'tri', 'BadArg');
 %!error regexp('string');
@@ -1117,79 +1103,67 @@
 %! ## Matlab gives [1,0] here but that seems wrong.
 %! assert (size(t), [1,1])
 
-%!test
+%!testif HAVE_PCRE
 %! ## This test is expected to fail if PCRE is not installed
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   [s, e, te, m, t, nm] = regexpi('ShoRt Test String','(?<word1>\w*t)\s*(?<word2>\w*t)');
-%!   assert (s,1)
-%!   assert (e,10)
-%!   assert (size(te), [1,1])
-%!   assert (te{1}, [1 5; 7, 10])
-%!   assert (m{1},'ShoRt Test')
-%!   assert (size(t),[1,1])
-%!   assert (t{1}{1},'ShoRt')
-%!   assert (t{1}{2},'Test')
-%!   assert (size(nm), [1,1])
-%!   assert (!isempty(fieldnames(nm)))
-%!   assert (sort(fieldnames(nm)),{'word1';'word2'})
-%!   assert (nm.word1,'ShoRt')
-%!   assert (nm.word2,'Test')
-%! endif
+%! [s, e, te, m, t, nm] = regexpi('ShoRt Test String','(?<word1>\w*t)\s*(?<word2>\w*t)');
+%! assert (s,1)
+%! assert (e,10)
+%! assert (size(te), [1,1])
+%! assert (te{1}, [1 5; 7, 10])
+%! assert (m{1},'ShoRt Test')
+%! assert (size(t),[1,1])
+%! assert (t{1}{1},'ShoRt')
+%! assert (t{1}{2},'Test')
+%! assert (size(nm), [1,1])
+%! assert (!isempty(fieldnames(nm)))
+%! assert (sort(fieldnames(nm)),{'word1';'word2'})
+%! assert (nm.word1,'ShoRt')
+%! assert (nm.word2,'Test')
 
-%!test
+%!testif HAVE_PCRE
 %! ## This test is expected to fail if PCRE is not installed
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   [nm, m, te, e, s, t] = regexpi('ShoRt Test String','(?<word1>\w*t)\s*(?<word2>\w*t)', 'names', 'match', 'tokenExtents', 'end', 'start', 'tokens');
-%!   assert (s,1)
-%!   assert (e,10)
-%!   assert (size(te), [1,1])
-%!   assert (te{1}, [1 5; 7, 10])
-%!   assert (m{1},'ShoRt Test')
-%!   assert (size(t),[1,1])
-%!   assert (t{1}{1},'ShoRt')
-%!   assert (t{1}{2},'Test')
-%!   assert (size(nm), [1,1])
-%!   assert (!isempty(fieldnames(nm)))
-%!   assert (sort(fieldnames(nm)),{'word1';'word2'})
-%!   assert (nm.word1,'ShoRt')
-%!   assert (nm.word2,'Test')
-%! endif
+%! [nm, m, te, e, s, t] = regexpi('ShoRt Test String','(?<word1>\w*t)\s*(?<word2>\w*t)', 'names', 'match', 'tokenExtents', 'end', 'start', 'tokens');
+%! assert (s,1)
+%! assert (e,10)
+%! assert (size(te), [1,1])
+%! assert (te{1}, [1 5; 7, 10])
+%! assert (m{1},'ShoRt Test')
+%! assert (size(t),[1,1])
+%! assert (t{1}{1},'ShoRt')
+%! assert (t{1}{2},'Test')
+%! assert (size(nm), [1,1])
+%! assert (!isempty(fieldnames(nm)))
+%! assert (sort(fieldnames(nm)),{'word1';'word2'})
+%! assert (nm.word1,'ShoRt')
+%! assert (nm.word2,'Test')
 
 %!assert(regexpi("abc\nabc",'.'),[1:7])
 %!assert(regexpi("abc\nabc",'.','dotall'),[1:7])
-%!test
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   assert(regexpi("abc\nabc",'(?s).'),[1:7])
-%!   assert(regexpi("abc\nabc",'.','dotexceptnewline'),[1,2,3,5,6,7])
-%!   assert(regexpi("abc\nabc",'(?-s).'),[1,2,3,5,6,7])
-%! endif
+%!testif HAVE_PCRE
+%! assert(regexpi("abc\nabc",'(?s).'),[1:7])
+%! assert(regexpi("abc\nabc",'.','dotexceptnewline'),[1,2,3,5,6,7])
+%! assert(regexpi("abc\nabc",'(?-s).'),[1,2,3,5,6,7])
 
 %!assert(regexpi("caseCaSe",'case'),[1,5])
 %!assert(regexpi("caseCaSe",'case',"matchcase"),1)
 %!assert(regexpi("caseCaSe",'case',"ignorecase"),[1,5])
-%!test
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   assert(regexpi("caseCaSe",'(?-i)case'),1)
-%!   assert(regexpi("caseCaSe",'(?i)case'),[1,5])
-%! endif
+%!testif HAVE_PCRE
+%! assert(regexpi("caseCaSe",'(?-i)case'),1)
+%! assert(regexpi("caseCaSe",'(?i)case'),[1,5])
 
 %!assert (regexpi("abc\nabc",'c$'),7)
 %!assert (regexpi("abc\nabc",'c$',"stringanchors"),7)
-%!test
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   assert (regexpi("abc\nabc",'(?-m)c$'),7)
-%!   assert (regexpi("abc\nabc",'c$',"lineanchors"),[3,7])
-%!   assert (regexpi("abc\nabc",'(?m)c$'),[3,7])
-%! endif
+%!testif HAVE_PCRE
+%! assert (regexpi("abc\nabc",'(?-m)c$'),7)
+%! assert (regexpi("abc\nabc",'c$',"lineanchors"),[3,7])
+%! assert (regexpi("abc\nabc",'(?m)c$'),[3,7])
 
 %!assert (regexpi("this word",'s w'),4)
 %!assert (regexpi("this word",'s w','literalspacing'),4)
-%!test
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   assert (regexpi("this word",'(?-x)s w','literalspacing'),4)
-%!   assert (regexpi("this word",'s w','freespacing'),zeros(1,0))
-%!   assert (regexpi("this word",'(?x)s w'),zeros(1,0))
-%! endif
+%!testif HAVE_PCRE
+%! assert (regexpi("this word",'(?-x)s w','literalspacing'),4)
+%! assert (regexpi("this word",'s w','freespacing'),zeros(1,0))
+%! assert (regexpi("this word",'(?x)s w'),zeros(1,0))
 
 %!error regexpi('string', 'tri', 'BadArg');
 %!error regexpi('string');
@@ -1532,13 +1506,11 @@
 %! t = regexprep(xml,'<[!?][^>]*>','','tokenize');
 %! assert(t,' <tag v="hello">some stuff</tag>')
 
-%!test  # Capture replacement
-%! if (!isempty(findstr(octave_config_info ("DEFS"),"HAVE_PCRE")))
-%!   data = "Bob Smith\nDavid Hollerith\nSam Jenkins";
-%!   result = "Smith, Bob\nHollerith, David\nJenkins, Sam";
-%!   t = regexprep(data,'(?m)^(\w+)\s+(\w+)$','$2, $1');
-%!   assert(t,result)
-%! end
+%!testif HAVE_PCRE # Capture replacement
+%! data = "Bob Smith\nDavid Hollerith\nSam Jenkins";
+%! result = "Smith, Bob\nHollerith, David\nJenkins, Sam";
+%! t = regexprep(data,'(?m)^(\w+)\s+(\w+)$','$2, $1');
+%! assert(t,result)
 
 # Return the original if no match
 %!assert(regexprep('hello','world','earth'),'hello')