"""gitea:Adriano/TieMeasureFlow#96 - l'immagine del task visione sta in fit, senza scorrimento. Controllo sulle classi del template: pannello overflow-hidden, img/canvas object-contain sovrapposti, nessun h-auto sull'immagine (era la causa dello scorrimento). """ from pathlib import Path TEMPLATE = Path(__file__).resolve().parents[1] / "templates" / "measure" / "task_execute.html" def _panel(): src = TEMPLATE.read_text(encoding="utf-8") start = src.rindex("' dentro le virgolette (es. "=>") non lo chiudono. pos = panel.index(marker) i = panel.rindex("<", 0, pos) quote = None for j in range(i, len(panel)): c = panel[j] if quote: quote = None if c == quote else quote elif c in "\"'": quote = c elif c == ">": return panel[i:j + 1] raise AssertionError(marker) def test_panel_does_not_scroll(): tag = _tag_with(_panel(), 'x-data="visionExecute()"') assert "overflow-hidden" in tag and "min-h-0" in tag assert "overflow-auto" not in tag def test_image_is_object_contain_without_h_auto(): panel = _panel() img = _tag_with(panel, 'x-ref="img"') assert "object-contain" in img assert "h-auto" not in img canvas = _tag_with(panel, 'x-ref="overlay"') assert "object-contain" in canvas # stesso fit dell'img: overlay allineato def test_zoom_viewport_scrolls_inside_the_box(): # #115: il riquadro resta overflow-hidden (il pannello non scorre); lo scorrimento e' solo del viewport interno panel = _panel() vp = _tag_with(panel, 'x-ref="vp"') assert "absolute" in vp and "inset-0" in vp assert "overflow:auto" in vp # :style stringa del viewport assert 'style="' not in vp.replace(':style="', "") # niente style statico accanto a :style (Alpine lo cancella) assert "x-show" not in vp # mai x-show e :style stringa sullo stesso elemento assert "zSize()" in panel # wrapper naturale x zoom def test_image_box_and_outcome_column_can_shrink(): panel = _panel() box = _tag_with(panel, 'x-show="shownImage"') assert "flex-1" in box and "min-h-0" in box outcome = _tag_with(panel, 'x-show="result">') assert "overflow-y-auto" in outcome and "min-h-0" in outcome def test_quote_table_shows_nominal_and_tolerances(): # #117: la tabella quote del pannello mostra nominale e tolleranze come la schermata dei calibri panel = _panel() for marker in ("fmtTol(r.nominal)", "fmtTol(r.ltl)", "fmtTol(r.utl)", "fmtTol(r.lwl)", "fmtTol(r.uwl)"): assert marker in panel, marker assert "text-measure-fail" in panel and "text-measure-warning" in panel