% this script runs all m files in PsychTests/UnitTests, each of which is
% assumed to be a unittest that is to return true upon success or false
% otherwise

clear; close all;

% get all scripts from subfolder (note that the FileFromFolder function
% can't be broken for this to work of course... :P)
[utests,ntests] = FileFromFolder(fullfile(PsychtoolboxRoot,'PsychTests/UnitTests'),'silent','m');
% delete contents file as its not executable
qContents = strcmp('Contents',{utests.fname});
utests(qContents) = [];
ntests = ntests-sum(qContents);

if ntests<1
    error('No Unit Tests found');
end

% build function handles for each
funs = {utests.fname};
funs = cellfun(@str2func,funs,'uni',false);

% run each
nfailed = 0;
fprintf('Running UnitTests\n');
for p=1:ntests
    fprintf('=========================================\n');
    fprintf('Running: PsychTests/UnitTests/%s:\n\n',utests(p).name);
    
    st = funs{p}();
    
    fprintf('\n');
    if st
        fprintf('PsychTests/UnitTests/%s: succes\n',utests(p).name);
    else
        fprintf('PsychTests/UnitTests/%s: failed\n',utests(p).name);
        nfailed = nfailed+1;
        failed(nfailed) = utests(p);
    end
    fprintf('=========================================\n');
    fprintf('\n');
end

fprintf('Summary:\n');
fprintf('%d tests succeeded, %d failed\n',ntests-nfailed,nfailed);
if nfailed>0
    fprintf('Tests failed:\n');
    fprintf('  %s\n',failed.fname);
end
