function test_suite = test_wtf
% tests for cosmo_wtf
%
% # For CoSMoMVPA's copyright information and license terms, #
% # see the COPYING file distributed with CoSMoMVPA. #
try % assignment of 'localfunctions' is necessary in Matlab >= 2016
test_functions = localfunctions();
catch % no problem; early Matlab versions can use initTestSuite fine
end
initTestSuite;
function test_wtf_basics()
warning_state = cosmo_warning();
warning_state_resetter = onCleanup(@()cosmo_warning(warning_state));
cosmo_warning('off');
h = cosmo_wtf();
[c, m, e] = computer();
computer_str = sprintf('%s (maxsize=%d, endian=%s)', c, m, e);
assert_contains(h, computer_str);
assertEqual(cosmo_wtf('computer'), computer_str);
if environment_is_octave()
env_string = 'octave';
else
env_string = 'matlab';
end
assert_contains(h, ['environment: ' env_string]);
assertEqual(cosmo_wtf('environment'), env_string);
external_cell = cosmo_wtf('cosmo_externals');
external_expected_cell = cosmo_check_external('-list');
assertEqual(sort(external_cell(:)), sort(external_expected_cell(:)));
assertExceptionThrown(@()cosmo_wtf('illegal'), '');
function test_wtf_warnings()
rand_str_func = @()char(ceil(rand(20, 1) * 26 + 64));
warning_id = sprintf('%s:%s', rand_str_func(), rand_str_func());
warning_state = warning();
warning_state_resetter = onCleanup(@()warning(warning_state));
on_off_labels = {'on', 'off'};
for k = 1:numel(on_off_labels)
label = on_off_labels{k};
anti_label = on_off_labels{3 - k};
warning(anti_label, 'all');
warning(label, warning_id);
w_cell = cosmo_wtf('warnings');
w = cosmo_strjoin(w_cell, ', ');
assert_contains(w, sprintf('%s: %s', warning_id, label));
assert_not_contains(w, sprintf('%s: %s', warning_id, anti_label));
end
function test_wtf_version_number()
vn = cosmo_wtf('version_number');
assert(isnumeric(vn));
vs = sprintf('%d.', vn);
vs = vs(1:(end - 1));
vs_expected = regexp(version(), '^\S*', 'match');
assert(numel(vs_expected{1}) >= 3);
assertEqual(vs, vs_expected{1});
function test_wtf_is_matlab
is_octave = environment_is_octave;
assertEqual(cosmo_wtf('is_matlab'), ~is_octave);
assertEqual(cosmo_wtf('is_octave'), is_octave);
function test_wtf_cosmo_externals()
s = cosmo_wtf('cosmo_externals');
assert(iscellstr(s));
function test_wtf_path()
s = cosmo_wtf('path');
assert(iscellstr(s));
p = path();
assertEqual(cosmo_strjoin(s, pathsep()), p);
function assert_contains(haystack, needle)
assert_contains_helper(haystack, needle, true);
function assert_not_contains(haystack, needle)
assert_contains_helper(haystack, needle, false);
function assert_contains_helper(haystack, needle, expected_tf)
re = regexptranslate('escape', needle);
assertEqual(~isempty(regexp(haystack, re, 'once')), expected_tf);
function tf = environment_is_octave()
tf = logical(exist('OCTAVE_VERSION', 'builtin'));