Mercurial > octave-nkf
view test/fntests.m @ 5823:080c08b192d8
[project @ 2006-05-19 05:32:17 by jwe]
author | jwe |
---|---|
date | Fri, 19 May 2006 05:32:19 +0000 |
parents | faafc2d98b8d |
children | ed69a3b5b3d0 |
line wrap: on
line source
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); filler = repmat (".", 1, 40-length(nm)); printf(" %s %s PASS %4d/%-4d",nm,filler,p,n); nfail = n - p; if (nfail > 0) printf (" FAIL %d\n", nfail); else printf ("\n"); endif 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); 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]); 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 tmpnm = strrep (d, [topsrcdir,"/"], ""); filler = repmat (".", 1, 40-length(tmpnm)); printf(" %s %s PASS %4d/%-4d", tmpnm, filler, dp, dn); nfail = dn - dp; if (nfail > 0) printf (" FAIL %d\n", nfail); else printf ("\n"); endif ## 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\n"); for i=1:length(fundirs) [p,n] = runtestscript(fid,fundirs{i}); dp+=p; dn+=n; endfor printf("\nFixed test scripts:\n\n"); for i=1:length(testdirs) [p, n] = runtestdir (fid, testdirs{i}); dp+=p; dn+=n; endfor printf("\nSummary:\n\n PASS %6d\n", dp); nfail = dn - dp; printf (" FAIL %6d\n", nfail); printf("\nSee fntests.log for details.\n"); 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