function test_suite=test_isfield
% tests for cosmo_isfield
%
% # 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_isfield_basics
a=struct();
a.foo=1;
a.bar.baz=2;
assertTrue(cosmo_isfield(a,'foo'));
assertTrue(cosmo_isfield(a,'bar.baz'));
assertFalse(cosmo_isfield(a,'baz'));
assertFalse(cosmo_isfield(a,'foo.bar'));
assertEqual(cosmo_isfield(a,{'bar','baz','foo','bar','bar.baz'}),...
[true false true true true]);
a2=cat(1,a,a);
assertTrue(cosmo_isfield(a2,'foo'));
assertTrue(cosmo_isfield(a2,'bar'));
assertFalse(cosmo_isfield(a2,'baz'));
assertFalse(cosmo_isfield(a2,'bar.bar.baz'));
assertEqual(cosmo_isfield(a2,{'bar','baz','foo','bar'}),...
[true false true true]);
a_a2=a;
a_a2.bar=a2;
assertTrue(cosmo_isfield(a_a2,'bar.bar'));
assertTrue(cosmo_isfield(a_a2,'bar.foo'));
assertFalse(cosmo_isfield(a_a2,'bar.baz'));
assertExceptionThrown(@()cosmo_isfield(a2,'baz',true),'');
assertExceptionThrown(@()cosmo_isfield(a2,'bar.baz',true),'');
assertExceptionThrown(@()cosmo_isfield(a2,'bar.bar.baz',true),'');
assertExceptionThrown(@()cosmo_isfield(a2,struct(),true),'');
assertExceptionThrown(@()cosmo_isfield(a2,{1},true),'');
assertExceptionThrown(@()cosmo_isfield(a2,a2,true),'');
assertExceptionThrown(@()cosmo_isfield(a2,a2,false),'');
assertExceptionThrown(@()cosmo_isfield('foo','baz',true),'');
assertExceptionThrown(@()cosmo_isfield(a,'foo.bar',true),'');