Skip to content

Commit 98fdc2b

Browse files
authored
test: faux module gi limité au test (monkeypatch.setitem), plus de pollution de sys.modules (#79)
1 parent a04b1f5 commit 98fdc2b

1 file changed

Lines changed: 15 additions & 9 deletions

File tree

‎tests/test_gtk_i18n_translations.py‎

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,45 +108,51 @@ def __init_subclass__(cls, **kwargs):
108108
pass
109109

110110

111-
def _install_gi_stub() -> None:
111+
def _install_gi_stub(monkeypatch) -> None:
112+
"""Installe le faux `gi` le temps d'un test seulement.
113+
114+
`monkeypatch.setitem` restaure les vrais modules à la fin du test :
115+
écrire directement dans `sys.modules` laissait le faux `gi` en place
116+
pour tout le reste de la session, et cassait les tests GUI exécutés
117+
ensuite quand PyGObject est réellement installé
118+
(« cannot import name 'events' from 'gi' »).
119+
"""
112120
gi_mock = types.ModuleType("gi")
113121
gi_mock.require_version = lambda *a, **k: None
114122
repo_mock = types.ModuleType("gi.repository")
115123
for name in ("Gdk", "Gio", "GLib", "Gtk", "Pango"):
116124
setattr(repo_mock, name, _StubClass)
117125
gi_mock.repository = repo_mock
118-
sys.modules["gi"] = gi_mock
119-
sys.modules["gi.repository"] = repo_mock
126+
monkeypatch.setitem(sys.modules, "gi", gi_mock)
127+
monkeypatch.setitem(sys.modules, "gi.repository", repo_mock)
120128

121129

122130
@pytest.fixture()
123131
def gtk_module_en(monkeypatch):
124132
"""Importe `switch_capture_gtk` avec `gi` mocké et `en_US` forcé, indépendamment de l'environnement réel."""
125-
_install_gi_stub()
133+
_install_gi_stub(monkeypatch)
126134
real_translation = gettext.translation
127135

128136
def _patched(domain, localedir=None, languages=None, fallback=False):
129137
return real_translation(domain, localedir=localedir, languages=["en_US"], fallback=fallback)
130138

131139
monkeypatch.setattr(gettext, "translation", _patched)
132-
sys.modules.pop("switch_capture_gtk", None)
140+
monkeypatch.delitem(sys.modules, "switch_capture_gtk", raising=False)
133141
import switch_capture_gtk as module
134142

135143
yield module
136-
sys.modules.pop("switch_capture_gtk", None)
137144

138145

139146
@pytest.fixture()
140147
def gtk_module_default(monkeypatch):
141148
"""Importe `switch_capture_gtk` avec `gi` mocké, sans variable de langue forcée (repli français attendu)."""
142-
_install_gi_stub()
149+
_install_gi_stub(monkeypatch)
143150
for var in ("LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG"):
144151
monkeypatch.delenv(var, raising=False)
145-
sys.modules.pop("switch_capture_gtk", None)
152+
monkeypatch.delitem(sys.modules, "switch_capture_gtk", raising=False)
146153
import switch_capture_gtk as module
147154

148155
yield module
149-
sys.modules.pop("switch_capture_gtk", None)
150156

151157

152158
# --------------------------------------------------------------------- #

0 commit comments

Comments
 (0)