Deux dictees ont ete transcrites correctement puis n'ont jamais atteint la zone de
saisie, sans la moindre erreur : inject_text avait bien envoye ses touches. Cause :
la hotkey Cmd+Ctrl+D etait encore enfoncee quand Zonza a simule Cmd+V. Le systeme a
recu Cmd+Ctrl+V, que l'application cible ignore. Le code croyait avoir reussi.
inject_text patiente donc jusqu'a ce qu'aucun modificateur physique ne soit enfonce
(drapeaux Quartz), au plus 2 s. Au-dela, il colle quand meme : mieux vaut un collage
douteux qu'une transcription perdue. Le delai du presse-papier passe de 0,05 a 0,12 s,
0,05 etant juste.
Et surtout, le collage se TRACE desormais ("[collage] ok" ou l'avertissement) : sans
cela, un echec futur resterait invisible dans le log, comme celui-ci l'a ete.
L'attente est une unite pure et bornee (core.attendre, horloge et sommeil injectables).
Detecteur verifie en conditions reelles : False au repos, retour immediat.
55 tests passent.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
"""Attente d'une condition avant le collage.
|
|
|
|
Bug du 2026-08-21 : deux dictees transcrites correctement n'ont jamais atteint la
|
|
zone de saisie. Aucune exception — les touches AVAIENT ete envoyees. Cause : la
|
|
hotkey Cmd+Ctrl+D etait encore enfoncee quand Zonza a simule Cmd+V ; le systeme a
|
|
recu Cmd+Ctrl+V, que l'application cible ignore.
|
|
|
|
D'ou une attente du relachement des modificateurs avant de coller. Bornee : si une
|
|
touche reste enfoncee (clavier bloque), on colle quand meme plutot que de perdre le
|
|
texte.
|
|
"""
|
|
from core import attendre
|
|
|
|
|
|
def test_condition_deja_vraie_ne_dort_pas():
|
|
sommeils = []
|
|
assert attendre(lambda: True, 1.0, 0.05, dormir=sommeils.append, horloge=lambda: 0.0) is True
|
|
assert sommeils == []
|
|
|
|
|
|
def test_condition_devient_vraie_apres_quelques_tours():
|
|
tours = {"n": 0}
|
|
def cond():
|
|
tours["n"] += 1
|
|
return tours["n"] >= 3
|
|
t = {"v": 0.0}
|
|
def horloge(): return t["v"]
|
|
def dormir(s): t["v"] += s
|
|
assert attendre(cond, 1.0, 0.05, dormir=dormir, horloge=horloge) is True
|
|
assert tours["n"] == 3
|
|
|
|
|
|
def test_rend_False_au_bout_du_temps_imparti():
|
|
t = {"v": 0.0}
|
|
def horloge(): return t["v"]
|
|
def dormir(s): t["v"] += s
|
|
assert attendre(lambda: False, 0.2, 0.05, dormir=dormir, horloge=horloge) is False
|
|
|
|
|
|
def test_le_temps_imparti_est_respecte():
|
|
t = {"v": 0.0}
|
|
dormis = []
|
|
def horloge(): return t["v"]
|
|
def dormir(s): t["v"] += s; dormis.append(s)
|
|
attendre(lambda: False, 0.2, 0.05, dormir=dormir, horloge=horloge)
|
|
assert sum(dormis) <= 0.25, "l'attente ne doit pas deborder"
|
|
|
|
|
|
def test_un_delai_nul_tente_quand_meme_une_fois():
|
|
essais = {"n": 0}
|
|
def cond():
|
|
essais["n"] += 1
|
|
return False
|
|
attendre(cond, 0.0, 0.05, dormir=lambda s: None, horloge=lambda: 0.0)
|
|
assert essais["n"] >= 1
|