Skip to content

Commit d62f576

Browse files
committed
test: adjust tests to new defaults
1 parent 88be2fd commit d62f576

3 files changed

Lines changed: 51 additions & 84 deletions

File tree

tests/test_config.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
class TestExtractionConfig:
1616
def test_defaults(self):
1717
c = ExtractionConfig()
18-
assert c.branches is True
19-
assert c.branch_text is True
20-
assert c.summary is True
18+
assert c.branches is False
19+
assert c.branch_text is False
20+
assert c.summary is False
2121
assert c.fractal_dimension is False
2222
assert c.vessel_radius is False
2323

@@ -223,7 +223,7 @@ def test_save_creates_valid_json(self, tmp_path):
223223
raw = json.load(f)
224224

225225
assert raw["schema_version"] == CONFIG_SCHEMA_VERSION
226-
assert raw["extraction"]["branches"] is True
226+
assert raw["extraction"]["branches"] is False
227227
assert raw["output"]["write_summary_csv"] is True
228228

229229
def test_load_missing_file(self, tmp_path):

tests/test_napari_layers.py

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -37,53 +37,60 @@ def branch_data(self, graph):
3737
def features(self, skeleton, graph, branch_data):
3838
return _features_for(skeleton, graph, branch_data)
3939

40-
def test_default_config_returns_layers(
40+
def test_with_config_returns_layers(
4141
self, skeleton, graph, branch_data, features
4242
):
4343
layers = extract_skeleton_layers(
4444
skeleton,
4545
"test",
4646
graph,
4747
branch_data,
48+
config=ExtractionConfig(branches=True, summary=True),
4849
features=features,
4950
)
5051
assert len(layers) > 0
51-
assert all(isinstance(layer, tuple) and len(layer) == 3 for layer in layers)
52+
for layer in layers:
53+
assert isinstance(layer, tuple) and len(layer) == 3
54+
assert isinstance(layer[1], dict)
55+
assert isinstance(layer[2], str)
5256

53-
def test_default_config_includes_branch_layer(
57+
def test_with_config_includes_branch_layer(
5458
self, skeleton, graph, branch_data, features
5559
):
5660
layers = extract_skeleton_layers(
5761
skeleton,
5862
"test",
5963
graph,
6064
branch_data,
65+
config=ExtractionConfig(branches=True, summary=True),
6166
features=features,
6267
)
6368
layer_types = [layer[2] for layer in layers]
6469
assert "shapes" in layer_types
6570

66-
def test_default_config_includes_summary_layer(
71+
def test_with_config_includes_summary_layer(
6772
self, skeleton, graph, branch_data, features
6873
):
6974
layers = extract_skeleton_layers(
7075
skeleton,
7176
"test",
7277
graph,
7378
branch_data,
79+
config=ExtractionConfig(branches=True, summary=True),
7480
features=features,
7581
)
7682
layer_names = [layer[1].get("name", "") for layer in layers]
7783
assert any("_summary" in name for name in layer_names)
7884

79-
def test_default_config_includes_two_point_layers(
85+
def test_with_config_includes_two_point_layers(
8086
self, skeleton, graph, branch_data, features
8187
):
8288
layers = extract_skeleton_layers(
8389
skeleton,
8490
"test",
8591
graph,
8692
branch_data,
93+
config=ExtractionConfig(branches=True, branch_text=True, summary=True),
8794
features=features,
8895
)
8996
layer_types = [layer[2] for layer in layers]
@@ -104,7 +111,7 @@ def test_branches_disabled(self, skeleton, graph, branch_data, features):
104111
assert "shapes" not in layer_types
105112

106113
def test_branch_text_disabled(self, skeleton, graph, branch_data, features):
107-
config = ExtractionConfig(branches=True, branch_text=False)
114+
config = ExtractionConfig(branches=True, branch_text=False, summary=True)
108115
layers = extract_skeleton_layers(
109116
skeleton,
110117
"test",
@@ -118,7 +125,7 @@ def test_branch_text_disabled(self, skeleton, graph, branch_data, features):
118125
assert not any("branch_text" in name for name in layer_names)
119126

120127
def test_summary_disabled(self, skeleton, graph, branch_data):
121-
config = ExtractionConfig(summary=False)
128+
config = ExtractionConfig(branches=True, branch_text=True, summary=False)
122129
layers = extract_skeleton_layers(
123130
skeleton,
124131
"test",
@@ -131,20 +138,6 @@ def test_summary_disabled(self, skeleton, graph, branch_data):
131138
layer_names = [layer[1].get("name", "") for layer in layers]
132139
assert not any("summary" in name for name in layer_names)
133140

134-
def test_summary_disabled_no_features_needed(self, skeleton, graph, branch_data):
135-
config = ExtractionConfig(summary=False)
136-
layers = extract_skeleton_layers(
137-
skeleton,
138-
"test",
139-
graph,
140-
branch_data,
141-
config=config,
142-
features=None,
143-
)
144-
assert len(layers) > 0
145-
layer_names = [l[1].get("name", "") for l in layers]
146-
assert not any("_summary" in name for name in layer_names)
147-
148141
def test_with_features_passed(self, skeleton, graph, branch_data, features):
149142
config = ExtractionConfig(summary=True)
150143
layers = extract_skeleton_layers(
@@ -196,8 +189,10 @@ def test_layer_names_include_base_name(
196189
base_name,
197190
graph,
198191
branch_data,
192+
config=ExtractionConfig(branches=True, summary=True),
199193
features=features,
200194
)
195+
assert len(layers) > 0
201196
for layer in layers:
202197
assert base_name in layer[1].get("name", "")
203198

@@ -207,6 +202,7 @@ def test_branch_layer_has_properties(self, skeleton, graph, branch_data, feature
207202
"test",
208203
graph,
209204
branch_data,
205+
config=ExtractionConfig(branches=True, summary=True),
210206
features=features,
211207
)
212208
branch_layer = [l for l in layers if l[2] == "shapes"][0]
@@ -237,6 +233,7 @@ def test_empty_skeleton(self):
237233
"empty",
238234
graph,
239235
branch_data,
236+
config=ExtractionConfig(summary=True),
240237
features=features,
241238
)
242239
summary = [l for l in layers if "_summary" in l[1].get("name", "")]
@@ -250,6 +247,7 @@ def test_branch_text_layer_has_text_config(
250247
"test",
251248
graph,
252249
branch_data,
250+
config=ExtractionConfig(branches=True, branch_text=True, summary=True),
253251
features=features,
254252
)
255253
text_layers = [

tests/test_pipeline.py

Lines changed: 28 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -52,60 +52,35 @@ def cross_image(self):
5252
return img
5353

5454
@pytest.fixture
55-
def default_config(self):
55+
def analysis_config(self):
56+
"""Shared config with branches and summary enabled."""
5657
return PipelineConfig(
57-
extraction=ExtractionConfig(),
58+
extraction=ExtractionConfig(branches=True, summary=True),
5859
output=OutputConfig(),
5960
)
6061

61-
def test_empty_image_returns_empty_result(self, default_config):
62+
def test_empty_image_returns_empty_result(self, analysis_config):
6263
img = np.zeros((32, 32), dtype=np.uint8)
63-
result = analyze_binary_image(img, "test", default_config)
64+
result = analyze_binary_image(img, "test", analysis_config)
6465
assert not result.skeleton.any()
6566
assert result.layers == []
6667
assert result.summary_features == {}
6768
assert result.branch_records == []
6869
assert result.radius_matrix is None
6970

70-
def test_all_zero_image_is_empty(self, default_config):
71-
result = analyze_binary_image(np.zeros((8, 8)), "z", default_config)
72-
assert not result.skeleton.any()
73-
74-
def test_cross_produces_skeleton(self, cross_image, default_config):
75-
result = analyze_binary_image(cross_image, "cross", default_config)
71+
def test_cross_produces_skeleton(self, cross_image, analysis_config):
72+
result = analyze_binary_image(cross_image, "cross", analysis_config)
7673
assert result.skeleton.any()
7774
assert result.skeleton.dtype == np.uint8
7875
assert result.skeleton.shape == cross_image.shape
7976

80-
def test_non_binary_input_is_binarized(self, default_config):
77+
def test_non_binary_input_is_binarized(self, analysis_config):
8178
img = np.zeros((20, 20), dtype=np.int32)
8279
img[10, 5:15] = 200
83-
result = analyze_binary_image(img, "test", default_config)
80+
result = analyze_binary_image(img, "test", analysis_config)
8481
assert result.skeleton.any()
8582
assert set(np.unique(result.skeleton)) <= {0, 1}
8683

87-
def test_layers_have_three_element_tuples(self, cross_image, default_config):
88-
result = analyze_binary_image(cross_image, "test", default_config)
89-
assert len(result.layers) > 0
90-
for layer in result.layers:
91-
assert len(layer) == 3
92-
assert isinstance(layer[1], dict)
93-
assert isinstance(layer[2], str)
94-
95-
def test_base_name_in_layer_metadata(self, cross_image, default_config):
96-
result = analyze_binary_image(cross_image, "myimage", default_config)
97-
found = False
98-
for layer in result.layers:
99-
if "name" in layer[1]:
100-
found = True
101-
break
102-
assert found, "No layer has a 'name' key in metadata"
103-
104-
def test_summary_features_not_empty(self, cross_image, default_config):
105-
result = analyze_binary_image(cross_image, "cross", default_config)
106-
assert len(result.summary_features) > 0
107-
assert "num_endpoints" in result.summary_features
108-
10984
def test_summary_disabled_returns_empty_features(self, cross_image):
11085
config = PipelineConfig(
11186
extraction=ExtractionConfig(summary=False),
@@ -114,18 +89,8 @@ def test_summary_disabled_returns_empty_features(self, cross_image):
11489
result = analyze_binary_image(cross_image, "cross", config)
11590
assert result.summary_features == {}
11691

117-
def test_summary_disabled_in_pipeline_config(self):
118-
img = np.zeros((16, 16), dtype=np.uint8)
119-
img[8, 4:12] = 1
120-
config = PipelineConfig(
121-
extraction=ExtractionConfig(summary=False),
122-
output=OutputConfig(),
123-
)
124-
result = analyze_binary_image(img, "line", config)
125-
assert result.summary_features == {}
126-
127-
def test_branches_enabled_by_default(self, cross_image, default_config):
128-
result = analyze_binary_image(cross_image, "cross", default_config)
92+
def test_branches_enabled(self, cross_image, analysis_config):
93+
result = analyze_binary_image(cross_image, "cross", analysis_config)
12994
assert len(result.branch_records) > 0
13095
assert isinstance(result.branch_records[0], dict)
13196

@@ -139,7 +104,7 @@ def test_branches_disabled_returns_empty_records(self, cross_image):
139104

140105
def test_vessel_radius_enabled(self, cross_image):
141106
config = PipelineConfig(
142-
extraction=ExtractionConfig(vessel_radius=True),
107+
extraction=ExtractionConfig(vessel_radius=True, summary=True),
143108
output=OutputConfig(),
144109
)
145110
result = analyze_binary_image(cross_image, "cross", config)
@@ -148,13 +113,13 @@ def test_vessel_radius_enabled(self, cross_image):
148113
assert result.radius_matrix.any()
149114
assert result.summary_features["mean_radius"] > 0
150115

151-
def test_vessel_radius_disabled_radius_none(self, cross_image, default_config):
152-
result = analyze_binary_image(cross_image, "cross", default_config)
116+
def test_vessel_radius_disabled_radius_none(self, cross_image, analysis_config):
117+
result = analyze_binary_image(cross_image, "cross", analysis_config)
153118
assert result.radius_matrix is None
154119

155120
def test_radius_stats_in_summary_when_enabled(self, cross_image):
156121
config = PipelineConfig(
157-
extraction=ExtractionConfig(vessel_radius=True),
122+
extraction=ExtractionConfig(vessel_radius=True, summary=True),
158123
output=OutputConfig(),
159124
)
160125
result = analyze_binary_image(cross_image, "cross", config)
@@ -172,13 +137,13 @@ def test_radius_stats_in_summary_when_enabled(self, cross_image):
172137
assert key in result.summary_features
173138
assert result.summary_features[key] > 0
174139

175-
def test_fractal_dimension_disabled_by_default(self, cross_image, default_config):
176-
result = analyze_binary_image(cross_image, "cross", default_config)
140+
def test_fractal_dimension_disabled_by_default(self, cross_image, analysis_config):
141+
result = analyze_binary_image(cross_image, "cross", analysis_config)
177142
assert result.summary_features["fractal_dimension"] == 0.0
178143

179144
def test_fractal_dimension_enabled(self, cross_image):
180145
config = PipelineConfig(
181-
extraction=ExtractionConfig(fractal_dimension=True),
146+
extraction=ExtractionConfig(fractal_dimension=True, summary=True),
182147
output=OutputConfig(),
183148
)
184149
result = analyze_binary_image(cross_image, "cross", config)
@@ -225,7 +190,9 @@ def test_3d_image(self):
225190
vol = np.zeros((16, 16, 16), dtype=np.uint8)
226191
vol[8, 8, :] = 1
227192
vol[8, :, 8] = 1
228-
config = PipelineConfig(extraction=ExtractionConfig(), output=OutputConfig())
193+
config = PipelineConfig(
194+
extraction=ExtractionConfig(summary=True), output=OutputConfig()
195+
)
229196
result = analyze_binary_image(vol, "vol", config)
230197
assert result.skeleton.any()
231198
assert len(result.summary_features) > 0
@@ -234,18 +201,20 @@ def test_3d_image_with_radius(self):
234201
vol = np.zeros((12, 12, 12), dtype=np.uint8)
235202
vol[6, 6, :] = 1
236203
config = PipelineConfig(
237-
extraction=ExtractionConfig(vessel_radius=True, fractal_dimension=True),
204+
extraction=ExtractionConfig(
205+
vessel_radius=True, fractal_dimension=True, summary=True
206+
),
238207
output=OutputConfig(),
239208
)
240209
result = analyze_binary_image(vol, "vol3d", config)
241210
assert result.radius_matrix is not None
242211
assert result.radius_matrix.shape == vol.shape
243212
assert result.summary_features["mean_radius"] > 0
244213

245-
def test_cross_topology_num_endpoints(self, cross_image, default_config):
246-
result = analyze_binary_image(cross_image, "cross", default_config)
214+
def test_cross_topology_num_endpoints(self, cross_image, analysis_config):
215+
result = analyze_binary_image(cross_image, "cross", analysis_config)
247216
assert result.summary_features["num_endpoints"] == 4
248217

249-
def test_cross_topology_num_bifurcations(self, cross_image, default_config):
250-
result = analyze_binary_image(cross_image, "cross", default_config)
218+
def test_cross_topology_num_bifurcations(self, cross_image, analysis_config):
219+
result = analyze_binary_image(cross_image, "cross", analysis_config)
251220
assert result.summary_features["num_bifurcations"] == 1

0 commit comments

Comments
 (0)