"""Test della pagina a due tab (#91): contenuto statico di PAGINA, senza servizio.""" import importlib.util import re from pathlib import Path _FILE = Path(__file__).resolve().parents[1] / "calibrazione_pagina.py" _spec = importlib.util.spec_from_file_location("calibrazione_pagina_tab", _FILE) _mod = importlib.util.module_from_spec(_spec) _spec.loader.exec_module(_mod) PAGINA = _mod.PAGINA def test_due_tab_con_ruolo_e_selezione(): assert re.search(r'" in PAGINA and ">Calibrazione" in PAGINA assert 'role="tablist"' in PAGINA and 'role="tabpanel"' in PAGINA assert 'aria-selected", cal ?' in PAGINA # la selezione cambia da JS assert '"tmf.acq.tab"' in PAGINA # tab scelta ricordata (via memoria(), protetta) def test_anteprima_fuori_dai_pannelli(): # l'anteprima sta nella colonna sinistra, prima dei due pannelli: visibile in entrambe le tab i_ant = PAGINA.index('id="sezioneAnteprima"') i_acq = PAGINA.index('id="pannelloAcq"') i_cal = PAGINA.index('id="pannelloCal"') assert i_ant < i_acq < i_cal # Sorgente e Parametri nel pannello Acquisizione, la calibrazione in quello Calibrazione assert i_acq < PAGINA.index('id="sezioneSorgente"') < PAGINA.index('id="sezioneParametri"') < i_cal assert PAGINA.index('id="sezioneCalibrazione"') > i_cal def test_id_del_pannello_calibrazione(): ids = set(re.findall(r'id="([^"]+)"', PAGINA)) attesi = {"calSorgente", "origSorgente", "origFile", "scegliFile", "file", "quadrato", "acquisisci", "nomeCal", "salva", "msgSalva", "calibrazioni", "msgElenco", "stato", "risultato", "overlay"} assert attesi <= ids, attesi - ids usati = set(re.findall(r'\$\("([^"]+)"\)', PAGINA)) assert usati <= ids, usati - ids assert len(re.findall(r'id="([^"]+)"', PAGINA)) == len(ids) # nessun id doppio def test_testi_del_pannello(): for testo in ("Sorgente selezionata", "Immagine da file", "Scegli immagine...", "Calcola", "Calibrazioni salvate", "si cambia nella tab Acquisizione", "risoluzione diversa", "Carica", "Elimina", "Scollega", "Sovrascrivi «", "Clic ancora", "Nome"): assert testo in PAGINA, testo def test_rotte_del_contratto(): for rotta in ("/camera/calibrazioni", "/camera/calibrazione-attiva", "/camera/calibrate", "/camera/calibration?source="): assert '"' + rotta in PAGINA, rotta for parola in ("calcolo_id", "sovrascrivi", "method: \"PUT\"", "method: \"DELETE\"", "X-Larghezza", "X-Altezza"): assert parola in PAGINA, parola # il calcolo non salva piu': il campo save sparisce assert 'append("save"' not in PAGINA def test_nessuna_finestra_del_browser_e_offline(): for vietato in ("alert(", "confirm(", "prompt(", "http://", "https://"): assert vietato not in PAGINA, vietato def test_acquisizione_di_87_90_conservata(): # anteprima, indicatori, mirino, grezzo, parametri camera e ciclo a 100 ms restano for parola in ("Parametri camera", "Immagine grezza (senza correzione)", "Mirino centrale", "Math.max(100 - (Date.now() - t0), 0)", "/camera/anteprima", "/camera/parametri"): assert parola in PAGINA, parola def test_pagina_stretta(): assert "@media (max-width: 500px)" in PAGINA assert "overflow-x: auto" in PAGINA # l'elenco scorre di lato invece di rompere la pagina