diff --git a/+bids/layout.m b/+bids/layout.m index 04a7d34e..f657fa6a 100644 --- a/+bids/layout.m +++ b/+bids/layout.m @@ -567,7 +567,8 @@ % sub and ses part pattern = [prefix subject.name '_']; - if ~isempty(subject.session) + if isempty(schema.content) + elseif ~isempty(subject.session) pattern = [pattern subject.session '_']; end diff --git a/tests/tests_layout/test_layout.m b/tests/tests_layout/test_layout.m index ec9070f1..ad7fda7a 100644 --- a/tests/tests_layout/test_layout.m +++ b/tests/tests_layout/test_layout.m @@ -48,15 +48,6 @@ function test_layout_filter_regex() end -function test_layout_empty_subject_folder_allowed_when_schemaless() - - verbose = false; - - bids.util.mkdir(fullfile(pwd, 'tmp/sub-01')); - bids.layout(fullfile(pwd, 'tmp'), 'use_schema', false, 'verbose', verbose); - rmdir(fullfile(pwd, 'tmp'), 's'); -end - function test_layout_smoke_test() verbose = false; diff --git a/tests/tests_layout/test_layout_schemaless.m b/tests/tests_layout/test_layout_schemaless.m new file mode 100644 index 00000000..aca7e848 --- /dev/null +++ b/tests/tests_layout/test_layout_schemaless.m @@ -0,0 +1,49 @@ +function test_suite = test_layout_schemaless %#ok<*STOUT> + try % assignment of 'localfunctions' is necessary in Matlab >= 2016 + test_functions = localfunctions(); %#ok<*NASGU> + catch % no problem; early Matlab versions can use initTestSuite fine + end + initTestSuite; +end + +function test_layout_no_schema_no_ses_in_filename() + + % filter for speed + filter = struct('sub', {{'01'}}); + + verbose = false; + + bids_dir = tempname(); + + % create dummy file + copyfile(fullfile(get_test_data_dir(), 'ds006'), bids_dir); + ses_folder = fullfile(bids_dir, 'sub-01', 'ses-post', 'anat'); + copyfile(fullfile(ses_folder, 'sub-01_ses-post_T1w.nii.gz'), ... + fullfile(ses_folder, 'sub-01_T1w.nii.gz')); + + BIDS = bids.layout(bids_dir, ... + 'verbose', verbose, ... + 'use_schema', true, ... + 'filter', filter); + + files = bids.query(BIDS, 'data', 'sub', '01', 'suffix', 'T1w'); + assert(numel(files) == 2); + + BIDS = bids.layout(bids_dir, ... + 'verbose', verbose, ... + 'use_schema', false, ... + 'filter', filter); + + files = bids.query(BIDS, 'data', 'sub', '01', 'suffix', 'T1w'); + assert(numel(files) == 3); + +end + +function test_layout_empty_subject_folder_allowed_when_schemaless() + + verbose = false; + + bids.util.mkdir(fullfile(pwd, 'tmp/sub-01')); + bids.layout(fullfile(pwd, 'tmp'), 'use_schema', false, 'verbose', verbose); + rmdir(fullfile(pwd, 'tmp'), 's'); +end