/usr/share/octave/site/m/vlfeat/toolbox/xtest/vl_test_init.m is in octave-vlfeat 0.9.17+dfsg0-6build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | % VL_TEST_INIT Intialize unit test file
% This is a VLFeat internal function used to initialize an .m file
% containing a unit test.
%
% See also: VL_TEST(), VL_HELP().
% Author:: Andrea Vedaldi
% Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson.
% Copyright (C) 2013 Andrea Vedaldi.
% All rights reserved.
%
% This file is part of the VLFeat library and is made available under
% the terms of the BSD license (see the COPYING file).
% Obtain the path to the m-file that called VL_TEST_INIT()
stack = dbstack(1) ;
mfilePath = stack(1).file ;
mfileName = stack(1).name ;
fid = fopen(mfilePath, 'r') ;
% Parse the source code of the caller to get the names of its
% subfunctions. One could use which('-subfun', stack(1).name) here,
% but this feature is undocumented.
setupFunc = [] ;
teardownFunc = [] ;
tests = {} ;
l = 0 ;
t = 0 ;
while 1
tline = fgetl(fid) ;
l = l + 1 ;
if ~ischar(tline), break ; end
mo = regexp(tline, '^\s*function\s+(\w\s*=\s*)?test_(?<name>[\w_]+)\s*\(.*\).*$', ...
'names') ;
if length(mo) > 0
t = t + 1 ;
tests{t}.name = mo(1).name ;
tests{t}.func = str2func(['test_' mo(1).name]) ;
tests{t}.lineNumber = l ;
end
mo = regexp(tline, '^\s*function\s+(\w+\s*=\s*)?(?<name>setup|teardown)\s*\(.*\).*$', ...
'names') ;
if length(mo) > 0
switch mo(1).name
case 'setup'
if isempty(setupFunc)
setupFunc = @setup ;
else
warning('%s:%d: ignoring redundant definition of the setup function', ...
mfilePath) ;
end
case 'teardown'
if isempty(teardownFunc)
teardownFunc = @teardown ;
else
warning('%s:%d: ignoring redundant definition of the setup function', ...
mfilePath) ;
end
otherwise
assert(0) ;
end
end
end
if ~isempty(setupFunc), state = setupFunc() ; end
if length(varargin) > 0
testFunc = str2func(sprintf('test_%s', varargin{1})) ;
if exist('state','var')
testFunc(state) ;
else
testFunc() ;
end
if ~isempty(teardownFunc), teardownFunc(state) ; end
return ;
end
% Run all tests collecting the results.
if length(tests) == 0
error('No tests found in ''%s''', mfileName) ;
end
for t = 1:length(tests)
subTestName = sprintf('test_%s', tests{t}.name) ;
results{t}.testName = sprintf('%s:%s', mfileName(9:end), tests{t}.name) ;
results{t}.succeded = true ;
results{t}.exception = [] ;
try
if exist('state', 'var')
tests{t}.func(state) ;
else
tests{t}.func() ;
end
catch exception
results{t}.succeded = false ;
results{t}.exception = exception ;
end
end
if ~isempty(teardownFunc), teardownFunc(state) ; end
results = cat(2, results{:}) ;
|