1
0
Fork 0
textual-textarea/tests/functional_tests/conftest.py

63 lines
1.7 KiB
Python
Raw Normal View History

from typing import Type, Union
from unittest.mock import MagicMock
import pytest
from textual.app import App, ComposeResult
from textual.driver import Driver
from textual.types import CSSPathType
from textual_textarea.text_editor import TextEditor
class TextEditorApp(App, inherit_bindings=False):
def __init__(
self,
driver_class: Union[Type[Driver], None] = None,
css_path: Union[CSSPathType, None] = None,
watch_css: bool = False,
language: Union[str, None] = None,
use_system_clipboard: bool = True,
):
self.language = language
self.use_system_clipboard = use_system_clipboard
super().__init__(driver_class, css_path, watch_css)
def compose(self) -> ComposeResult:
self.editor = TextEditor(
language=self.language,
use_system_clipboard=self.use_system_clipboard,
id="ta",
)
yield self.editor
def on_mount(self) -> None:
self.editor.focus()
@pytest.fixture
def app() -> App:
app = TextEditorApp(language="python")
return app
@pytest.fixture(
params=[False, True],
ids=["no_sys_clipboard", "default"],
)
def app_all_clipboards(request: pytest.FixtureRequest) -> App:
app = TextEditorApp(use_system_clipboard=request.param)
return app
@pytest.fixture(autouse=True)
def mock_pyperclip(monkeypatch: pytest.MonkeyPatch) -> MagicMock:
mock = MagicMock()
mock.determine_clipboard.return_value = mock.copy, mock.paste
def set_paste(x: str) -> None:
mock.paste.return_value = x
mock.copy.side_effect = set_paste
monkeypatch.setattr("textual_textarea.text_editor.pyperclip", mock)
return mock