"""La fabrique rend une implémentation conforme au contrat Systeme.""" import os import tempfile import pytest from systeme import choisir_systeme def test_la_fabrique_rend_une_implementation_complete(): s = choisir_systeme() for methode in ("jouer_son", "modificateurs_enfonces", "raccourci_defaut", "chemin_log", "dossier_donnees", "acquerir_verrou_instance"): assert callable(getattr(s, methode)), f"{methode} manque" def test_une_plateforme_inconnue_est_refusee_clairement(): with pytest.raises(NotImplementedError) as e: choisir_systeme(plateforme="haiku-os") assert "haiku-os" in str(e.value) def test_le_raccourci_macos_est_celui_d_aujourd_hui(): assert choisir_systeme(plateforme="darwin").raccourci_defaut() == "++d" def test_le_verrou_refuse_une_seconde_prise(): s = choisir_systeme() chemin = os.path.join(tempfile.mkdtemp(), "sous-dossier", "z.lock") # Référence gardée : sinon CPython ramasse l'objet fichier dès la fin de # l'assert (refcount à 0), ce qui referme le fichier et relâche le verrou # AVANT la seconde prise — le test passerait pour la mauvaise raison. verrou = s.acquerir_verrou_instance(chemin) assert verrou is not None assert s.acquerir_verrou_instance(chemin) is None def test_les_modificateurs_sont_lus_par_le_masque(): """La sonde est injectee : sans cela ce test lirait le CLAVIER PHYSIQUE et echouerait au hasard, selon qu'une touche est enfoncee ou non pendant la suite. C'est arrive le 2026-08-23.""" from systeme.macos import SystemeMacOS assert SystemeMacOS(sonde_modificateurs=lambda: 0x00000000).modificateurs_enfonces() is False # chaque modificateur, un par un, depuis les constantes nommees from Quartz import (kCGEventFlagMaskAlternate, kCGEventFlagMaskCommand, kCGEventFlagMaskControl, kCGEventFlagMaskShift) for drapeau in (kCGEventFlagMaskShift, kCGEventFlagMaskControl, kCGEventFlagMaskAlternate, kCGEventFlagMaskCommand): assert SystemeMacOS(sonde_modificateurs=lambda d=drapeau: d).modificateurs_enfonces() is True def test_une_sonde_qui_leve_ne_bloque_jamais_le_collage(): from systeme.macos import SystemeMacOS def sonde_cassee(): raise RuntimeError("Quartz indisponible") assert SystemeMacOS(sonde_modificateurs=sonde_cassee).modificateurs_enfonces() is False def test_le_masque_couvre_command(): """Command etait ABSENT du masque ecrit a la main : Zonza ne voyait jamais cette touche, pourtant celle de son propre raccourci.""" from Quartz import kCGEventFlagMaskCommand from systeme.macos import _MASQUE_MODIFICATEURS assert kCGEventFlagMaskCommand & _MASQUE_MODIFICATEURS def test_la_sonde_reelle_rend_un_booleen_sans_lever(): """On n'affirme PAS sa valeur : elle depend du clavier de l'utilisateur.""" assert isinstance(choisir_systeme().modificateurs_enfonces(), bool)