"""Tests de l'export PDF (planche d'impression terrain).""" import pytest def test_layout_landscape_a4_dimensions(): from lidar_pipeline.export_pdf import layout lay = layout("A4", "paysage", 2000) assert (lay.page_w, lay.page_h) == (297.0, 210.0) and lay.dpi == 300 assert lay.map_w > 150 and lay.map_h > 150 assert lay.panel_x >= lay.map_x + lay.map_w # bandeau à droite assert lay.map_x + lay.map_w <= lay.page_w and lay.map_y + lay.map_h <= lay.page_h def test_layout_portrait_a3_panel_below(): from lidar_pipeline.export_pdf import layout lay = layout("A3", "portrait", 5000) assert (lay.page_w, lay.page_h) == (297.0, 420.0) and lay.dpi == 250 assert lay.panel_y + lay.panel_h <= lay.map_y # bandeau en bas @pytest.mark.parametrize("args", [("A5", "paysage", 2000), ("A4", "biais", 2000), ("A4", "paysage", 1234)]) def test_layout_rejects_invalid(args): from lidar_pipeline.export_pdf import layout with pytest.raises(ValueError): layout(*args) def test_map_bbox_matches_paper_times_scale(): from lidar_pipeline.export_pdf import layout, map_bbox lay = layout("A4", "paysage", 2000) b = map_bbox(652500.0, 6861500.0, lay) assert abs((b[2] - b[0]) - lay.map_w / 1000 * 2000) < 1e-6 assert abs((b[3] - b[1]) - lay.map_h / 1000 * 2000) < 1e-6 assert abs((b[0] + b[2]) / 2 - 652500.0) < 1e-6 def test_pixel_size_and_grid_step(): from lidar_pipeline.export_pdf import grid_step, layout, pixel_size assert pixel_size(layout("A4", "paysage", 1000)) == 0.2 # plafonné au natif assert abs(pixel_size(layout("A3", "paysage", 10000)) - 10000 * 0.0254 / 250) < 1e-9 assert [grid_step(s) for s in (1000, 2000, 5000, 10000)] == [100, 100, 500, 1000] def test_center_l93_rejects_non_finite(): from lidar_pipeline.export_pdf import center_l93 with pytest.raises(ValueError): center_l93(float("nan"), 2.0) def test_frame_roundtrip(): from lidar_pipeline.export_pdf import center_l93, frame lat, lon = 48.85, 2.35 f = frame(lat, lon, "A4", "paysage", 2000) cx, cy = center_l93(lat, lon) assert abs(f["cx"] - cx) < 1e-6 and abs(f["cy"] - cy) < 1e-6 assert len(f["corners"]) == 4 nw, ne, se, sw = f["corners"] assert nw[0] > sw[0] and ne[1] > nw[1] # [lat, lon] : nord en haut, est à droite assert f["width_m"] > f["height_m"] > 0 def test_export_modules_import_without_numpy(): import subprocess, sys code = ("import sys; sys.modules['numpy'] = None; " "import lidar_pipeline.export_pdf, lidar_pipeline.tiles; print('ok')") r = subprocess.run([sys.executable, "-c", code], capture_output=True, text=True) assert r.returncode == 0, r.stderr