diff --git a/test/test_assistant_claude_sessions.py b/test/test_assistant_claude_sessions.py index 97c9478..cb439d9 100644 --- a/test/test_assistant_claude_sessions.py +++ b/test/test_assistant_claude_sessions.py @@ -31,6 +31,7 @@ from __future__ import annotations import json import os +import subprocess import sys import tempfile import unittest @@ -323,7 +324,23 @@ class LaFrontiere(unittest.TestCase): """Le paquet doit rester importable sans le CLI.""" def test_le_listage_n_importe_pas_todo(self): - self.assertNotIn("script.todo.todo", sys.modules) + # Dans un interpréteur NEUF : la suite complète importe todo par + # ailleurs, et le sys.modules de ce processus en garderait la trace + # quel que soit le module éprouvé ici. + sortie = subprocess.run( + [ + sys.executable, + "-c", + "import sys, script.todo.assistant.claude_sessions;" + " print('script.todo.todo' in sys.modules)", + ], + cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + capture_output=True, + text=True, + timeout=60, + ) + self.assertEqual(sortie.returncode, 0, sortie.stderr) + self.assertEqual(sortie.stdout.strip(), "False") if __name__ == "__main__": diff --git a/test/test_assistant_context.py b/test/test_assistant_context.py index 1000848..ba61c5b 100644 --- a/test/test_assistant_context.py +++ b/test/test_assistant_context.py @@ -25,6 +25,7 @@ qu'il porte. from __future__ import annotations import os +import subprocess import sys import tempfile import unittest @@ -344,7 +345,23 @@ class LaFrontiere(unittest.TestCase): """Le paquet doit rester importable sans le CLI.""" def test_le_contexte_n_importe_pas_todo(self): - self.assertNotIn("script.todo.todo", sys.modules) + # Dans un interpréteur NEUF : la suite complète importe todo par + # ailleurs, et le sys.modules de ce processus en garderait la trace + # quel que soit le module éprouvé ici. + sortie = subprocess.run( + [ + sys.executable, + "-c", + "import sys, script.todo.assistant.context;" + " print('script.todo.todo' in sys.modules)", + ], + cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + capture_output=True, + text=True, + timeout=60, + ) + self.assertEqual(sortie.returncode, 0, sortie.stderr) + self.assertEqual(sortie.stdout.strip(), "False") if __name__ == "__main__": diff --git a/test/test_assistant_gpt_loader.py b/test/test_assistant_gpt_loader.py index 169d56e..01e5dce 100644 --- a/test/test_assistant_gpt_loader.py +++ b/test/test_assistant_gpt_loader.py @@ -24,6 +24,7 @@ temporaires, et le répertoire personnel est détourné là où il compte. from __future__ import annotations import os +import subprocess import sys import tempfile import unittest @@ -394,7 +395,23 @@ class LaFrontiere(unittest.TestCase): """Le paquet doit rester importable sans le CLI.""" def test_le_chargeur_n_importe_pas_todo(self): - self.assertNotIn("script.todo.todo", sys.modules) + # Dans un interpréteur NEUF : la suite complète importe todo par + # ailleurs, et le sys.modules de ce processus en garderait la trace + # quel que soit le module éprouvé ici. + sortie = subprocess.run( + [ + sys.executable, + "-c", + "import sys, script.todo.assistant.gpt;" + " print('script.todo.todo' in sys.modules)", + ], + cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + capture_output=True, + text=True, + timeout=60, + ) + self.assertEqual(sortie.returncode, 0, sortie.stderr) + self.assertEqual(sortie.stdout.strip(), "False") if __name__ == "__main__": diff --git a/test/test_assistant_hosts.py b/test/test_assistant_hosts.py index 3a93ed6..c2c82b3 100644 --- a/test/test_assistant_hosts.py +++ b/test/test_assistant_hosts.py @@ -40,6 +40,7 @@ niveau `.invalid` est réservé à cet usage, et « azurite », « obsidienne » import os import re +import subprocess import sys import unittest @@ -317,7 +318,23 @@ class LaFrontiere(unittest.TestCase): def test_les_sources_ne_tirent_pas_todo(self): """Importer `script.todo.todo` coûte près d'une seconde et imprime sur la sortie : le paquet doit rester importable seul.""" - self.assertNotIn("script.todo.todo", sys.modules) + # Dans un interpréteur NEUF : la suite complète importe todo par + # ailleurs, et le sys.modules de ce processus en garderait la trace + # quel que soit le module éprouvé ici. + sortie = subprocess.run( + [ + sys.executable, + "-c", + "import sys, script.todo.assistant.discover;" + " print('script.todo.todo' in sys.modules)", + ], + cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + capture_output=True, + text=True, + timeout=60, + ) + self.assertEqual(sortie.returncode, 0, sortie.stderr) + self.assertEqual(sortie.stdout.strip(), "False") def test_aucun_analyseur_de_config_ssh_n_est_reecrit_ici(self): """`ssh -G` a raison sur les `Include`, les `Match`, l'héritage des diff --git a/test/test_assistant_servers.py b/test/test_assistant_servers.py index 3d89752..1a62658 100644 --- a/test/test_assistant_servers.py +++ b/test/test_assistant_servers.py @@ -28,6 +28,7 @@ n'y paraissent nulle part. """ import os +import subprocess import sys import unittest from pathlib import Path @@ -285,7 +286,23 @@ class LaFrontiere(unittest.TestCase): def test_le_registre_ne_tire_pas_todo(self): """Importer `script.todo.todo` coûte près d'une seconde et imprime sur la sortie : le paquet doit rester importable seul.""" - self.assertNotIn("script.todo.todo", sys.modules) + # Dans un interpréteur NEUF : la suite complète importe todo par + # ailleurs, et le sys.modules de ce processus en garderait la trace + # quel que soit le module éprouvé ici. + sortie = subprocess.run( + [ + sys.executable, + "-c", + "import sys, script.todo.assistant.servers;" + " print('script.todo.todo' in sys.modules)", + ], + cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + capture_output=True, + text=True, + timeout=60, + ) + self.assertEqual(sortie.returncode, 0, sortie.stderr) + self.assertEqual(sortie.stdout.strip(), "False") if __name__ == "__main__": diff --git a/test/test_assistant_sweep.py b/test/test_assistant_sweep.py index d5ff2e1..88a1e14 100644 --- a/test/test_assistant_sweep.py +++ b/test/test_assistant_sweep.py @@ -35,6 +35,7 @@ paraissent nulle part ailleurs dans le dépôt. import os import re +import subprocess import sys import time import unittest @@ -354,7 +355,23 @@ class LaFrontiere(unittest.TestCase): def test_le_balayage_ne_tire_pas_todo(self): """Importer `script.todo.todo` coûte près d'une seconde et imprime sur la sortie : le paquet doit rester importable seul.""" - self.assertNotIn("script.todo.todo", sys.modules) + # Dans un interpréteur NEUF : la suite complète importe todo par + # ailleurs, et le sys.modules de ce processus en garderait la trace + # quel que soit le module éprouvé ici. + sortie = subprocess.run( + [ + sys.executable, + "-c", + "import sys, script.todo.assistant.discover, script.todo.assistant.fingerprint;" + " print('script.todo.todo' in sys.modules)", + ], + cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + capture_output=True, + text=True, + timeout=60, + ) + self.assertEqual(sortie.returncode, 0, sortie.stderr) + self.assertEqual(sortie.stdout.strip(), "False") def test_aucun_asyncio_du_depot_n_est_utilise(self): """`AsyncioPool` enveloppe des sous-processus et non des sockets, et