75 lines
2.2 KiB
Matlab
75 lines
2.2 KiB
Matlab
function makeTapReport(status, varargin)
|
|
% Makes a Test Anything Protocol report
|
|
%
|
|
% This function produces a testing report of HEADLESS tests for
|
|
% display on Jenkins (or any other TAP-compatible system)
|
|
%
|
|
% MAKETAPREPORT(status) produces the report from the `status` output of
|
|
% `testHeadless`.
|
|
%
|
|
% MAKETAPREPORT(status, 'stream', FID, ...) changes the filestream to use
|
|
% to output the report to. (Default: 1 (stdout)).
|
|
%
|
|
% TAP Specification: https://testanything.org
|
|
%
|
|
% See also: testHeadless, makeTravisReport, makeLatexReport
|
|
|
|
%% Parse input arguments
|
|
SM = StreamMaker();
|
|
ipp = m2tInputParser();
|
|
|
|
ipp = ipp.addRequired(ipp, 'status', @iscell);
|
|
ipp = ipp.addParamValue(ipp, 'stream', 1, SM.isStream);
|
|
|
|
ipp = ipp.parse(ipp, status, varargin{:});
|
|
arg = ipp.Results;
|
|
|
|
%% Construct stream
|
|
stream = SM.make(arg.stream, 'w');
|
|
|
|
%% build report
|
|
printTAPVersion(stream);
|
|
printTAPPlan(stream, status);
|
|
for iStatus = 1:numel(status)
|
|
printTAPReport(stream, status{iStatus}, iStatus);
|
|
end
|
|
end
|
|
% ==============================================================================
|
|
function printTAPVersion(stream)
|
|
% prints the TAP version
|
|
stream.print('TAP version 13\n');
|
|
end
|
|
function printTAPPlan(stream, statuses)
|
|
% prints the TAP test plan
|
|
firstTest = 1;
|
|
lastTest = numel(statuses);
|
|
stream.print('%d..%d\n', firstTest, lastTest);
|
|
end
|
|
function printTAPReport(stream, status, testNum)
|
|
% prints a TAP test case report
|
|
message = status.function;
|
|
|
|
if hasTestFailed(status)
|
|
result = 'not ok';
|
|
else
|
|
result = 'ok';
|
|
end
|
|
directives = getTAPDirectives(status);
|
|
|
|
stream.print('%s %d %s %s\n', result, testNum, message, directives);
|
|
|
|
%TODO: we can provide more information on the failure using YAML syntax
|
|
end
|
|
function directives = getTAPDirectives(status)
|
|
% add TAP directive (a todo or skip) to the test directives
|
|
directives = {};
|
|
if status.skip
|
|
directives{end+1} = '# SKIP skipped';
|
|
end
|
|
if status.unreliable
|
|
directives{end+1} = '# TODO unreliable';
|
|
end
|
|
directives = strtrim(m2tstrjoin(directives, ' '));
|
|
end
|
|
% ==============================================================================
|