function test_suite = test_warning
% tests for cosmo_warning
%
% # 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_warning_basics
state = cosmo_warning();
state_resetter = onCleanup(@()cosmo_warning(state));
cosmo_warning('reset');
cosmo_warning('off');
% test simple message
msg = 'foo';
cosmo_warning(msg);
assert_in_shown_warnings(msg);
% test formatting a message
args = {'bar%d-%d_%d', randn(1, 3)};
cosmo_warning(args{:});
assert_in_shown_warnings(args);
% test with identifier
args = {'msg:id', 'foo%s-%d', 'baz', 3};
cosmo_warning(args{:});
assert_in_shown_warnings(args(2:end));
% test with identifier '%' (ascii code 65)
args = {'bar%d', 65};
cosmo_warning(args{:});
assert_in_shown_warnings(args);
function assert_in_shown_warnings(msg)
state = cosmo_warning();
shown_warnings = state.shown_warnings;
assert(~isempty(shown_warnings));
if iscell(msg)
msg = sprintf(msg{:});
end
assert(any(cosmo_match(shown_warnings, msg)));