diff --git a/tests/unit/test_build_specs_torch_free.py b/tests/unit/test_build_specs_torch_free.py index db144e3..cf71983 100644 --- a/tests/unit/test_build_specs_torch_free.py +++ b/tests/unit/test_build_specs_torch_free.py @@ -22,18 +22,21 @@ FORBIDDEN_HIDDEN = ("optimum", "torch", "torchvision", "doctr") REQUIRED_EXCLUDES = ("torch", "torchvision", "optimum", "doctr") -def _hiddenimport_strings(text): +def _hiddenimport_strings(text, spec_name): """Retourne les chaînes littérales présentes dans la section hiddenimports=[...]. - On extrait uniquement la portion du texte entre `hiddenimports = [` et le `]` - de fermeture correspondant (premier `]` sur une ligne seule), afin d'éviter - les faux positifs générés par le bloc EXCLUDED_TORCH_STACK lui-même qui - contient légitimement "torch", "optimum", etc. comme valeurs d'exclusion. + On extrait la portion entre `hiddenimports = [` et le PREMIER `]` rencontré + où qu'il soit (`[^\\]]*` ne gère pas l'imbrication : un `]` dans un + commentaire au sein de la liste tronquerait le bloc — acceptable ici, les + specs n'en contiennent pas). Cette restriction évite les faux positifs du + bloc EXCLUDED_TORCH_STACK qui contient légitimement "torch", "optimum", etc. + + Garde-fou : si le bloc hiddenimports est introuvable (renommage, refonte de + la spec), on échoue BRUYAMMENT au lieu de retourner [] — sinon le test + passerait à vide sans plus rien vérifier. """ - # Cherche le bloc hiddenimports = [ ... ] match = re.search(r"hiddenimports\s*=\s*\[([^\]]*)\]", text, re.DOTALL) - if not match: - return [] + assert match is not None, f"bloc hiddenimports introuvable dans {spec_name}" block = match.group(1) return re.findall(r"[\"']([A-Za-z0-9_.]+)[\"']", block) @@ -42,7 +45,7 @@ def _hiddenimport_strings(text): def test_spec_sans_hiddenimport_torch_optimum_doctr(spec_path): text = spec_path.read_text(encoding="utf-8") hits = [ - s for s in _hiddenimport_strings(text) + s for s in _hiddenimport_strings(text, spec_path.name) if s.split(".")[0] in FORBIDDEN_HIDDEN ] assert hits == [], f"{spec_path.name} référence encore : {hits}"