Skip to content

Commit 96151df

Browse files
committed
WIP refactoring testing in progress
1 parent e2b1745 commit 96151df

File tree

3 files changed

+326
-0
lines changed

3 files changed

+326
-0
lines changed

tests/__init__.py

Whitespace-only changes.

tests/tools/__init__.py

Whitespace-only changes.
Lines changed: 326 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,326 @@
1+
import collections
2+
import os
3+
from os.path import join as jph
4+
5+
from nose.tools import assert_raises
6+
7+
from nilabels.tools.aux_methods.label_descriptor_manager import LabelsDescriptorManager, \
8+
generate_dummy_label_descriptor
9+
10+
11+
# PATH MANAGER
12+
13+
test_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
14+
pfo_tmp_test = jph(test_dir, 'z_tmp_test')
15+
16+
17+
18+
# AUXILIARY
19+
20+
21+
def check_list_equal(l1, l2):
22+
return len(l1) == len(l2) and sorted(l1) == sorted(l2)
23+
24+
25+
# DECORATORS
26+
27+
28+
def write_and_erase_temporary_folder(test_func):
29+
def wrap(*args, **kwargs):
30+
# 1) Before: create folder
31+
os.system('mkdir {}'.format(pfo_tmp_test))
32+
# 2) Run test
33+
test_func(*args, **kwargs)
34+
# 3) After: delete folder and its content
35+
os.system('rm -r {}'.format(pfo_tmp_test))
36+
37+
return wrap
38+
39+
40+
def write_and_erase_temporary_folder_with_simple_image(test_func):
41+
def wrap(*args, **kwargs):
42+
43+
# 1) Before: create folder
44+
os.system('mkdir {}'.format(pfo_tmp_test))
45+
# 1bis) Then, generate image in the generated folder
46+
# TODO
47+
# 2) Run test
48+
test_func(*args, **kwargs)
49+
# 3) After: delete folder and its content
50+
os.system('rm -r {}'.format(pfo_tmp_test))
51+
52+
return wrap
53+
54+
55+
# TESTING:
56+
57+
# --- > Testing generate dummy descriptor
58+
59+
@write_and_erase_temporary_folder
60+
def test_generate_dummy_labels_descriptor_wrong_input1():
61+
with assert_raises(IOError):
62+
generate_dummy_label_descriptor(jph(pfo_tmp_test, 'label_descriptor.txt'), list_labels=range(5),
63+
list_roi_names=['1', '2'])
64+
65+
66+
@write_and_erase_temporary_folder
67+
def test_generate_dummy_labels_descriptor_wrong_input2():
68+
with assert_raises(IOError):
69+
generate_dummy_label_descriptor(jph(pfo_tmp_test, 'label_descriptor.txt'), list_labels=range(5),
70+
list_roi_names=['1', '2', '3', '4', '5'],
71+
list_colors_triplets=[[0, 0, 0], [1, 1, 1]])
72+
73+
74+
@write_and_erase_temporary_folder
75+
def test_generate_labels_descriptor_list_roi_names_None():
76+
d = generate_dummy_label_descriptor(jph(pfo_tmp_test, 'dummy_label_descriptor.txt'), list_labels=range(5),
77+
list_roi_names=None, list_colors_triplets=[[1, 1, 1], ] * 5)
78+
79+
for k in d.keys():
80+
assert d[k][-1] == 'label {}'.format(k)
81+
82+
83+
@write_and_erase_temporary_folder
84+
def test_generate_labels_descriptor_list_colors_triplets_None():
85+
d = generate_dummy_label_descriptor(jph(pfo_tmp_test, 'dummy_label_descriptor.txt'), list_labels=range(5),
86+
list_roi_names=None, list_colors_triplets=[[1, 1, 1], ] * 5)
87+
for k in d.keys():
88+
assert len(d[k][1]) == 3
89+
90+
91+
@write_and_erase_temporary_folder
92+
def test_generate_labels_descriptor_general():
93+
list_labels = [1, 2, 3, 4, 5]
94+
list_color_triplets = [[1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5, 5]]
95+
list_roi_names = ['one', 'two', 'three', 'four', 'five']
96+
97+
d = generate_dummy_label_descriptor(jph(pfo_tmp_test, 'dummy_label_descriptor.txt'), list_labels=list_labels,
98+
list_roi_names=list_roi_names, list_colors_triplets=list_color_triplets)
99+
for k_num, k in enumerate(d.keys()):
100+
assert int(k) == list_labels[k_num]
101+
assert d[k][0] == list_color_triplets[k_num]
102+
assert d[k][-1] == list_roi_names[k_num]
103+
104+
# --- > Testing basics methods labels descriptor class manager
105+
106+
107+
@write_and_erase_temporary_folder
108+
def test_basics_methods_labels_descriptor_manager_wrong_input_path():
109+
110+
pfi_unexisting_label_descriptor_manager = 'zzz_path_to_spam'
111+
with assert_raises(IOError):
112+
LabelsDescriptorManager(pfi_unexisting_label_descriptor_manager)
113+
114+
115+
if __name__ == '__main__':
116+
test_generate_dummy_labels_descriptor_wrong_input1()
117+
test_generate_dummy_labels_descriptor_wrong_input2()
118+
test_generate_labels_descriptor_list_roi_names_None()
119+
test_generate_labels_descriptor_list_colors_triplets_None()
120+
test_generate_labels_descriptor_general()
121+
test_basics_methods_labels_descriptor_manager_wrong_input_path()
122+
123+
124+
125+
#
126+
#
127+
# def test_basics_methods_labels_descriptor_manager_wrong_input_convention():
128+
#
129+
# not_allowed_convention_name = 'just_spam'
130+
# with assert_raises(IOError):
131+
# LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'), not_allowed_convention_name)
132+
#
133+
#
134+
# def test_basic_dict_input():
135+
# _create_data_set_for_tests()
136+
#
137+
# dict_ld = collections.OrderedDict()
138+
# dict_ld.update({0: [[0, 0, 0], [1.0, 1.0, 1.0], 'Bkg']})
139+
# dict_ld.update({1: [[255, 0, 0], [1.0, 1.0, 1.0], 'Skull']})
140+
# dict_ld.update({2: [[0, 255, 0], [1.0, 1.0, 1.0], 'WM']})
141+
# dict_ld.update({3: [[0, 0, 255], [1.0, 1.0, 1.0], 'GM']})
142+
# dict_ld.update({4: [[255, 0, 255], [1.0, 1.0, 1.0], 'CSF']})
143+
#
144+
# ldm = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
145+
#
146+
# check_list_equal(ldm.dict_label_descriptor.keys(), dict_ld.keys())
147+
# for k in ldm.dict_label_descriptor.keys():
148+
# check_list_equal(ldm.dict_label_descriptor[k], dict_ld[k])
149+
#
150+
#
151+
# def test_save_in_itk_snap_convention():
152+
# _create_data_set_for_tests()
153+
#
154+
# ldm = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
155+
# ldm.save_label_descriptor(jph(ldg.pfo_target_atlas, 'label_descriptor2.txt'))
156+
#
157+
# f1 = open(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'), 'r')
158+
# f2 = open(jph(ldg.pfo_target_atlas, 'label_descriptor2.txt'), 'r')
159+
#
160+
# for l1, l2 in zip(f1.readlines(), f2.readlines()):
161+
# assert l1 == l2
162+
#
163+
# os.system('rm {}'.format(jph(ldg.pfo_target_atlas, 'label_descriptor2.txt')))
164+
#
165+
#
166+
# def test_save_in_fsl_convention_reload_as_dict_and_compare():
167+
# _create_data_set_for_tests()
168+
#
169+
# ldm_itk = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
170+
# # change convention
171+
# ldm_itk.convention = 'fsl'
172+
# ldm_itk.save_label_descriptor(jph(ldg.pfo_target_atlas, 'label_descriptor_fsl.txt'))
173+
#
174+
# ldm_fsl = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor_fsl.txt'), labels_descriptor_convention='fsl')
175+
#
176+
# # NOTE: test works only with default 1.0 values - fsl convention is less informative than itk-snap..
177+
# check_list_equal(ldm_itk.dict_label_descriptor.keys(), ldm_fsl.dict_label_descriptor.keys())
178+
# for k in ldm_itk.dict_label_descriptor.keys():
179+
# check_list_equal(ldm_itk.dict_label_descriptor[k], ldm_fsl.dict_label_descriptor[k])
180+
#
181+
# os.system('rm {}'.format(jph(ldg.pfo_target_atlas, 'label_descriptor_fsl.txt')))
182+
#
183+
#
184+
# # TESTING: labels permutations - permute_labels_in_descriptor
185+
#
186+
#
187+
# def test_relabel_labels_descriptor():
188+
# _create_data_set_for_tests()
189+
#
190+
# dict_expected = collections.OrderedDict()
191+
# dict_expected.update({0: [[0, 0, 0], [1.0, 1.0, 1.0], 'Bkg']})
192+
# dict_expected.update({10: [[255, 0, 0], [1.0, 1.0, 1.0], 'Skull']})
193+
# dict_expected.update({11: [[0, 255, 0], [1.0, 1.0, 1.0], 'WM']})
194+
# dict_expected.update({12: [[0, 0, 255], [1.0, 1.0, 1.0], 'GM']})
195+
# dict_expected.update({4: [[255, 0, 255], [1.0, 1.0, 1.0], 'CSF']})
196+
#
197+
# ldm_original = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
198+
#
199+
# old_labels = [1, 2, 3]
200+
# new_labels = [10, 11, 12]
201+
#
202+
# ldm_relabelled = ldm_original.relabel(old_labels, new_labels, sort=True)
203+
#
204+
# check_list_equal(dict_expected.keys(), ldm_relabelled.dict_label_descriptor.keys())
205+
# for k in dict_expected.keys():
206+
# check_list_equal(dict_expected[k], ldm_relabelled.dict_label_descriptor[k])
207+
#
208+
#
209+
# def test_relabel_labels_descriptor_with_merging():
210+
# _create_data_set_for_tests()
211+
#
212+
# dict_expected = collections.OrderedDict()
213+
# dict_expected.update({0: [[0, 0, 0], [1.0, 1.0, 1.0], 'Bkg']})
214+
# # dict_expected.update({1: [[255, 0, 0], [1.0, 1.0, 1.0], 'Skull']})
215+
# dict_expected.update({1: [[0, 255, 0], [1.0, 1.0, 1.0], 'WM']})
216+
# dict_expected.update({5: [[0, 0, 255], [1.0, 1.0, 1.0], 'GM']})
217+
# dict_expected.update({4: [[255, 0, 255], [1.0, 1.0, 1.0], 'CSF']})
218+
#
219+
# ldm_original = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
220+
#
221+
# old_labels = [1, 2, 3]
222+
# new_labels = [1, 1, 5]
223+
#
224+
# ldm_relabelled = ldm_original.relabel(old_labels, new_labels, sort=True)
225+
#
226+
# check_list_equal(dict_expected.keys(), ldm_relabelled.dict_label_descriptor.keys())
227+
# for k in dict_expected.keys():
228+
# check_list_equal(dict_expected[k], ldm_relabelled.dict_label_descriptor[k])
229+
#
230+
#
231+
#
232+
# def test_permute_labels_from_descriptor_wrong_input_permutation():
233+
# _create_data_set_for_tests()
234+
#
235+
# ldm = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
236+
# perm = [[1, 2, 3], [1, 1]]
237+
#
238+
# with assert_raises(IOError):
239+
# ldm.permute_labels(perm)
240+
#
241+
#
242+
# def test_permute_labels_from_descriptor_check():
243+
# _create_data_set_for_tests()
244+
#
245+
# dict_expected = collections.OrderedDict()
246+
# dict_expected.update({0: [[0, 0, 0], [1.0, 1.0, 1.0], 'Bkg']})
247+
# dict_expected.update({1: [[255, 0, 0], [1.0, 1.0, 1.0], 'Skull']})
248+
# dict_expected.update({3: [[0, 255, 0], [1.0, 1.0, 1.0], 'WM']})
249+
# dict_expected.update({2: [[0, 0, 255], [1.0, 1.0, 1.0], 'GM']})
250+
# dict_expected.update({4: [[255, 0, 255], [1.0, 1.0, 1.0], 'CSF']})
251+
#
252+
# ldm_original = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
253+
# perm = [[1, 2, 3], [1, 3, 2]]
254+
# ldm_relabelled = ldm_original.permute_labels(perm)
255+
#
256+
# check_list_equal(dict_expected.keys(), ldm_relabelled.dict_label_descriptor.keys())
257+
# for k in dict_expected.keys():
258+
# check_list_equal(dict_expected[k], ldm_relabelled.dict_label_descriptor[k])
259+
#
260+
#
261+
# def test_erase_labels():
262+
# _create_data_set_for_tests()
263+
#
264+
# dict_expected = collections.OrderedDict()
265+
# dict_expected.update({0: [[0, 0, 0], [1.0, 1.0, 1.0], 'Bkg']})
266+
# dict_expected.update({1: [[255, 0, 0], [1.0, 1.0, 1.0], 'Skull']})
267+
# dict_expected.update({4: [[255, 0, 255], [1.0, 1.0, 1.0], 'CSF']})
268+
#
269+
# ldm_original = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
270+
# labels_to_erase = [2, 3]
271+
# ldm_relabelled = ldm_original.erase_labels(labels_to_erase)
272+
#
273+
# check_list_equal(dict_expected.keys(), ldm_relabelled.dict_label_descriptor.keys())
274+
# for k in dict_expected.keys():
275+
# check_list_equal(dict_expected[k], ldm_relabelled.dict_label_descriptor[k])
276+
#
277+
#
278+
# def test_erase_labels_unexisting_labels():
279+
# _create_data_set_for_tests()
280+
#
281+
# dict_expected = collections.OrderedDict()
282+
# dict_expected.update({0: [[0, 0, 0], [1.0, 1.0, 1.0], 'Bkg']})
283+
# dict_expected.update({1: [[255, 0, 0], [1.0, 1.0, 1.0], 'Skull']})
284+
# dict_expected.update({3: [[0, 0, 255], [1.0, 1.0, 1.0], 'GM']})
285+
#
286+
# ldm_original = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
287+
# labels_to_erase = [2, 4, 16, 32]
288+
# ldm_relabelled = ldm_original.erase_labels(labels_to_erase)
289+
#
290+
# check_list_equal(dict_expected.keys(), ldm_relabelled.dict_label_descriptor.keys())
291+
# for k in dict_expected.keys():
292+
# check_list_equal(dict_expected[k], ldm_relabelled.dict_label_descriptor[k])
293+
#
294+
#
295+
# def test_assign_all_other_labels_the_same_value():
296+
# _create_data_set_for_tests()
297+
#
298+
# dict_expected = collections.OrderedDict()
299+
# dict_expected.update({0: [[0, 0, 0], [1.0, 1.0, 1.0], 'Bkg']})
300+
# dict_expected.update({1: [[255, 0, 0], [1.0, 1.0, 1.0], 'Skull']})
301+
# dict_expected.update({4: [[255, 0, 255], [1.0, 1.0, 1.0], 'CSF']})
302+
#
303+
# ldm_original = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
304+
# labels_to_keep = [1, 4]
305+
# other_value = 0
306+
# ldm_relabelled = ldm_original.assign_all_other_labels_the_same_value(labels_to_keep, other_value)
307+
#
308+
# check_list_equal(dict_expected.keys(), ldm_relabelled.dict_label_descriptor.keys())
309+
# for k in dict_expected.keys():
310+
# check_list_equal(dict_expected[k], ldm_relabelled.dict_label_descriptor[k])
311+
#
312+
#
313+
# def test_keep_one_label():
314+
# _create_data_set_for_tests()
315+
#
316+
# dict_expected = collections.OrderedDict()
317+
# dict_expected.update({0: [[0, 0, 0], [1.0, 1.0, 1.0], 'Bkg']})
318+
# dict_expected.update({3: [[0, 0, 255], [1.0, 1.0, 1.0], 'GM']})
319+
#
320+
# ldm_original = LabelsDescriptorManager(jph(ldg.pfo_target_atlas, 'label_descriptor.txt'))
321+
# label_to_keep = 3
322+
# ldm_relabelled = ldm_original.keep_one_label(label_to_keep)
323+
#
324+
# check_list_equal(dict_expected.keys(), ldm_relabelled.dict_label_descriptor.keys())
325+
# for k in dict_expected.keys():
326+
# check_list_equal(dict_expected[k], ldm_relabelled.dict_label_descriptor[k])

0 commit comments

Comments
 (0)