aman/tests/test_desktop_x11.py

70 lines
2.3 KiB
Python

import sys
import unittest
from pathlib import Path
from unittest.mock import MagicMock, patch
ROOT = Path(__file__).resolve().parents[1]
SRC = ROOT / "src"
if str(SRC) not in sys.path:
sys.path.insert(0, str(SRC))
from desktop_x11 import X11Adapter
class DesktopX11Tests(unittest.TestCase):
def _adapter(self) -> X11Adapter:
return object.__new__(X11Adapter)
@patch("desktop_x11.display.Display")
def test_paste_clipboard_closes_display_on_success(self, display_cls):
adapter = self._adapter()
display_obj = MagicMock()
display_cls.return_value = display_obj
adapter._send_combo = MagicMock()
adapter._paste_clipboard()
adapter._send_combo.assert_called_once_with(display_obj, ["Control_L", "Shift_L", "v"])
display_obj.close.assert_called_once_with()
@patch("desktop_x11.display.Display")
def test_paste_clipboard_closes_display_on_send_error(self, display_cls):
adapter = self._adapter()
display_obj = MagicMock()
display_cls.return_value = display_obj
adapter._send_combo = MagicMock(side_effect=RuntimeError("boom"))
with self.assertRaisesRegex(RuntimeError, "boom"):
adapter._paste_clipboard()
display_obj.close.assert_called_once_with()
@patch("desktop_x11.display.Display")
def test_type_text_closes_display_on_success(self, display_cls):
adapter = self._adapter()
display_obj = MagicMock()
display_cls.return_value = display_obj
adapter._send_combo = MagicMock()
adapter._keysym_for_char = MagicMock(return_value=(42, False))
adapter._type_text("a")
adapter._send_combo.assert_called_once_with(display_obj, [42], already_keysym=True)
display_obj.close.assert_called_once_with()
@patch("desktop_x11.display.Display")
def test_type_text_closes_display_on_send_error(self, display_cls):
adapter = self._adapter()
display_obj = MagicMock()
display_cls.return_value = display_obj
adapter._send_combo = MagicMock(side_effect=RuntimeError("boom"))
adapter._keysym_for_char = MagicMock(return_value=(42, False))
with self.assertRaisesRegex(RuntimeError, "boom"):
adapter._type_text("a")
display_obj.close.assert_called_once_with()
if __name__ == "__main__":
unittest.main()