From a450f7c2a2d8f4c00e9c1e6246c084b3a223c911 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Fri, 17 Oct 2025 12:46:38 +0200 Subject: [PATCH 1/4] fix(Tests): move tests out of src --- .gitignore | 1 - {src/tests => tests}/__init__.py | 0 {src/tests => tests}/conftest.py | 0 {src/tests => tests}/data/CrossSection.vtm | 0 ...rner_00000000-054b-4eb1-8000-0000b351de2c.vtp | 0 ...rner_00000000-1a02-45a2-8000-0000247024f4.vtp | 0 ...rner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp | 0 ...rner_00000000-9655-449f-8000-000006885621.vtp | 0 ...rner_00000000-a61f-4b8c-8000-00001ba48a80.vtp | 0 ...rner_00000000-ab98-49bf-8000-0000d2111233.vtp | 0 ...Line_00000000-00c7-4cbd-8000-00002888c528.vtp | 0 ...Line_00000000-5800-40ae-8000-00008671fc57.vtp | 0 ...Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp | 0 ...Line_00000000-be29-45fb-8000-000036904028.vtp | 0 ...Line_00000000-c4af-4187-8000-00004fd7d673.vtp | 0 ...Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp | 0 ...Line_00000000-f0b7-4f93-8000-000061178f38.vtp | 0 ...Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp | 0 ...face_00000000-2329-4cf6-8000-0000f98922e7.vtp | 0 ...face_00000000-c4b6-47e6-8000-0000a9040e04.vtp | 0 ...face_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp | 0 {src/tests => tests}/data/cube.vtm | 0 ...lock_00000000-424a-4c63-8000-0000a002edd2.vtu | 0 ...lock_00000000-5a1c-4948-8000-0000e182eaeb.vtu | 0 ...rner_00000000-0f78-4b81-8000-000033fca81e.vtp | 0 ...rner_00000000-1ded-48e6-8000-0000d85a8662.vtp | 0 ...rner_00000000-1e51-466a-8000-0000be50b697.vtp | 0 ...rner_00000000-3153-47da-8000-0000291b0bf7.vtp | 0 ...rner_00000000-3182-4037-8000-00007cf88fc7.vtp | 0 ...rner_00000000-844f-4164-8000-00008a0ab00b.vtp | 0 ...rner_00000000-9247-49ea-8000-000042150516.vtp | 0 ...rner_00000000-c1dd-4589-8000-0000060127b6.vtp | 0 ...rner_00000000-c88d-4503-8000-0000c3468d3c.vtp | 0 ...rner_00000000-e6c2-4162-8000-0000fb6c4986.vtp | 0 ...rner_00000000-e906-4183-8000-000012b667a1.vtp | 0 ...rner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp | 0 ...Line_00000000-00ee-4599-8000-000066f9bd67.vtp | 0 ...Line_00000000-0166-4808-8000-0000390b1b36.vtp | 0 ...Line_00000000-13bc-471d-8000-00000e11c7ad.vtp | 0 ...Line_00000000-1744-469f-8000-00007e214117.vtp | 0 ...Line_00000000-30f9-43ec-8000-0000ce418e93.vtp | 0 ...Line_00000000-3189-4590-8000-0000f1535b82.vtp | 0 ...Line_00000000-4720-43e1-8000-00003fb94879.vtp | 0 ...Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp | 0 ...Line_00000000-57a7-45c5-8000-000074853b1a.vtp | 0 ...Line_00000000-64f7-423c-8000-000091174d24.vtp | 0 ...Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp | 0 ...Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp | 0 ...Line_00000000-80fb-4f74-8000-000089d20921.vtp | 0 ...Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp | 0 ...Line_00000000-a14e-4e44-8000-000055a5ccda.vtp | 0 ...Line_00000000-a3de-4f0b-8000-000026063086.vtp | 0 ...Line_00000000-bbc1-456c-8000-000093f52d1f.vtp | 0 ...Line_00000000-d368-4dbb-8000-00007ba8829b.vtp | 0 ...Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp | 0 ...Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp | 0 ...face_00000000-0069-4b43-8000-0000f2ae1337.vtp | 0 ...face_00000000-02b1-4f4c-8000-000016b60c49.vtp | 0 ...face_00000000-0759-4249-8000-0000243598ab.vtp | 0 ...face_00000000-2816-4509-8000-00005b1705a7.vtp | 0 ...face_00000000-3ea7-4822-8000-00005386b514.vtp | 0 ...face_00000000-5c26-4027-8000-0000bbb0481d.vtp | 0 ...face_00000000-6482-4171-8000-0000a5e13a81.vtp | 0 ...face_00000000-7a5a-4c72-8000-0000807ef000.vtp | 0 ...face_00000000-9c41-4942-8000-000066156e69.vtp | 0 ...face_00000000-a67c-41f3-8000-0000f1829f04.vtp | 0 ...face_00000000-e250-470d-8000-00006a6de472.vtp | 0 {src/tests => tests}/data/edged_curve.vtp | 0 {src/tests => tests}/data/hat.vtp | 0 {src/tests => tests}/data/hat_lambert2SG.vti | 0 {src/tests => tests}/data/hybrid_solid.vtu | 0 .../data/images/mesh/apply_textures.jpeg | Bin {src/tests => tests}/data/images/mesh/color.jpeg | Bin .../data/images/mesh/deregister.jpeg | Bin .../data/images/mesh/edges/color.jpeg | Bin .../images/mesh/edges/edged_curve_color.jpeg | Bin .../mesh/edges/edged_curve_visibility.jpeg | Bin .../images/mesh/edges/register_edged_curve.jpeg | Bin .../data/images/mesh/edges/visibility.jpeg | Bin .../data/images/mesh/opacity.jpeg | Bin .../data/images/mesh/points/color.jpeg | Bin .../data/images/mesh/points/point_set_color.jpeg | Bin .../data/images/mesh/points/point_set_size.jpeg | Bin .../images/mesh/points/point_set_visibility.jpeg | Bin .../images/mesh/points/register_point_set.jpeg | Bin .../data/images/mesh/points/size.jpeg | Bin .../data/images/mesh/points/visibility.jpeg | Bin .../data/images/mesh/polygons/color.jpeg | Bin .../data/images/mesh/polygons/visibility.jpeg | Bin .../data/images/mesh/polyhedra/color.jpeg | Bin .../mesh/polyhedra/polyhedron_attribute.jpeg | Bin .../data/images/mesh/polyhedra/register.jpeg | Bin .../images/mesh/polyhedra/vertex_attribute.jpeg | Bin .../data/images/mesh/polyhedra/visibility.jpeg | Bin .../data/images/mesh/register.jpeg | Bin .../data/images/mesh/visibility.jpeg | Bin .../data/images/model/blocks/color.jpeg | Bin .../data/images/model/blocks/visibility.jpeg | Bin .../tests => tests}/data/images/model/color.jpeg | Bin .../data/images/model/corners/color.jpeg | Bin .../data/images/model/corners/visibility.jpeg | Bin .../data/images/model/cube_register.jpeg | Bin .../data/images/model/cube_visibility_false.jpeg | Bin .../data/images/model/deregister.jpeg | Bin .../data/images/model/edges/visibility.jpeg | Bin .../data/images/model/lines/color.jpeg | Bin .../data/images/model/lines/visibility.jpeg | Bin .../data/images/model/points/size.jpeg | Bin .../data/images/model/points/visibility.jpeg | Bin .../data/images/model/register.jpeg | Bin .../data/images/model/set_components_color.jpeg | Bin .../data/images/model/set_mesh_visibility.jpeg | Bin .../data/images/model/surfaces/color.jpeg | Bin .../data/images/model/surfaces/visibility.jpeg | Bin .../data/images/model/visibility.jpeg | Bin .../data/images/viewer/axes_off.jpeg | Bin .../images/viewer/combined_scaling_and_grid.jpeg | Bin .../data/images/viewer/grid_scale_on.jpeg | Bin .../data/images/viewer/polygon_attribute.jpeg | Bin .../data/images/viewer/register_hat.jpeg | Bin .../data/images/viewer/render_now.jpeg | Bin .../data/images/viewer/reset_camera.jpeg | Bin .../data/images/viewer/reset_visualization.jpeg | Bin .../images/viewer/scaling_and_grid_color.jpeg | Bin .../data/images/viewer/set_background_color.jpeg | Bin .../data/images/viewer/set_z_scaling.jpeg | Bin .../viewer/take_screenshot_with_background.jpg | Bin .../viewer/take_screenshot_with_background.png | Bin .../take_screenshot_without_background.png | Bin .../data/images/viewer/update_camera.jpeg | Bin .../viewer/vertex_and_polygon_attribute.jpeg | Bin {src/tests => tests}/data/points.vtp | 0 {src/tests => tests}/data/polygon_attribute.vtp | 0 .../data/polyhedron_attribute.vtu | 0 .../data/take_screenshot_with_background.jpg | Bin .../data/take_screenshot_with_background.png | Bin .../data/take_screenshot_without_background.png | Bin {src/tests => tests}/data/vertex_attribute.vtp | 0 {src/tests => tests}/data/verts.vtp | 0 .../mesh/edges/test_mesh_edges_protocols.py | 0 .../mesh/points/test_mesh_points_protocols.py | 0 .../polygons/test_mesh_polygons_protocols.py | 0 .../polyhedra/test_mesh_polyhedra_protocols.py | 0 {src/tests => tests}/mesh/test_mesh_protocols.py | 0 .../model/blocks/test_model_blocks_protocols.py | 0 .../corners/test_model_corners_protocols.py | 0 .../model/edges/test_model_edges_protocols.py | 0 .../model/lines/test_model_lines_protocols.py | 0 .../model/points/test_model_points_protocols.py | 0 .../surfaces/test_model_surfaces_protocols.py | 0 .../model/test_model_protocols.py | 0 {src/tests => tests}/py.typed | 0 {src/tests => tests}/test_generic_protocols.py | 0 {src/tests => tests}/test_viewer_protocols.py | 0 tests/tests_output/edged_curve_visibility.jpeg | Bin 0 -> 1072 bytes tests/tests_output/test.jpeg | Bin 0 -> 4237 bytes tests/tests_output/test.jpg | Bin 0 -> 6339 bytes tests/tests_output/test.png | Bin 0 -> 8873 bytes 158 files changed, 1 deletion(-) rename {src/tests => tests}/__init__.py (100%) rename {src/tests => tests}/conftest.py (100%) rename {src/tests => tests}/data/CrossSection.vtm (100%) rename {src/tests => tests}/data/CrossSection/Corner_00000000-054b-4eb1-8000-0000b351de2c.vtp (100%) rename {src/tests => tests}/data/CrossSection/Corner_00000000-1a02-45a2-8000-0000247024f4.vtp (100%) rename {src/tests => tests}/data/CrossSection/Corner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp (100%) rename {src/tests => tests}/data/CrossSection/Corner_00000000-9655-449f-8000-000006885621.vtp (100%) rename {src/tests => tests}/data/CrossSection/Corner_00000000-a61f-4b8c-8000-00001ba48a80.vtp (100%) rename {src/tests => tests}/data/CrossSection/Corner_00000000-ab98-49bf-8000-0000d2111233.vtp (100%) rename {src/tests => tests}/data/CrossSection/Line_00000000-00c7-4cbd-8000-00002888c528.vtp (100%) rename {src/tests => tests}/data/CrossSection/Line_00000000-5800-40ae-8000-00008671fc57.vtp (100%) rename {src/tests => tests}/data/CrossSection/Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp (100%) rename {src/tests => tests}/data/CrossSection/Line_00000000-be29-45fb-8000-000036904028.vtp (100%) rename {src/tests => tests}/data/CrossSection/Line_00000000-c4af-4187-8000-00004fd7d673.vtp (100%) rename {src/tests => tests}/data/CrossSection/Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp (100%) rename {src/tests => tests}/data/CrossSection/Line_00000000-f0b7-4f93-8000-000061178f38.vtp (100%) rename {src/tests => tests}/data/CrossSection/Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp (100%) rename {src/tests => tests}/data/CrossSection/Surface_00000000-2329-4cf6-8000-0000f98922e7.vtp (100%) rename {src/tests => tests}/data/CrossSection/Surface_00000000-c4b6-47e6-8000-0000a9040e04.vtp (100%) rename {src/tests => tests}/data/CrossSection/Surface_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp (100%) rename {src/tests => tests}/data/cube.vtm (100%) rename {src/tests => tests}/data/cube/Block_00000000-424a-4c63-8000-0000a002edd2.vtu (100%) rename {src/tests => tests}/data/cube/Block_00000000-5a1c-4948-8000-0000e182eaeb.vtu (100%) rename {src/tests => tests}/data/cube/Corner_00000000-0f78-4b81-8000-000033fca81e.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-1ded-48e6-8000-0000d85a8662.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-1e51-466a-8000-0000be50b697.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-3153-47da-8000-0000291b0bf7.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-3182-4037-8000-00007cf88fc7.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-844f-4164-8000-00008a0ab00b.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-9247-49ea-8000-000042150516.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-c1dd-4589-8000-0000060127b6.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-c88d-4503-8000-0000c3468d3c.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-e6c2-4162-8000-0000fb6c4986.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-e906-4183-8000-000012b667a1.vtp (100%) rename {src/tests => tests}/data/cube/Corner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-00ee-4599-8000-000066f9bd67.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-0166-4808-8000-0000390b1b36.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-13bc-471d-8000-00000e11c7ad.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-1744-469f-8000-00007e214117.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-30f9-43ec-8000-0000ce418e93.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-3189-4590-8000-0000f1535b82.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-4720-43e1-8000-00003fb94879.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-57a7-45c5-8000-000074853b1a.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-64f7-423c-8000-000091174d24.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-80fb-4f74-8000-000089d20921.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-a14e-4e44-8000-000055a5ccda.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-a3de-4f0b-8000-000026063086.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-bbc1-456c-8000-000093f52d1f.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-d368-4dbb-8000-00007ba8829b.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp (100%) rename {src/tests => tests}/data/cube/Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-0069-4b43-8000-0000f2ae1337.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-02b1-4f4c-8000-000016b60c49.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-0759-4249-8000-0000243598ab.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-2816-4509-8000-00005b1705a7.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-3ea7-4822-8000-00005386b514.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-5c26-4027-8000-0000bbb0481d.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-6482-4171-8000-0000a5e13a81.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-7a5a-4c72-8000-0000807ef000.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-9c41-4942-8000-000066156e69.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-a67c-41f3-8000-0000f1829f04.vtp (100%) rename {src/tests => tests}/data/cube/Surface_00000000-e250-470d-8000-00006a6de472.vtp (100%) rename {src/tests => tests}/data/edged_curve.vtp (100%) rename {src/tests => tests}/data/hat.vtp (100%) rename {src/tests => tests}/data/hat_lambert2SG.vti (100%) rename {src/tests => tests}/data/hybrid_solid.vtu (100%) rename {src/tests => tests}/data/images/mesh/apply_textures.jpeg (100%) rename {src/tests => tests}/data/images/mesh/color.jpeg (100%) rename {src/tests => tests}/data/images/mesh/deregister.jpeg (100%) rename {src/tests => tests}/data/images/mesh/edges/color.jpeg (100%) rename {src/tests => tests}/data/images/mesh/edges/edged_curve_color.jpeg (100%) rename {src/tests => tests}/data/images/mesh/edges/edged_curve_visibility.jpeg (100%) rename {src/tests => tests}/data/images/mesh/edges/register_edged_curve.jpeg (100%) rename {src/tests => tests}/data/images/mesh/edges/visibility.jpeg (100%) rename {src/tests => tests}/data/images/mesh/opacity.jpeg (100%) rename {src/tests => tests}/data/images/mesh/points/color.jpeg (100%) rename {src/tests => tests}/data/images/mesh/points/point_set_color.jpeg (100%) rename {src/tests => tests}/data/images/mesh/points/point_set_size.jpeg (100%) rename {src/tests => tests}/data/images/mesh/points/point_set_visibility.jpeg (100%) rename {src/tests => tests}/data/images/mesh/points/register_point_set.jpeg (100%) rename {src/tests => tests}/data/images/mesh/points/size.jpeg (100%) rename {src/tests => tests}/data/images/mesh/points/visibility.jpeg (100%) rename {src/tests => tests}/data/images/mesh/polygons/color.jpeg (100%) rename {src/tests => tests}/data/images/mesh/polygons/visibility.jpeg (100%) rename {src/tests => tests}/data/images/mesh/polyhedra/color.jpeg (100%) rename {src/tests => tests}/data/images/mesh/polyhedra/polyhedron_attribute.jpeg (100%) rename {src/tests => tests}/data/images/mesh/polyhedra/register.jpeg (100%) rename {src/tests => tests}/data/images/mesh/polyhedra/vertex_attribute.jpeg (100%) rename {src/tests => tests}/data/images/mesh/polyhedra/visibility.jpeg (100%) rename {src/tests => tests}/data/images/mesh/register.jpeg (100%) rename {src/tests => tests}/data/images/mesh/visibility.jpeg (100%) rename {src/tests => tests}/data/images/model/blocks/color.jpeg (100%) rename {src/tests => tests}/data/images/model/blocks/visibility.jpeg (100%) rename {src/tests => tests}/data/images/model/color.jpeg (100%) rename {src/tests => tests}/data/images/model/corners/color.jpeg (100%) rename {src/tests => tests}/data/images/model/corners/visibility.jpeg (100%) rename {src/tests => tests}/data/images/model/cube_register.jpeg (100%) rename {src/tests => tests}/data/images/model/cube_visibility_false.jpeg (100%) rename {src/tests => tests}/data/images/model/deregister.jpeg (100%) rename {src/tests => tests}/data/images/model/edges/visibility.jpeg (100%) rename {src/tests => tests}/data/images/model/lines/color.jpeg (100%) rename {src/tests => tests}/data/images/model/lines/visibility.jpeg (100%) rename {src/tests => tests}/data/images/model/points/size.jpeg (100%) rename {src/tests => tests}/data/images/model/points/visibility.jpeg (100%) rename {src/tests => tests}/data/images/model/register.jpeg (100%) rename {src/tests => tests}/data/images/model/set_components_color.jpeg (100%) rename {src/tests => tests}/data/images/model/set_mesh_visibility.jpeg (100%) rename {src/tests => tests}/data/images/model/surfaces/color.jpeg (100%) rename {src/tests => tests}/data/images/model/surfaces/visibility.jpeg (100%) rename {src/tests => tests}/data/images/model/visibility.jpeg (100%) rename {src/tests => tests}/data/images/viewer/axes_off.jpeg (100%) rename {src/tests => tests}/data/images/viewer/combined_scaling_and_grid.jpeg (100%) rename {src/tests => tests}/data/images/viewer/grid_scale_on.jpeg (100%) rename {src/tests => tests}/data/images/viewer/polygon_attribute.jpeg (100%) rename {src/tests => tests}/data/images/viewer/register_hat.jpeg (100%) rename {src/tests => tests}/data/images/viewer/render_now.jpeg (100%) rename {src/tests => tests}/data/images/viewer/reset_camera.jpeg (100%) rename {src/tests => tests}/data/images/viewer/reset_visualization.jpeg (100%) rename {src/tests => tests}/data/images/viewer/scaling_and_grid_color.jpeg (100%) rename {src/tests => tests}/data/images/viewer/set_background_color.jpeg (100%) rename {src/tests => tests}/data/images/viewer/set_z_scaling.jpeg (100%) rename {src/tests => tests}/data/images/viewer/take_screenshot_with_background.jpg (100%) rename {src/tests => tests}/data/images/viewer/take_screenshot_with_background.png (100%) rename {src/tests => tests}/data/images/viewer/take_screenshot_without_background.png (100%) rename {src/tests => tests}/data/images/viewer/update_camera.jpeg (100%) rename {src/tests => tests}/data/images/viewer/vertex_and_polygon_attribute.jpeg (100%) rename {src/tests => tests}/data/points.vtp (100%) rename {src/tests => tests}/data/polygon_attribute.vtp (100%) rename {src/tests => tests}/data/polyhedron_attribute.vtu (100%) rename {src/tests => tests}/data/take_screenshot_with_background.jpg (100%) rename {src/tests => tests}/data/take_screenshot_with_background.png (100%) rename {src/tests => tests}/data/take_screenshot_without_background.png (100%) rename {src/tests => tests}/data/vertex_attribute.vtp (100%) rename {src/tests => tests}/data/verts.vtp (100%) rename {src/tests => tests}/mesh/edges/test_mesh_edges_protocols.py (100%) rename {src/tests => tests}/mesh/points/test_mesh_points_protocols.py (100%) rename {src/tests => tests}/mesh/polygons/test_mesh_polygons_protocols.py (100%) rename {src/tests => tests}/mesh/polyhedra/test_mesh_polyhedra_protocols.py (100%) rename {src/tests => tests}/mesh/test_mesh_protocols.py (100%) rename {src/tests => tests}/model/blocks/test_model_blocks_protocols.py (100%) rename {src/tests => tests}/model/corners/test_model_corners_protocols.py (100%) rename {src/tests => tests}/model/edges/test_model_edges_protocols.py (100%) rename {src/tests => tests}/model/lines/test_model_lines_protocols.py (100%) rename {src/tests => tests}/model/points/test_model_points_protocols.py (100%) rename {src/tests => tests}/model/surfaces/test_model_surfaces_protocols.py (100%) rename {src/tests => tests}/model/test_model_protocols.py (100%) rename {src/tests => tests}/py.typed (100%) rename {src/tests => tests}/test_generic_protocols.py (100%) rename {src/tests => tests}/test_viewer_protocols.py (100%) create mode 100644 tests/tests_output/edged_curve_visibility.jpeg create mode 100644 tests/tests_output/test.jpeg create mode 100644 tests/tests_output/test.jpg create mode 100644 tests/tests_output/test.png diff --git a/.gitignore b/.gitignore index b4026267..96a1133b 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,5 @@ build .coverage* .mypy_cache *.db -tests/data opengeodeweb_viewer_schemas.json \ No newline at end of file diff --git a/src/tests/__init__.py b/tests/__init__.py similarity index 100% rename from src/tests/__init__.py rename to tests/__init__.py diff --git a/src/tests/conftest.py b/tests/conftest.py similarity index 100% rename from src/tests/conftest.py rename to tests/conftest.py diff --git a/src/tests/data/CrossSection.vtm b/tests/data/CrossSection.vtm similarity index 100% rename from src/tests/data/CrossSection.vtm rename to tests/data/CrossSection.vtm diff --git a/src/tests/data/CrossSection/Corner_00000000-054b-4eb1-8000-0000b351de2c.vtp b/tests/data/CrossSection/Corner_00000000-054b-4eb1-8000-0000b351de2c.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-054b-4eb1-8000-0000b351de2c.vtp rename to tests/data/CrossSection/Corner_00000000-054b-4eb1-8000-0000b351de2c.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-1a02-45a2-8000-0000247024f4.vtp b/tests/data/CrossSection/Corner_00000000-1a02-45a2-8000-0000247024f4.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-1a02-45a2-8000-0000247024f4.vtp rename to tests/data/CrossSection/Corner_00000000-1a02-45a2-8000-0000247024f4.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp b/tests/data/CrossSection/Corner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp rename to tests/data/CrossSection/Corner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-9655-449f-8000-000006885621.vtp b/tests/data/CrossSection/Corner_00000000-9655-449f-8000-000006885621.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-9655-449f-8000-000006885621.vtp rename to tests/data/CrossSection/Corner_00000000-9655-449f-8000-000006885621.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-a61f-4b8c-8000-00001ba48a80.vtp b/tests/data/CrossSection/Corner_00000000-a61f-4b8c-8000-00001ba48a80.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-a61f-4b8c-8000-00001ba48a80.vtp rename to tests/data/CrossSection/Corner_00000000-a61f-4b8c-8000-00001ba48a80.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-ab98-49bf-8000-0000d2111233.vtp b/tests/data/CrossSection/Corner_00000000-ab98-49bf-8000-0000d2111233.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-ab98-49bf-8000-0000d2111233.vtp rename to tests/data/CrossSection/Corner_00000000-ab98-49bf-8000-0000d2111233.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-00c7-4cbd-8000-00002888c528.vtp b/tests/data/CrossSection/Line_00000000-00c7-4cbd-8000-00002888c528.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-00c7-4cbd-8000-00002888c528.vtp rename to tests/data/CrossSection/Line_00000000-00c7-4cbd-8000-00002888c528.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-5800-40ae-8000-00008671fc57.vtp b/tests/data/CrossSection/Line_00000000-5800-40ae-8000-00008671fc57.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-5800-40ae-8000-00008671fc57.vtp rename to tests/data/CrossSection/Line_00000000-5800-40ae-8000-00008671fc57.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp b/tests/data/CrossSection/Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp rename to tests/data/CrossSection/Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-be29-45fb-8000-000036904028.vtp b/tests/data/CrossSection/Line_00000000-be29-45fb-8000-000036904028.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-be29-45fb-8000-000036904028.vtp rename to tests/data/CrossSection/Line_00000000-be29-45fb-8000-000036904028.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-c4af-4187-8000-00004fd7d673.vtp b/tests/data/CrossSection/Line_00000000-c4af-4187-8000-00004fd7d673.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-c4af-4187-8000-00004fd7d673.vtp rename to tests/data/CrossSection/Line_00000000-c4af-4187-8000-00004fd7d673.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp b/tests/data/CrossSection/Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp rename to tests/data/CrossSection/Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-f0b7-4f93-8000-000061178f38.vtp b/tests/data/CrossSection/Line_00000000-f0b7-4f93-8000-000061178f38.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-f0b7-4f93-8000-000061178f38.vtp rename to tests/data/CrossSection/Line_00000000-f0b7-4f93-8000-000061178f38.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp b/tests/data/CrossSection/Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp rename to tests/data/CrossSection/Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp diff --git a/src/tests/data/CrossSection/Surface_00000000-2329-4cf6-8000-0000f98922e7.vtp b/tests/data/CrossSection/Surface_00000000-2329-4cf6-8000-0000f98922e7.vtp similarity index 100% rename from src/tests/data/CrossSection/Surface_00000000-2329-4cf6-8000-0000f98922e7.vtp rename to tests/data/CrossSection/Surface_00000000-2329-4cf6-8000-0000f98922e7.vtp diff --git a/src/tests/data/CrossSection/Surface_00000000-c4b6-47e6-8000-0000a9040e04.vtp b/tests/data/CrossSection/Surface_00000000-c4b6-47e6-8000-0000a9040e04.vtp similarity index 100% rename from src/tests/data/CrossSection/Surface_00000000-c4b6-47e6-8000-0000a9040e04.vtp rename to tests/data/CrossSection/Surface_00000000-c4b6-47e6-8000-0000a9040e04.vtp diff --git a/src/tests/data/CrossSection/Surface_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp b/tests/data/CrossSection/Surface_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp similarity index 100% rename from src/tests/data/CrossSection/Surface_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp rename to tests/data/CrossSection/Surface_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp diff --git a/src/tests/data/cube.vtm b/tests/data/cube.vtm similarity index 100% rename from src/tests/data/cube.vtm rename to tests/data/cube.vtm diff --git a/src/tests/data/cube/Block_00000000-424a-4c63-8000-0000a002edd2.vtu b/tests/data/cube/Block_00000000-424a-4c63-8000-0000a002edd2.vtu similarity index 100% rename from src/tests/data/cube/Block_00000000-424a-4c63-8000-0000a002edd2.vtu rename to tests/data/cube/Block_00000000-424a-4c63-8000-0000a002edd2.vtu diff --git a/src/tests/data/cube/Block_00000000-5a1c-4948-8000-0000e182eaeb.vtu b/tests/data/cube/Block_00000000-5a1c-4948-8000-0000e182eaeb.vtu similarity index 100% rename from src/tests/data/cube/Block_00000000-5a1c-4948-8000-0000e182eaeb.vtu rename to tests/data/cube/Block_00000000-5a1c-4948-8000-0000e182eaeb.vtu diff --git a/src/tests/data/cube/Corner_00000000-0f78-4b81-8000-000033fca81e.vtp b/tests/data/cube/Corner_00000000-0f78-4b81-8000-000033fca81e.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-0f78-4b81-8000-000033fca81e.vtp rename to tests/data/cube/Corner_00000000-0f78-4b81-8000-000033fca81e.vtp diff --git a/src/tests/data/cube/Corner_00000000-1ded-48e6-8000-0000d85a8662.vtp b/tests/data/cube/Corner_00000000-1ded-48e6-8000-0000d85a8662.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-1ded-48e6-8000-0000d85a8662.vtp rename to tests/data/cube/Corner_00000000-1ded-48e6-8000-0000d85a8662.vtp diff --git a/src/tests/data/cube/Corner_00000000-1e51-466a-8000-0000be50b697.vtp b/tests/data/cube/Corner_00000000-1e51-466a-8000-0000be50b697.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-1e51-466a-8000-0000be50b697.vtp rename to tests/data/cube/Corner_00000000-1e51-466a-8000-0000be50b697.vtp diff --git a/src/tests/data/cube/Corner_00000000-3153-47da-8000-0000291b0bf7.vtp b/tests/data/cube/Corner_00000000-3153-47da-8000-0000291b0bf7.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-3153-47da-8000-0000291b0bf7.vtp rename to tests/data/cube/Corner_00000000-3153-47da-8000-0000291b0bf7.vtp diff --git a/src/tests/data/cube/Corner_00000000-3182-4037-8000-00007cf88fc7.vtp b/tests/data/cube/Corner_00000000-3182-4037-8000-00007cf88fc7.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-3182-4037-8000-00007cf88fc7.vtp rename to tests/data/cube/Corner_00000000-3182-4037-8000-00007cf88fc7.vtp diff --git a/src/tests/data/cube/Corner_00000000-844f-4164-8000-00008a0ab00b.vtp b/tests/data/cube/Corner_00000000-844f-4164-8000-00008a0ab00b.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-844f-4164-8000-00008a0ab00b.vtp rename to tests/data/cube/Corner_00000000-844f-4164-8000-00008a0ab00b.vtp diff --git a/src/tests/data/cube/Corner_00000000-9247-49ea-8000-000042150516.vtp b/tests/data/cube/Corner_00000000-9247-49ea-8000-000042150516.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-9247-49ea-8000-000042150516.vtp rename to tests/data/cube/Corner_00000000-9247-49ea-8000-000042150516.vtp diff --git a/src/tests/data/cube/Corner_00000000-c1dd-4589-8000-0000060127b6.vtp b/tests/data/cube/Corner_00000000-c1dd-4589-8000-0000060127b6.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-c1dd-4589-8000-0000060127b6.vtp rename to tests/data/cube/Corner_00000000-c1dd-4589-8000-0000060127b6.vtp diff --git a/src/tests/data/cube/Corner_00000000-c88d-4503-8000-0000c3468d3c.vtp b/tests/data/cube/Corner_00000000-c88d-4503-8000-0000c3468d3c.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-c88d-4503-8000-0000c3468d3c.vtp rename to tests/data/cube/Corner_00000000-c88d-4503-8000-0000c3468d3c.vtp diff --git a/src/tests/data/cube/Corner_00000000-e6c2-4162-8000-0000fb6c4986.vtp b/tests/data/cube/Corner_00000000-e6c2-4162-8000-0000fb6c4986.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-e6c2-4162-8000-0000fb6c4986.vtp rename to tests/data/cube/Corner_00000000-e6c2-4162-8000-0000fb6c4986.vtp diff --git a/src/tests/data/cube/Corner_00000000-e906-4183-8000-000012b667a1.vtp b/tests/data/cube/Corner_00000000-e906-4183-8000-000012b667a1.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-e906-4183-8000-000012b667a1.vtp rename to tests/data/cube/Corner_00000000-e906-4183-8000-000012b667a1.vtp diff --git a/src/tests/data/cube/Corner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp b/tests/data/cube/Corner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp rename to tests/data/cube/Corner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp diff --git a/src/tests/data/cube/Line_00000000-00ee-4599-8000-000066f9bd67.vtp b/tests/data/cube/Line_00000000-00ee-4599-8000-000066f9bd67.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-00ee-4599-8000-000066f9bd67.vtp rename to tests/data/cube/Line_00000000-00ee-4599-8000-000066f9bd67.vtp diff --git a/src/tests/data/cube/Line_00000000-0166-4808-8000-0000390b1b36.vtp b/tests/data/cube/Line_00000000-0166-4808-8000-0000390b1b36.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-0166-4808-8000-0000390b1b36.vtp rename to tests/data/cube/Line_00000000-0166-4808-8000-0000390b1b36.vtp diff --git a/src/tests/data/cube/Line_00000000-13bc-471d-8000-00000e11c7ad.vtp b/tests/data/cube/Line_00000000-13bc-471d-8000-00000e11c7ad.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-13bc-471d-8000-00000e11c7ad.vtp rename to tests/data/cube/Line_00000000-13bc-471d-8000-00000e11c7ad.vtp diff --git a/src/tests/data/cube/Line_00000000-1744-469f-8000-00007e214117.vtp b/tests/data/cube/Line_00000000-1744-469f-8000-00007e214117.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-1744-469f-8000-00007e214117.vtp rename to tests/data/cube/Line_00000000-1744-469f-8000-00007e214117.vtp diff --git a/src/tests/data/cube/Line_00000000-30f9-43ec-8000-0000ce418e93.vtp b/tests/data/cube/Line_00000000-30f9-43ec-8000-0000ce418e93.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-30f9-43ec-8000-0000ce418e93.vtp rename to tests/data/cube/Line_00000000-30f9-43ec-8000-0000ce418e93.vtp diff --git a/src/tests/data/cube/Line_00000000-3189-4590-8000-0000f1535b82.vtp b/tests/data/cube/Line_00000000-3189-4590-8000-0000f1535b82.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-3189-4590-8000-0000f1535b82.vtp rename to tests/data/cube/Line_00000000-3189-4590-8000-0000f1535b82.vtp diff --git a/src/tests/data/cube/Line_00000000-4720-43e1-8000-00003fb94879.vtp b/tests/data/cube/Line_00000000-4720-43e1-8000-00003fb94879.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-4720-43e1-8000-00003fb94879.vtp rename to tests/data/cube/Line_00000000-4720-43e1-8000-00003fb94879.vtp diff --git a/src/tests/data/cube/Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp b/tests/data/cube/Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp rename to tests/data/cube/Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp diff --git a/src/tests/data/cube/Line_00000000-57a7-45c5-8000-000074853b1a.vtp b/tests/data/cube/Line_00000000-57a7-45c5-8000-000074853b1a.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-57a7-45c5-8000-000074853b1a.vtp rename to tests/data/cube/Line_00000000-57a7-45c5-8000-000074853b1a.vtp diff --git a/src/tests/data/cube/Line_00000000-64f7-423c-8000-000091174d24.vtp b/tests/data/cube/Line_00000000-64f7-423c-8000-000091174d24.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-64f7-423c-8000-000091174d24.vtp rename to tests/data/cube/Line_00000000-64f7-423c-8000-000091174d24.vtp diff --git a/src/tests/data/cube/Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp b/tests/data/cube/Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp rename to tests/data/cube/Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp diff --git a/src/tests/data/cube/Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp b/tests/data/cube/Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp rename to tests/data/cube/Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp diff --git a/src/tests/data/cube/Line_00000000-80fb-4f74-8000-000089d20921.vtp b/tests/data/cube/Line_00000000-80fb-4f74-8000-000089d20921.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-80fb-4f74-8000-000089d20921.vtp rename to tests/data/cube/Line_00000000-80fb-4f74-8000-000089d20921.vtp diff --git a/src/tests/data/cube/Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp b/tests/data/cube/Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp rename to tests/data/cube/Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp diff --git a/src/tests/data/cube/Line_00000000-a14e-4e44-8000-000055a5ccda.vtp b/tests/data/cube/Line_00000000-a14e-4e44-8000-000055a5ccda.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-a14e-4e44-8000-000055a5ccda.vtp rename to tests/data/cube/Line_00000000-a14e-4e44-8000-000055a5ccda.vtp diff --git a/src/tests/data/cube/Line_00000000-a3de-4f0b-8000-000026063086.vtp b/tests/data/cube/Line_00000000-a3de-4f0b-8000-000026063086.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-a3de-4f0b-8000-000026063086.vtp rename to tests/data/cube/Line_00000000-a3de-4f0b-8000-000026063086.vtp diff --git a/src/tests/data/cube/Line_00000000-bbc1-456c-8000-000093f52d1f.vtp b/tests/data/cube/Line_00000000-bbc1-456c-8000-000093f52d1f.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-bbc1-456c-8000-000093f52d1f.vtp rename to tests/data/cube/Line_00000000-bbc1-456c-8000-000093f52d1f.vtp diff --git a/src/tests/data/cube/Line_00000000-d368-4dbb-8000-00007ba8829b.vtp b/tests/data/cube/Line_00000000-d368-4dbb-8000-00007ba8829b.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-d368-4dbb-8000-00007ba8829b.vtp rename to tests/data/cube/Line_00000000-d368-4dbb-8000-00007ba8829b.vtp diff --git a/src/tests/data/cube/Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp b/tests/data/cube/Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp rename to tests/data/cube/Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp diff --git a/src/tests/data/cube/Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp b/tests/data/cube/Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp rename to tests/data/cube/Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp diff --git a/src/tests/data/cube/Surface_00000000-0069-4b43-8000-0000f2ae1337.vtp b/tests/data/cube/Surface_00000000-0069-4b43-8000-0000f2ae1337.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-0069-4b43-8000-0000f2ae1337.vtp rename to tests/data/cube/Surface_00000000-0069-4b43-8000-0000f2ae1337.vtp diff --git a/src/tests/data/cube/Surface_00000000-02b1-4f4c-8000-000016b60c49.vtp b/tests/data/cube/Surface_00000000-02b1-4f4c-8000-000016b60c49.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-02b1-4f4c-8000-000016b60c49.vtp rename to tests/data/cube/Surface_00000000-02b1-4f4c-8000-000016b60c49.vtp diff --git a/src/tests/data/cube/Surface_00000000-0759-4249-8000-0000243598ab.vtp b/tests/data/cube/Surface_00000000-0759-4249-8000-0000243598ab.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-0759-4249-8000-0000243598ab.vtp rename to tests/data/cube/Surface_00000000-0759-4249-8000-0000243598ab.vtp diff --git a/src/tests/data/cube/Surface_00000000-2816-4509-8000-00005b1705a7.vtp b/tests/data/cube/Surface_00000000-2816-4509-8000-00005b1705a7.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-2816-4509-8000-00005b1705a7.vtp rename to tests/data/cube/Surface_00000000-2816-4509-8000-00005b1705a7.vtp diff --git a/src/tests/data/cube/Surface_00000000-3ea7-4822-8000-00005386b514.vtp b/tests/data/cube/Surface_00000000-3ea7-4822-8000-00005386b514.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-3ea7-4822-8000-00005386b514.vtp rename to tests/data/cube/Surface_00000000-3ea7-4822-8000-00005386b514.vtp diff --git a/src/tests/data/cube/Surface_00000000-5c26-4027-8000-0000bbb0481d.vtp b/tests/data/cube/Surface_00000000-5c26-4027-8000-0000bbb0481d.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-5c26-4027-8000-0000bbb0481d.vtp rename to tests/data/cube/Surface_00000000-5c26-4027-8000-0000bbb0481d.vtp diff --git a/src/tests/data/cube/Surface_00000000-6482-4171-8000-0000a5e13a81.vtp b/tests/data/cube/Surface_00000000-6482-4171-8000-0000a5e13a81.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-6482-4171-8000-0000a5e13a81.vtp rename to tests/data/cube/Surface_00000000-6482-4171-8000-0000a5e13a81.vtp diff --git a/src/tests/data/cube/Surface_00000000-7a5a-4c72-8000-0000807ef000.vtp b/tests/data/cube/Surface_00000000-7a5a-4c72-8000-0000807ef000.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-7a5a-4c72-8000-0000807ef000.vtp rename to tests/data/cube/Surface_00000000-7a5a-4c72-8000-0000807ef000.vtp diff --git a/src/tests/data/cube/Surface_00000000-9c41-4942-8000-000066156e69.vtp b/tests/data/cube/Surface_00000000-9c41-4942-8000-000066156e69.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-9c41-4942-8000-000066156e69.vtp rename to tests/data/cube/Surface_00000000-9c41-4942-8000-000066156e69.vtp diff --git a/src/tests/data/cube/Surface_00000000-a67c-41f3-8000-0000f1829f04.vtp b/tests/data/cube/Surface_00000000-a67c-41f3-8000-0000f1829f04.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-a67c-41f3-8000-0000f1829f04.vtp rename to tests/data/cube/Surface_00000000-a67c-41f3-8000-0000f1829f04.vtp diff --git a/src/tests/data/cube/Surface_00000000-e250-470d-8000-00006a6de472.vtp b/tests/data/cube/Surface_00000000-e250-470d-8000-00006a6de472.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-e250-470d-8000-00006a6de472.vtp rename to tests/data/cube/Surface_00000000-e250-470d-8000-00006a6de472.vtp diff --git a/src/tests/data/edged_curve.vtp b/tests/data/edged_curve.vtp similarity index 100% rename from src/tests/data/edged_curve.vtp rename to tests/data/edged_curve.vtp diff --git a/src/tests/data/hat.vtp b/tests/data/hat.vtp similarity index 100% rename from src/tests/data/hat.vtp rename to tests/data/hat.vtp diff --git a/src/tests/data/hat_lambert2SG.vti b/tests/data/hat_lambert2SG.vti similarity index 100% rename from src/tests/data/hat_lambert2SG.vti rename to tests/data/hat_lambert2SG.vti diff --git a/src/tests/data/hybrid_solid.vtu b/tests/data/hybrid_solid.vtu similarity index 100% rename from src/tests/data/hybrid_solid.vtu rename to tests/data/hybrid_solid.vtu diff --git a/src/tests/data/images/mesh/apply_textures.jpeg b/tests/data/images/mesh/apply_textures.jpeg similarity index 100% rename from src/tests/data/images/mesh/apply_textures.jpeg rename to tests/data/images/mesh/apply_textures.jpeg diff --git a/src/tests/data/images/mesh/color.jpeg b/tests/data/images/mesh/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/color.jpeg rename to tests/data/images/mesh/color.jpeg diff --git a/src/tests/data/images/mesh/deregister.jpeg b/tests/data/images/mesh/deregister.jpeg similarity index 100% rename from src/tests/data/images/mesh/deregister.jpeg rename to tests/data/images/mesh/deregister.jpeg diff --git a/src/tests/data/images/mesh/edges/color.jpeg b/tests/data/images/mesh/edges/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/color.jpeg rename to tests/data/images/mesh/edges/color.jpeg diff --git a/src/tests/data/images/mesh/edges/edged_curve_color.jpeg b/tests/data/images/mesh/edges/edged_curve_color.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/edged_curve_color.jpeg rename to tests/data/images/mesh/edges/edged_curve_color.jpeg diff --git a/src/tests/data/images/mesh/edges/edged_curve_visibility.jpeg b/tests/data/images/mesh/edges/edged_curve_visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/edged_curve_visibility.jpeg rename to tests/data/images/mesh/edges/edged_curve_visibility.jpeg diff --git a/src/tests/data/images/mesh/edges/register_edged_curve.jpeg b/tests/data/images/mesh/edges/register_edged_curve.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/register_edged_curve.jpeg rename to tests/data/images/mesh/edges/register_edged_curve.jpeg diff --git a/src/tests/data/images/mesh/edges/visibility.jpeg b/tests/data/images/mesh/edges/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/visibility.jpeg rename to tests/data/images/mesh/edges/visibility.jpeg diff --git a/src/tests/data/images/mesh/opacity.jpeg b/tests/data/images/mesh/opacity.jpeg similarity index 100% rename from src/tests/data/images/mesh/opacity.jpeg rename to tests/data/images/mesh/opacity.jpeg diff --git a/src/tests/data/images/mesh/points/color.jpeg b/tests/data/images/mesh/points/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/color.jpeg rename to tests/data/images/mesh/points/color.jpeg diff --git a/src/tests/data/images/mesh/points/point_set_color.jpeg b/tests/data/images/mesh/points/point_set_color.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/point_set_color.jpeg rename to tests/data/images/mesh/points/point_set_color.jpeg diff --git a/src/tests/data/images/mesh/points/point_set_size.jpeg b/tests/data/images/mesh/points/point_set_size.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/point_set_size.jpeg rename to tests/data/images/mesh/points/point_set_size.jpeg diff --git a/src/tests/data/images/mesh/points/point_set_visibility.jpeg b/tests/data/images/mesh/points/point_set_visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/point_set_visibility.jpeg rename to tests/data/images/mesh/points/point_set_visibility.jpeg diff --git a/src/tests/data/images/mesh/points/register_point_set.jpeg b/tests/data/images/mesh/points/register_point_set.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/register_point_set.jpeg rename to tests/data/images/mesh/points/register_point_set.jpeg diff --git a/src/tests/data/images/mesh/points/size.jpeg b/tests/data/images/mesh/points/size.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/size.jpeg rename to tests/data/images/mesh/points/size.jpeg diff --git a/src/tests/data/images/mesh/points/visibility.jpeg b/tests/data/images/mesh/points/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/visibility.jpeg rename to tests/data/images/mesh/points/visibility.jpeg diff --git a/src/tests/data/images/mesh/polygons/color.jpeg b/tests/data/images/mesh/polygons/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/polygons/color.jpeg rename to tests/data/images/mesh/polygons/color.jpeg diff --git a/src/tests/data/images/mesh/polygons/visibility.jpeg b/tests/data/images/mesh/polygons/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/polygons/visibility.jpeg rename to tests/data/images/mesh/polygons/visibility.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/color.jpeg b/tests/data/images/mesh/polyhedra/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/color.jpeg rename to tests/data/images/mesh/polyhedra/color.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/polyhedron_attribute.jpeg b/tests/data/images/mesh/polyhedra/polyhedron_attribute.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/polyhedron_attribute.jpeg rename to tests/data/images/mesh/polyhedra/polyhedron_attribute.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/register.jpeg b/tests/data/images/mesh/polyhedra/register.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/register.jpeg rename to tests/data/images/mesh/polyhedra/register.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/vertex_attribute.jpeg b/tests/data/images/mesh/polyhedra/vertex_attribute.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/vertex_attribute.jpeg rename to tests/data/images/mesh/polyhedra/vertex_attribute.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/visibility.jpeg b/tests/data/images/mesh/polyhedra/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/visibility.jpeg rename to tests/data/images/mesh/polyhedra/visibility.jpeg diff --git a/src/tests/data/images/mesh/register.jpeg b/tests/data/images/mesh/register.jpeg similarity index 100% rename from src/tests/data/images/mesh/register.jpeg rename to tests/data/images/mesh/register.jpeg diff --git a/src/tests/data/images/mesh/visibility.jpeg b/tests/data/images/mesh/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/visibility.jpeg rename to tests/data/images/mesh/visibility.jpeg diff --git a/src/tests/data/images/model/blocks/color.jpeg b/tests/data/images/model/blocks/color.jpeg similarity index 100% rename from src/tests/data/images/model/blocks/color.jpeg rename to tests/data/images/model/blocks/color.jpeg diff --git a/src/tests/data/images/model/blocks/visibility.jpeg b/tests/data/images/model/blocks/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/blocks/visibility.jpeg rename to tests/data/images/model/blocks/visibility.jpeg diff --git a/src/tests/data/images/model/color.jpeg b/tests/data/images/model/color.jpeg similarity index 100% rename from src/tests/data/images/model/color.jpeg rename to tests/data/images/model/color.jpeg diff --git a/src/tests/data/images/model/corners/color.jpeg b/tests/data/images/model/corners/color.jpeg similarity index 100% rename from src/tests/data/images/model/corners/color.jpeg rename to tests/data/images/model/corners/color.jpeg diff --git a/src/tests/data/images/model/corners/visibility.jpeg b/tests/data/images/model/corners/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/corners/visibility.jpeg rename to tests/data/images/model/corners/visibility.jpeg diff --git a/src/tests/data/images/model/cube_register.jpeg b/tests/data/images/model/cube_register.jpeg similarity index 100% rename from src/tests/data/images/model/cube_register.jpeg rename to tests/data/images/model/cube_register.jpeg diff --git a/src/tests/data/images/model/cube_visibility_false.jpeg b/tests/data/images/model/cube_visibility_false.jpeg similarity index 100% rename from src/tests/data/images/model/cube_visibility_false.jpeg rename to tests/data/images/model/cube_visibility_false.jpeg diff --git a/src/tests/data/images/model/deregister.jpeg b/tests/data/images/model/deregister.jpeg similarity index 100% rename from src/tests/data/images/model/deregister.jpeg rename to tests/data/images/model/deregister.jpeg diff --git a/src/tests/data/images/model/edges/visibility.jpeg b/tests/data/images/model/edges/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/edges/visibility.jpeg rename to tests/data/images/model/edges/visibility.jpeg diff --git a/src/tests/data/images/model/lines/color.jpeg b/tests/data/images/model/lines/color.jpeg similarity index 100% rename from src/tests/data/images/model/lines/color.jpeg rename to tests/data/images/model/lines/color.jpeg diff --git a/src/tests/data/images/model/lines/visibility.jpeg b/tests/data/images/model/lines/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/lines/visibility.jpeg rename to tests/data/images/model/lines/visibility.jpeg diff --git a/src/tests/data/images/model/points/size.jpeg b/tests/data/images/model/points/size.jpeg similarity index 100% rename from src/tests/data/images/model/points/size.jpeg rename to tests/data/images/model/points/size.jpeg diff --git a/src/tests/data/images/model/points/visibility.jpeg b/tests/data/images/model/points/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/points/visibility.jpeg rename to tests/data/images/model/points/visibility.jpeg diff --git a/src/tests/data/images/model/register.jpeg b/tests/data/images/model/register.jpeg similarity index 100% rename from src/tests/data/images/model/register.jpeg rename to tests/data/images/model/register.jpeg diff --git a/src/tests/data/images/model/set_components_color.jpeg b/tests/data/images/model/set_components_color.jpeg similarity index 100% rename from src/tests/data/images/model/set_components_color.jpeg rename to tests/data/images/model/set_components_color.jpeg diff --git a/src/tests/data/images/model/set_mesh_visibility.jpeg b/tests/data/images/model/set_mesh_visibility.jpeg similarity index 100% rename from src/tests/data/images/model/set_mesh_visibility.jpeg rename to tests/data/images/model/set_mesh_visibility.jpeg diff --git a/src/tests/data/images/model/surfaces/color.jpeg b/tests/data/images/model/surfaces/color.jpeg similarity index 100% rename from src/tests/data/images/model/surfaces/color.jpeg rename to tests/data/images/model/surfaces/color.jpeg diff --git a/src/tests/data/images/model/surfaces/visibility.jpeg b/tests/data/images/model/surfaces/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/surfaces/visibility.jpeg rename to tests/data/images/model/surfaces/visibility.jpeg diff --git a/src/tests/data/images/model/visibility.jpeg b/tests/data/images/model/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/visibility.jpeg rename to tests/data/images/model/visibility.jpeg diff --git a/src/tests/data/images/viewer/axes_off.jpeg b/tests/data/images/viewer/axes_off.jpeg similarity index 100% rename from src/tests/data/images/viewer/axes_off.jpeg rename to tests/data/images/viewer/axes_off.jpeg diff --git a/src/tests/data/images/viewer/combined_scaling_and_grid.jpeg b/tests/data/images/viewer/combined_scaling_and_grid.jpeg similarity index 100% rename from src/tests/data/images/viewer/combined_scaling_and_grid.jpeg rename to tests/data/images/viewer/combined_scaling_and_grid.jpeg diff --git a/src/tests/data/images/viewer/grid_scale_on.jpeg b/tests/data/images/viewer/grid_scale_on.jpeg similarity index 100% rename from src/tests/data/images/viewer/grid_scale_on.jpeg rename to tests/data/images/viewer/grid_scale_on.jpeg diff --git a/src/tests/data/images/viewer/polygon_attribute.jpeg b/tests/data/images/viewer/polygon_attribute.jpeg similarity index 100% rename from src/tests/data/images/viewer/polygon_attribute.jpeg rename to tests/data/images/viewer/polygon_attribute.jpeg diff --git a/src/tests/data/images/viewer/register_hat.jpeg b/tests/data/images/viewer/register_hat.jpeg similarity index 100% rename from src/tests/data/images/viewer/register_hat.jpeg rename to tests/data/images/viewer/register_hat.jpeg diff --git a/src/tests/data/images/viewer/render_now.jpeg b/tests/data/images/viewer/render_now.jpeg similarity index 100% rename from src/tests/data/images/viewer/render_now.jpeg rename to tests/data/images/viewer/render_now.jpeg diff --git a/src/tests/data/images/viewer/reset_camera.jpeg b/tests/data/images/viewer/reset_camera.jpeg similarity index 100% rename from src/tests/data/images/viewer/reset_camera.jpeg rename to tests/data/images/viewer/reset_camera.jpeg diff --git a/src/tests/data/images/viewer/reset_visualization.jpeg b/tests/data/images/viewer/reset_visualization.jpeg similarity index 100% rename from src/tests/data/images/viewer/reset_visualization.jpeg rename to tests/data/images/viewer/reset_visualization.jpeg diff --git a/src/tests/data/images/viewer/scaling_and_grid_color.jpeg b/tests/data/images/viewer/scaling_and_grid_color.jpeg similarity index 100% rename from src/tests/data/images/viewer/scaling_and_grid_color.jpeg rename to tests/data/images/viewer/scaling_and_grid_color.jpeg diff --git a/src/tests/data/images/viewer/set_background_color.jpeg b/tests/data/images/viewer/set_background_color.jpeg similarity index 100% rename from src/tests/data/images/viewer/set_background_color.jpeg rename to tests/data/images/viewer/set_background_color.jpeg diff --git a/src/tests/data/images/viewer/set_z_scaling.jpeg b/tests/data/images/viewer/set_z_scaling.jpeg similarity index 100% rename from src/tests/data/images/viewer/set_z_scaling.jpeg rename to tests/data/images/viewer/set_z_scaling.jpeg diff --git a/src/tests/data/images/viewer/take_screenshot_with_background.jpg b/tests/data/images/viewer/take_screenshot_with_background.jpg similarity index 100% rename from src/tests/data/images/viewer/take_screenshot_with_background.jpg rename to tests/data/images/viewer/take_screenshot_with_background.jpg diff --git a/src/tests/data/images/viewer/take_screenshot_with_background.png b/tests/data/images/viewer/take_screenshot_with_background.png similarity index 100% rename from src/tests/data/images/viewer/take_screenshot_with_background.png rename to tests/data/images/viewer/take_screenshot_with_background.png diff --git a/src/tests/data/images/viewer/take_screenshot_without_background.png b/tests/data/images/viewer/take_screenshot_without_background.png similarity index 100% rename from src/tests/data/images/viewer/take_screenshot_without_background.png rename to tests/data/images/viewer/take_screenshot_without_background.png diff --git a/src/tests/data/images/viewer/update_camera.jpeg b/tests/data/images/viewer/update_camera.jpeg similarity index 100% rename from src/tests/data/images/viewer/update_camera.jpeg rename to tests/data/images/viewer/update_camera.jpeg diff --git a/src/tests/data/images/viewer/vertex_and_polygon_attribute.jpeg b/tests/data/images/viewer/vertex_and_polygon_attribute.jpeg similarity index 100% rename from src/tests/data/images/viewer/vertex_and_polygon_attribute.jpeg rename to tests/data/images/viewer/vertex_and_polygon_attribute.jpeg diff --git a/src/tests/data/points.vtp b/tests/data/points.vtp similarity index 100% rename from src/tests/data/points.vtp rename to tests/data/points.vtp diff --git a/src/tests/data/polygon_attribute.vtp b/tests/data/polygon_attribute.vtp similarity index 100% rename from src/tests/data/polygon_attribute.vtp rename to tests/data/polygon_attribute.vtp diff --git a/src/tests/data/polyhedron_attribute.vtu b/tests/data/polyhedron_attribute.vtu similarity index 100% rename from src/tests/data/polyhedron_attribute.vtu rename to tests/data/polyhedron_attribute.vtu diff --git a/src/tests/data/take_screenshot_with_background.jpg b/tests/data/take_screenshot_with_background.jpg similarity index 100% rename from src/tests/data/take_screenshot_with_background.jpg rename to tests/data/take_screenshot_with_background.jpg diff --git a/src/tests/data/take_screenshot_with_background.png b/tests/data/take_screenshot_with_background.png similarity index 100% rename from src/tests/data/take_screenshot_with_background.png rename to tests/data/take_screenshot_with_background.png diff --git a/src/tests/data/take_screenshot_without_background.png b/tests/data/take_screenshot_without_background.png similarity index 100% rename from src/tests/data/take_screenshot_without_background.png rename to tests/data/take_screenshot_without_background.png diff --git a/src/tests/data/vertex_attribute.vtp b/tests/data/vertex_attribute.vtp similarity index 100% rename from src/tests/data/vertex_attribute.vtp rename to tests/data/vertex_attribute.vtp diff --git a/src/tests/data/verts.vtp b/tests/data/verts.vtp similarity index 100% rename from src/tests/data/verts.vtp rename to tests/data/verts.vtp diff --git a/src/tests/mesh/edges/test_mesh_edges_protocols.py b/tests/mesh/edges/test_mesh_edges_protocols.py similarity index 100% rename from src/tests/mesh/edges/test_mesh_edges_protocols.py rename to tests/mesh/edges/test_mesh_edges_protocols.py diff --git a/src/tests/mesh/points/test_mesh_points_protocols.py b/tests/mesh/points/test_mesh_points_protocols.py similarity index 100% rename from src/tests/mesh/points/test_mesh_points_protocols.py rename to tests/mesh/points/test_mesh_points_protocols.py diff --git a/src/tests/mesh/polygons/test_mesh_polygons_protocols.py b/tests/mesh/polygons/test_mesh_polygons_protocols.py similarity index 100% rename from src/tests/mesh/polygons/test_mesh_polygons_protocols.py rename to tests/mesh/polygons/test_mesh_polygons_protocols.py diff --git a/src/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py b/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py similarity index 100% rename from src/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py rename to tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py diff --git a/src/tests/mesh/test_mesh_protocols.py b/tests/mesh/test_mesh_protocols.py similarity index 100% rename from src/tests/mesh/test_mesh_protocols.py rename to tests/mesh/test_mesh_protocols.py diff --git a/src/tests/model/blocks/test_model_blocks_protocols.py b/tests/model/blocks/test_model_blocks_protocols.py similarity index 100% rename from src/tests/model/blocks/test_model_blocks_protocols.py rename to tests/model/blocks/test_model_blocks_protocols.py diff --git a/src/tests/model/corners/test_model_corners_protocols.py b/tests/model/corners/test_model_corners_protocols.py similarity index 100% rename from src/tests/model/corners/test_model_corners_protocols.py rename to tests/model/corners/test_model_corners_protocols.py diff --git a/src/tests/model/edges/test_model_edges_protocols.py b/tests/model/edges/test_model_edges_protocols.py similarity index 100% rename from src/tests/model/edges/test_model_edges_protocols.py rename to tests/model/edges/test_model_edges_protocols.py diff --git a/src/tests/model/lines/test_model_lines_protocols.py b/tests/model/lines/test_model_lines_protocols.py similarity index 100% rename from src/tests/model/lines/test_model_lines_protocols.py rename to tests/model/lines/test_model_lines_protocols.py diff --git a/src/tests/model/points/test_model_points_protocols.py b/tests/model/points/test_model_points_protocols.py similarity index 100% rename from src/tests/model/points/test_model_points_protocols.py rename to tests/model/points/test_model_points_protocols.py diff --git a/src/tests/model/surfaces/test_model_surfaces_protocols.py b/tests/model/surfaces/test_model_surfaces_protocols.py similarity index 100% rename from src/tests/model/surfaces/test_model_surfaces_protocols.py rename to tests/model/surfaces/test_model_surfaces_protocols.py diff --git a/src/tests/model/test_model_protocols.py b/tests/model/test_model_protocols.py similarity index 100% rename from src/tests/model/test_model_protocols.py rename to tests/model/test_model_protocols.py diff --git a/src/tests/py.typed b/tests/py.typed similarity index 100% rename from src/tests/py.typed rename to tests/py.typed diff --git a/src/tests/test_generic_protocols.py b/tests/test_generic_protocols.py similarity index 100% rename from src/tests/test_generic_protocols.py rename to tests/test_generic_protocols.py diff --git a/src/tests/test_viewer_protocols.py b/tests/test_viewer_protocols.py similarity index 100% rename from src/tests/test_viewer_protocols.py rename to tests/test_viewer_protocols.py diff --git a/tests/tests_output/edged_curve_visibility.jpeg b/tests/tests_output/edged_curve_visibility.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..35b6a3d48a33a5b247cedb58137770255ba7d5f3 GIT binary patch literal 1072 zcmeH^I}XAy5JYFZ0!4_zmf!$Tr%ay$DH2=?ZW7LdI0T=DBXEOd9R-m@N+?pox>|d@ zpLu%G2mG$s79auIf!?vPY+S@5<0{y1Js~7anF`l%ffA@^EUQt`jG0|8;sWi^8|Fed zFWz=5pY7LQ&-T$Y-!<)MrX^-2CoU_aB6JmpN+D#kGx3MEd{$ literal 0 HcmV?d00001 diff --git a/tests/tests_output/test.jpeg b/tests/tests_output/test.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..59741274f5be4799143b90b565b74644c10fedda GIT binary patch literal 4237 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 literal 0 HcmV?d00001 diff --git a/tests/tests_output/test.jpg b/tests/tests_output/test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b490cfc531dea2276a37cc744dc653f6eae4dafe GIT binary patch literal 6339 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 literal 0 HcmV?d00001 diff --git a/tests/tests_output/test.png b/tests/tests_output/test.png new file mode 100644 index 0000000000000000000000000000000000000000..6dcfc0baa41a2bc42fdd63ba455d75aa2ef90d3c GIT binary patch literal 8873 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 Z_%9yax{W>=r2DrzsFJ2)oxD}#{{XrNA&&q6 literal 0 HcmV?d00001 From 2b0e040910136a7a89636c0f1178d9442b690c04 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Fri, 17 Oct 2025 12:48:38 +0200 Subject: [PATCH 2/4] fix --- .gitignore | 3 +-- tests/tests_output/edged_curve_visibility.jpeg | Bin 1072 -> 0 bytes tests/tests_output/test.jpeg | Bin 4237 -> 0 bytes tests/tests_output/test.jpg | Bin 6339 -> 0 bytes tests/tests_output/test.png | Bin 8873 -> 0 bytes 5 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 tests/tests_output/edged_curve_visibility.jpeg delete mode 100644 tests/tests_output/test.jpeg delete mode 100644 tests/tests_output/test.jpg delete mode 100644 tests/tests_output/test.png diff --git a/.gitignore b/.gitignore index 96a1133b..04053a60 100644 --- a/.gitignore +++ b/.gitignore @@ -7,10 +7,9 @@ __pycache__/ /node_modules latest_logs build -/src/tests/tests_output/ *.egg-info .coverage* .mypy_cache *.db - +tests/tests_output/ opengeodeweb_viewer_schemas.json \ No newline at end of file diff --git a/tests/tests_output/edged_curve_visibility.jpeg b/tests/tests_output/edged_curve_visibility.jpeg deleted file mode 100644 index 35b6a3d48a33a5b247cedb58137770255ba7d5f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1072 zcmeH^I}XAy5JYFZ0!4_zmf!$Tr%ay$DH2=?ZW7LdI0T=DBXEOd9R-m@N+?pox>|d@ zpLu%G2mG$s79auIf!?vPY+S@5<0{y1Js~7anF`l%ffA@^EUQt`jG0|8;sWi^8|Fed zFWz=5pY7LQ&-T$Y-!<)MrX^-2CoU_aB6JmpN+D#kGx3MEd{$ diff --git a/tests/tests_output/test.jpeg b/tests/tests_output/test.jpeg deleted file mode 100644 index 59741274f5be4799143b90b565b74644c10fedda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4237 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 diff --git a/tests/tests_output/test.jpg b/tests/tests_output/test.jpg deleted file mode 100644 index b490cfc531dea2276a37cc744dc653f6eae4dafe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6339 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 diff --git a/tests/tests_output/test.png b/tests/tests_output/test.png deleted file mode 100644 index 6dcfc0baa41a2bc42fdd63ba455d75aa2ef90d3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8873 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 Z_%9yax{W>=r2DrzsFJ2)oxD}#{{XrNA&&q6 From d65536b0f3adb346471f05d5ecb5c0c608a04128 Mon Sep 17 00:00:00 2001 From: BotellaA <3213882+BotellaA@users.noreply.github.com> Date: Fri, 17 Oct 2025 10:50:00 +0000 Subject: [PATCH 3/4] Apply prepare changes --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 28124d6d..065674ac 100644 --- a/requirements.txt +++ b/requirements.txt @@ -61,4 +61,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.0.5 From b230b3abb730ca997ff1b1ed4670142835090734 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Fri, 17 Oct 2025 12:58:18 +0200 Subject: [PATCH 4/4] remove useless file --- .../vtk_override_protocols.py | 349 ------------------ 1 file changed, 349 deletions(-) delete mode 100644 src/opengeodeweb_viewer/vtk_override_protocols.py diff --git a/src/opengeodeweb_viewer/vtk_override_protocols.py b/src/opengeodeweb_viewer/vtk_override_protocols.py deleted file mode 100644 index 09a8205a..00000000 --- a/src/opengeodeweb_viewer/vtk_override_protocols.py +++ /dev/null @@ -1,349 +0,0 @@ -import base64, time - -from vtk.web import protocols as vtk_protocols - -# import Twisted reactor for later callback -from twisted.internet import reactor - -# from autobahn.wamp import register as exportRpc -from wslink import register as exportRpc - -# ============================================================================= -# -# Provide publish-based Image delivery mechanism -# -# ============================================================================= - - -class vtkWebPublishImageDelivery(vtk_protocols.vtkWebProtocol): - def __init__(self, decode=True): - super(vtkWebPublishImageDelivery, self).__init__() - self.trackingViews = {} - self.lastStaleTime = 0 - self.staleHandlerCount = 0 - self.deltaStaleTimeBeforeRender = 0.5 # 0.5s - self.decode = decode - self.viewsInAnimations = [] - self.targetFrameRate = 30.0 - self.minFrameRate = 12.0 - self.maxFrameRate = 30.0 - - def pushRender(self, vId, ignoreAnimation=False): - if vId not in self.trackingViews: - return - - if not self.trackingViews[vId]["enabled"]: - return - - if not ignoreAnimation and len(self.viewsInAnimations) > 0: - return - - if "originalSize" not in self.trackingViews[vId]: - view = self.getView(vId) - self.trackingViews[vId]["originalSize"] = list(view.GetSize()) - - if "ratio" not in self.trackingViews[vId]: - self.trackingViews[vId]["ratio"] = 1 - - ratio = self.trackingViews[vId]["ratio"] - mtime = self.trackingViews[vId]["mtime"] - quality = self.trackingViews[vId]["quality"] - size = [int(s * ratio) for s in self.trackingViews[vId]["originalSize"]] - - reply = self.stillRender( - {"view": vId, "mtime": mtime, "quality": quality, "size": size} - ) - stale = reply["stale"] - if reply["image"]: - # depending on whether the app has encoding enabled: - if self.decode: - reply["image"] = base64.standard_b64decode(reply["image"]) - - reply["image"] = self.addAttachment(reply["image"]) - reply["format"] = "jpeg" - # save mtime for next call. - self.trackingViews[vId]["mtime"] = reply["mtime"] - # echo back real ID, instead of -1 for 'active' - reply["id"] = vId - self.publish("viewport.image.push.subscription", reply) - if stale: - self.lastStaleTime = time.time() - if self.staleHandlerCount == 0: - self.staleHandlerCount += 1 - reactor.callLater( - self.deltaStaleTimeBeforeRender, lambda: self.renderStaleImage(vId) - ) - else: - self.lastStaleTime = 0 - - def renderStaleImage(self, vId): - self.staleHandlerCount -= 1 - - if self.lastStaleTime != 0: - delta = time.time() - self.lastStaleTime - if delta >= self.deltaStaleTimeBeforeRender: - self.pushRender(vId) - else: - self.staleHandlerCount += 1 - reactor.callLater( - self.deltaStaleTimeBeforeRender - delta + 0.001, - lambda: self.renderStaleImage(vId), - ) - - def animate(self): - if len(self.viewsInAnimations) == 0: - return - - nextAnimateTime = time.time() + 1.0 / self.targetFrameRate - for vId in self.viewsInAnimations: - self.pushRender(vId, True) - - nextAnimateTime -= time.time() - - if self.targetFrameRate > self.maxFrameRate: - self.targetFrameRate = self.maxFrameRate - - if nextAnimateTime < 0: - if nextAnimateTime < -1.0: - self.targetFrameRate = 1 - if self.targetFrameRate > self.minFrameRate: - self.targetFrameRate -= 1.0 - reactor.callLater(0.001, lambda: self.animate()) - else: - if self.targetFrameRate < self.maxFrameRate and nextAnimateTime > 0.005: - self.targetFrameRate += 1.0 - reactor.callLater(nextAnimateTime, lambda: self.animate()) - - @exportRpc("viewport.image.animation.fps.max") - def setMaxFrameRate(self, fps=30): - self.maxFrameRate = fps - - @exportRpc("viewport.image.animation.fps.get") - def getCurrentFrameRate(self): - return self.targetFrameRate - - @exportRpc("viewport.image.animation.start") - def startViewAnimation(self, viewId="-1"): - sView = self.getView(viewId) - realViewId = str(self.getGlobalId(sView)) - - self.viewsInAnimations.append(realViewId) - if len(self.viewsInAnimations) == 1: - self.animate() - - @exportRpc("viewport.image.animation.stop") - def stopViewAnimation(self, viewId="-1"): - sView = self.getView(viewId) - realViewId = str(self.getGlobalId(sView)) - - if realViewId in self.viewsInAnimations: - self.viewsInAnimations.remove(realViewId) - - @exportRpc("viewport.image.push") - def imagePush(self, options): - sView = self.getView(options["view"]) - realViewId = str(self.getGlobalId(sView)) - # Make sure an image is pushed - self.getApplication().InvalidateCache(sView) - self.pushRender(realViewId) - - # Internal function since the reply[image] is not - # JSON(serializable) it can not be an RPC one - def stillRender(self, options): - """ - RPC Callback to render a view and obtain the rendered image. - """ - beginTime = int(round(time.time() * 1000)) - view = self.getView(options["view"]) - size = view.GetSize()[0:2] - resize = size != options.get("size", size) - if resize: - size = options["size"] - if size[0] > 10 and size[1] > 10: - view.SetSize(size) - t = 0 - if options and "mtime" in options: - t = options["mtime"] - quality = 100 - if options and "quality" in options: - quality = options["quality"] - localTime = 0 - if options and "localTime" in options: - localTime = options["localTime"] - reply = {} - app = self.getApplication() - if t == 0: - app.InvalidateCache(view) - if self.decode: - stillRender = app.StillRenderToString - else: - stillRender = app.StillRenderToBuffer - reply_image = stillRender(view, t, quality) - - # Check that we are getting image size we have set if not wait until we - # do. The render call will set the actual window size. - tries = 10 - while resize and list(view.GetSize()) != size and size != [0, 0] and tries > 0: - app.InvalidateCache(view) - reply_image = stillRender(view, t, quality) - tries -= 1 - - if ( - not resize - and options - and ("clearCache" in options) - and options["clearCache"] - ): - app.InvalidateCache(view) - reply_image = stillRender(view, t, quality) - - reply["stale"] = app.GetHasImagesBeingProcessed(view) - reply["mtime"] = app.GetLastStillRenderToMTime() - reply["size"] = view.GetSize()[0:2] - reply["memsize"] = reply_image.GetDataSize() if reply_image else 0 - reply["format"] = "jpeg;base64" if self.decode else "jpeg" - reply["global_id"] = str(self.getGlobalId(view)) - reply["localTime"] = localTime - if self.decode: - reply["image"] = reply_image - else: - # Convert the vtkUnsignedCharArray into a bytes object, required by Autobahn websockets - reply["image"] = memoryview(reply_image).tobytes() if reply_image else None - - endTime = int(round(time.time() * 1000)) - reply["workTime"] = endTime - beginTime - - return reply - - @exportRpc("viewport.image.push.observer.add") - def addRenderObserver(self, viewId): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - - if not realViewId in self.trackingViews: - observerCallback = lambda *args, **kwargs: self.pushRender(realViewId) - startCallback = lambda *args, **kwargs: self.startViewAnimation(realViewId) - stopCallback = lambda *args, **kwargs: self.stopViewAnimation(realViewId) - tag = self.getApplication().AddObserver("UpdateEvent", observerCallback) - tagStart = self.getApplication().AddObserver( - "StartInteractionEvent", startCallback - ) - tagStop = self.getApplication().AddObserver( - "EndInteractionEvent", stopCallback - ) - # TODO do we need self.getApplication().AddObserver('ResetActiveView', resetActiveView()) - self.trackingViews[realViewId] = { - "tags": [tag, tagStart, tagStop], - "observerCount": 1, - "mtime": 0, - "enabled": True, - "quality": 100, - } - else: - # There is an observer on this view already - self.trackingViews[realViewId]["observerCount"] += 1 - - self.pushRender(realViewId) - return {"success": True, "viewId": realViewId} - - @exportRpc("viewport.image.push.observer.remove") - def removeRenderObserver(self, viewId): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - - observerInfo = None - if realViewId in self.trackingViews: - observerInfo = self.trackingViews[realViewId] - - if not observerInfo: - return {"error": "Unable to find subscription for view %s" % realViewId} - - observerInfo["observerCount"] -= 1 - - if observerInfo["observerCount"] <= 0: - for tag in observerInfo["tags"]: - self.getApplication().RemoveObserver(tag) - del self.trackingViews[realViewId] - - return {"result": "success"} - - @exportRpc("viewport.image.push.quality") - def setViewQuality(self, viewId, quality, ratio=1): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - observerInfo = None - if realViewId in self.trackingViews: - observerInfo = self.trackingViews[realViewId] - - if not observerInfo: - return {"error": "Unable to find subscription for view %s" % realViewId} - - observerInfo["quality"] = quality - observerInfo["ratio"] = ratio - - # Update image size right now! - if "originalSize" in self.trackingViews[realViewId]: - size = [ - int(s * ratio) for s in self.trackingViews[realViewId]["originalSize"] - ] - if hasattr(sView, "SetSize"): - sView.SetSize(size) - else: - sView.ViewSize = size - - return {"result": "success"} - - @exportRpc("viewport.image.push.original.size") - def setViewSize(self, viewId, width, height): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - observerInfo = None - if realViewId in self.trackingViews: - observerInfo = self.trackingViews[realViewId] - - if not observerInfo: - return {"error": "Unable to find subscription for view %s" % realViewId} - - observerInfo["originalSize"] = [width, height] - - return {"result": "success"} - - @exportRpc("viewport.image.push.enabled") - def enableView(self, viewId, enabled): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - observerInfo = None - if realViewId in self.trackingViews: - observerInfo = self.trackingViews[realViewId] - - if not observerInfo: - return {"error": "Unable to find subscription for view %s" % realViewId} - - observerInfo["enabled"] = enabled - - return {"result": "success"} - - @exportRpc("viewport.image.push.invalidate.cache") - def invalidateCache(self, viewId): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - self.getApplication().InvalidateCache(sView) - self.getApplication().InvokeEvent("UpdateEvent") - return {"result": "success"}