test(ibus): cover socket-readiness timeout warning branch (#384)
Add a test for the for/else warning path in _setup_engine() introduced in PR #361: when all 15 socket-readiness poll attempts exhaust without SOCKET_PATH appearing, a WARNING is logged and activation is attempted anyway. The new test mocks time.sleep to avoid real delays and asserts the exact retry count (15) and log message. Fixes Codecov patch-coverage gap reported on #361.
This commit is contained in:
@@ -96,6 +96,47 @@ class TestIBusTextInjectorSetupFailures(unittest.TestCase):
|
||||
|
||||
self.assertIn("Failed to activate Vocalinux IBus engine", str(context.exception))
|
||||
|
||||
@patch("vocalinux.text_injection.ibus_engine.IBUS_AVAILABLE", True)
|
||||
@patch("vocalinux.text_injection.ibus_engine.ensure_ibus_dir")
|
||||
@patch("vocalinux.text_injection.ibus_engine.SOCKET_PATH")
|
||||
@patch("vocalinux.text_injection.ibus_engine.time")
|
||||
@patch("vocalinux.text_injection.ibus_engine.start_engine_process")
|
||||
@patch("vocalinux.text_injection.ibus_engine.get_current_xkb_layout")
|
||||
@patch("vocalinux.text_injection.ibus_engine.restore_xkb_layout")
|
||||
@patch("vocalinux.text_injection.ibus_engine.is_engine_active")
|
||||
@patch("vocalinux.text_injection.ibus_engine.get_current_engine")
|
||||
@patch("vocalinux.text_injection.ibus_engine.switch_engine")
|
||||
def test_warns_and_proceeds_when_socket_not_ready(
|
||||
self,
|
||||
mock_switch,
|
||||
mock_get_engine,
|
||||
mock_is_active,
|
||||
mock_restore_xkb,
|
||||
mock_get_xkb,
|
||||
mock_start_engine,
|
||||
mock_time,
|
||||
mock_socket_path,
|
||||
mock_ensure_dir,
|
||||
):
|
||||
"""Covers the for/else warning branch: all 15 socket-readiness retries exhaust,
|
||||
warning is logged, and activation proceeds anyway (graceful degradation)."""
|
||||
mock_start_engine.return_value = True
|
||||
mock_socket_path.exists.return_value = False
|
||||
mock_is_active.return_value = False
|
||||
mock_get_engine.return_value = "xkb:us::eng"
|
||||
mock_switch.return_value = True
|
||||
mock_get_xkb.return_value = ("us", "", "")
|
||||
|
||||
from vocalinux.text_injection.ibus_engine import IBusTextInjector
|
||||
|
||||
with self.assertLogs("vocalinux.text_injection.ibus_engine", level="WARNING") as log:
|
||||
injector = IBusTextInjector(auto_activate=True)
|
||||
|
||||
self.assertTrue(any("socket not ready" in msg for msg in log.output))
|
||||
self.assertEqual(mock_socket_path.exists.call_count, 15)
|
||||
self.assertEqual(mock_time.sleep.call_count, 15)
|
||||
self.assertIsNotNone(injector)
|
||||
|
||||
|
||||
class TestIBusEngineHelpers(unittest.TestCase):
|
||||
"""Tests for IBus engine helper functions."""
|
||||
|
||||
Reference in New Issue
Block a user