%findSubfunctionTests Utility script used for subfunction-based tests % This file is a script that is called at the top of M-files containing % subfunction-based tests. % % The top of a typical M-file using this script looks like this: % % function test_suite = testFeatureA % % findSubfunctionTests; % % IMPORTANT NOTE % -------------- % The output variable name for an M-file using this script must be test_suite. % Steven L. Eddins % Copyright 2008-2009 The MathWorks, Inc. [ST,I] = dbstack('-completenames'); caller_name = ST(I + 1).name; caller_file = ST(I + 1).file; subFcns = which('-subfun', caller_file); setup_fcn_name = subFcns(xunit.utils.isSetUpString(subFcns)); if numel(setup_fcn_name) > 1 error('findSubfunctionTests:tooManySetupFcns', ... 'Found more than one setup subfunction.') elseif isempty(setup_fcn_name) setup_fcn = []; else setup_fcn = str2func(setup_fcn_name{1}); end teardown_fcn_name = subFcns(xunit.utils.isTearDownString(subFcns)); if numel(teardown_fcn_name) > 1 error('findSubfunctionTests:tooManyTeardownFcns', ... 'Found more than one teardown subfunction.') elseif isempty(teardown_fcn_name) teardown_fcn = []; else teardown_fcn = str2func(teardown_fcn_name{1}); end test_fcns = cellfun(@str2func, subFcns(xunit.utils.isTestString(subFcns)), ... 'UniformOutput', false); suite = TestSuite; suite.Name = caller_name; suite.Location = which(caller_file); for k = 1:numel(test_fcns) suite.add(FunctionHandleTestCase(test_fcns{k}, setup_fcn, teardown_fcn)); end if nargout > 0 test_suite = suite; else suite.run(); end