Mercurial > hg > ltpda
diff testing/utp_1.1/utp_run.m @ 45:a59cdb8aaf31 database-connection-manager
Merge
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Tue, 06 Dec 2011 19:07:22 +0100 |
parents | 409a22968d5e |
children | 9d5c88356247 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testing/utp_1.1/utp_run.m Tue Dec 06 19:07:22 2011 +0100 @@ -0,0 +1,207 @@ +% UTP_RUN Runs the UTP tests found in the 'utps' directory. If no output +% argument is specified a results report is generated and printed to screen, +% otherwise the results are returned. +% +% USAGE: +% +% >> % run all the tests in the 'utps' directory +% >> utp_run(); +% +% >> % run the UTPs with the given names +% >> utp_run('utp_classname_fcn1', 'utp_classname_fcn2', ...); +% +% >> % run a reduced set of UTPs operating on the listed classes +% >> utp_run('classname1', 'classname2', ...); +% +% EXAMPLES: +% +% >> utp_run(); +% >> utp_run('utp_ao_ao'); +% >> utp_run('utp_ao_ao', 'utp_ao_abs'); +% >> utp_run('ao', 'tsdata', 'fsdata'); +% >> utp_run('ao', 'tsdata', 'fsdata', pl); +% +% pl keys +% 'tests' - cell array of strings above +% 'no repository' - true/false +% 'skip tests' - cell array of tests to skip +% 'skip classes' - cell array of classes to skip +% +% +% +% $Id: utp_run.m,v 1.20 2010/08/09 16:38:49 ingo Exp $ + +function varargout = utp_run(varargin) + + % save current path + oldpath = path(); + + [pl, dummy, rest] = utils.helper.collect_objects(varargin(:), 'plist'); + + % Make sure that pl is a PLIST + pl = combine(plist(), pl); + + skipClasses = pl.find('skip classes', ''); + skipTests = pl.find('skip tests', ''); + tests = pl.find('tests', ''); + noRepository = pl.find('no repository', false); + + if ~isempty(rest) && ~isempty(tests) + tests = [reshape(cellstr(tests), 1, []), reshape(rest, 1, [])]; + elseif ~isempty(tests) + tests = cellstr(tests); + elseif ~isempty(rest) + tests = rest; + end + + try + % add support functions and UTPs folders to path + utppath = fileparts(which('utp_run')); + addpath(genpath(utppath)); + + % list of the classes for which we have UTPs + classes = {}; + + % cell array to hold UTP function names to run + utps = {}; + + % check for input arguments + if numel(tests) > 0 + + % check if input argument is a list of UTP function names + if all(strncmp(tests, 'utp_', 4)) + % add the given UTPs to the list of test functions to run + for kk = 1:numel(tests) + uname = tests{kk}; + % check if the given UTPs exist + if exist(uname, 'file') == 2 + utps = addUtpTest(utps, tests(kk)); + else + error('### test ''%s'' not found\n', uname); + end + end + else + % assume input argument is a list of classes + for kk = 1:numel(tests) + cname = tests{kk}; + % check if it exists + if exist(fullfile(utppath, 'utps', cname), 'dir') + classes = [classes {cname}]; + else + error('### test class ''%s'' not found\n', cname); + end + end + end + + else + + % list of all the classes we have UTPs for + d = dir(fullfile(utppath, 'utps')); + for kk = 1:numel(d) + if ~d(kk).isdir + continue; + end + if d(kk).name(1) == '.' + continue; + end + if strcmp(d(kk).name, 'CVS') + continue; + end + + % Skip classes + if utils.helper.ismember(d(kk).name, skipClasses) + continue; + end + classes = [classes {d(kk).name}]; + end + + end + + % add to the UPTs function name list the UTPs for each class in the list + for kk = 1:numel(classes) + mfiles = dir(fullfile(utppath, 'utps', classes{kk})); + % identify all UTP functions + for jj=1:length(mfiles) + [pathstr, name, ext] = fileparts(mfiles(jj).name); + if ~strcmp(ext, '.m') + continue; + end + try + utps = addUtpTest(utps, name); + end + end + end + + % number of collected UTPs to run + fprintf('%d UTPs to run\n', numel(utps)); + + % initialize timer to measure UTPs execution time + tic(); + + % call each UTP function and collect the results + results = []; + for jj=1:length(utps) + try + results = [results eval(utps{jj})]; + catch ex + % report the error failure in running the UTP + stack.name = 'xx'; + message = ['exception: ' ex.message]; + results = [results utp_prepare_result(false, false, stack, utps{jj}, message)]; + % show error on console + fprintf(2, ['\n' ex.getReport()]); + fprintf(1, '\n'); + end + end + + % set output + if nargout == 1 + varargout{1} = results; + else + display_utp_results(results) + end + + catch ex + % restore original path + path(oldpath); + rethrow(ex); + end + + % restore original path + path(oldpath); + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % FUNCTION: addUtpTest + % + % DESCRIPTION: Local method which adds an UTP to the UTP list if it pass + % all conditions. + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + function utpsLocal = addUtpTest(utpsLocal, utpIn) + + utpIn = cellstr(utpIn); + + % Check if the UTP name is a UTP + if feval(utpIn{1}, 'isutp') + + addUTP = true; + % Skip the UTPs if it needs a repository. + if noRepository && feval(utpIn{1}, 'needs repository') == 2 + addUTP = false; + end + % Skip the UTPs if it is in the skil list. + if utils.helper.ismember(utpIn{1}, skipTests) + addUTP = false; + end + + if addUTP + utpsLocal = [utpsLocal utpIn]; + end + + end + + end + +end +