63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
|
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
|