|
@@ -4,9 +4,12 @@ import subprocess
|
|
|
import typing
|
|
|
import unittest.mock
|
|
|
|
|
|
-from freesurfer_surface.__main__ import annotation_labels
|
|
|
+import numpy
|
|
|
|
|
|
-from conftest import ANNOTATION_FILE_PATH
|
|
|
+from freesurfer_surface import Surface, Triangle, Vertex
|
|
|
+from freesurfer_surface.__main__ import annotation_labels, unite_surfaces
|
|
|
+
|
|
|
+from conftest import ANNOTATION_FILE_PATH, SURFACE_FILE_PATH
|
|
|
|
|
|
|
|
|
def check_rows(csv_rows: typing.List[str]):
|
|
@@ -39,3 +42,47 @@ def test_annotation_labels_script():
|
|
|
assert not proc_info.stderr
|
|
|
check_rows(list(csv.reader(io.StringIO(proc_info.stdout.decode()),
|
|
|
delimiter='\t')))
|
|
|
+
|
|
|
+
|
|
|
+def test_unite_surfaces_function(tmpdir, capsys):
|
|
|
+ surface_b = Surface.read_triangular(SURFACE_FILE_PATH)
|
|
|
+ surface_b.vertices = []
|
|
|
+ for i in range(5):
|
|
|
+ surface_b.add_vertex(Vertex(i, i, i))
|
|
|
+ surface_b.triangles = [Triangle((0, 1, 3)), Triangle((1, 3, 4))]
|
|
|
+ surface_b_path = tmpdir.join('b').strpath
|
|
|
+ surface_b.write_triangular(surface_b_path)
|
|
|
+ output_path = tmpdir.join('output_path').strpath
|
|
|
+ with unittest.mock.patch('sys.argv', ['', '--output', output_path,
|
|
|
+ SURFACE_FILE_PATH, surface_b_path]):
|
|
|
+ unite_surfaces()
|
|
|
+ out, err = capsys.readouterr()
|
|
|
+ assert not out
|
|
|
+ assert not err
|
|
|
+ union = Surface.read_triangular(output_path)
|
|
|
+ assert len(union.vertices) == 155627
|
|
|
+ assert len(union.triangles) == 311242
|
|
|
+ assert numpy.allclose(union.vertices[-5:], surface_b.vertices)
|
|
|
+
|
|
|
+
|
|
|
+def test_unite_surfaces_script(tmpdir):
|
|
|
+ surface_b = Surface.read_triangular(SURFACE_FILE_PATH)
|
|
|
+ surface_b.vertices = []
|
|
|
+ for i in range(5):
|
|
|
+ surface_b.add_vertex(Vertex(i, i, i))
|
|
|
+ surface_b.triangles = [Triangle((0, 1, 3)), Triangle((1, 3, 4))]
|
|
|
+ surface_b_path = tmpdir.join('b').strpath
|
|
|
+ surface_b.write_triangular(surface_b_path)
|
|
|
+ output_path = tmpdir.join('output_path').strpath
|
|
|
+ proc_info = subprocess.run(['unite-freesurfer-surfaces',
|
|
|
+ '--output', output_path,
|
|
|
+ SURFACE_FILE_PATH, surface_b_path,
|
|
|
+ surface_b_path],
|
|
|
+ check=True,
|
|
|
+ stdout=subprocess.PIPE,
|
|
|
+ stderr=subprocess.PIPE)
|
|
|
+ assert not proc_info.stdout
|
|
|
+ assert not proc_info.stderr
|
|
|
+ union = Surface.read_triangular(output_path)
|
|
|
+ assert len(union.vertices) == 155622 + (5 * 2)
|
|
|
+ assert len(union.triangles) == 311240 + (2 * 2)
|