Mercurial > hg > octave-nkf
diff test/fntests.m @ 5590:1ad66ea35fe5
[project @ 2006-01-06 00:24:05 by jwe]
author | jwe |
---|---|
date | Fri, 06 Jan 2006 00:24:06 +0000 |
parents | |
children | ec3ffbf9982b |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/test/fntests.m @@ -0,0 +1,141 @@ +clear all; + +global topsrcdir; + +currdir = canonicalize_file_name ("."); + +if (nargin == 1) + xdir = argv{1}; +else + xdir = "."; +endif + +srcdir = canonicalize_file_name (xdir); +topsrcdir = canonicalize_file_name (fullfile (xdir, "..")); + +if (strcmp (currdir, srcdir)) + testdirs = {srcdir}; +else + testdirs = {currdir, srcdir}; +endif + +src_tree = canonicalize_file_name (fullfile (topsrcdir, "src")); +script_tree = canonicalize_file_name (fullfile (topsrcdir, "scripts")); +fundirs = {src_tree, script_tree}; + +function [dp, dn] = runtestdir (fid, d); + lst = dir(d); + dp = dn = 0; + for i = 1:length(lst) + nm = lst(i).name; + if (length(nm) > 5 && strcmp(nm(1:5),"test_") && + strcmp(nm((end-1):end),".m")) + [p,n] = test(nm(1:(end-2)),"quiet",fid); + printf(" %s -> passes %d of %d\n",nm,p,n); + dp +=p; + dn += n; + endif + endfor +endfunction + +function y = hastests (f) + fid = fopen(f); + str = fscanf(fid,"%s"); + if (findstr(str,"%!test") || + findstr(str,"%!assert") || + findstr(str,"%!error") || + findstr(str,"%!warning")) + y = 1; + else + y = 0; + endif + fclose(fid); +endfunction + +function [dp, dn] = runtestscript (fid, d, ident); + global topsrcdir + lst = dir(d); + dp = dn = 0; + for i=1:length(lst) + nm = lst(i).name; + if (lst(i).isdir && !strcmp(nm,".") && !strcmp(nm,"..") && + !strcmp(nm,"CVS")) + [p, n] = runtestscript (fid, [d, "/",nm], [ident," "]); + dp += p; + dn += n; + endif + endfor + for i=1:length(lst) + nm = lst(i).name; + if ((length(nm) > 3 && strcmp(nm((end-2):end),".cc")) || + (length(nm) > 2 && strcmp(nm((end-1):end),".m"))) + f = fullfile (d, nm); + ## Only run if it contains %!test, %!assert %!error or %!warning + if (hastests(f)) + [p, n] = test(f,"quiet",fid); + dp += p; + dn += n; + endif + endif + endfor + printf("%s%s -> passes %d of %d tests\n", ident, + strrep (d, topsrcdir, "..."), dp, dn); +## printf("%s%s -> passes %d of %d tests\n", ident, d, dp, dn); +endfunction + +function printf_assert(varargin) + global _assert_printf; + _assert_printf=cat(2,_assert_printf,sprintf(varargin{:})); +endfunction + +function ret = prog_output_assert(str) + global _assert_printf; + if (isempty(_assert_printf)) + ret = isempty(str); + elseif (_assert_printf(end) == "\n") + ret = strcmp(_assert_printf(1:(end-1)),str); + else + ret = strcmp(_assert_printf,str); + endif + _assert_printf = ""; +endfunction + +pso = page_screen_output; +warn_state = warning("query","quiet"); +warning("on","quiet"); +try + page_screen_output =0; + fid=fopen("fntests.log","wt"); + if (fid < 0) + error("could not open fntests.log for writing"); + endif + test("","explain",fid); + dp=dn=0; + printf("\nIntegrated test scripts\n"); + for i=1:length(fundirs) + [p,n] = runtestscript(fid,fundirs{i}," "); + dp+=p; + dn+=n; + endfor + printf("\nFixed test scripts\n"); + for i=1:length(testdirs) + [p, n] = runtestdir (fid, testdirs{i}); + dp+=p; + dn+=n; + endfor + printf("---> passes %d out of %d tests",dp,dn); + if dp==dn + printf("\n---> success"); + endif; + disp(""); + printf("see fntests.log for details"); + disp(""); + fclose(fid); + page_screen_output = pso; + warning(warn_state.state,"quiet"); +catch + page_screen_output = pso; + warning(warn_state.state,"quiet"); + disp(lasterr()); +end_try_catch +