Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
"""Tests for native clipboard text write (hermes_cli/clipboard.py).
|
||||
|
||||
Mirrors the TUI's writeClipboardText fallback chain: pbcopy /
|
||||
PowerShell Set-Clipboard / wl-copy / xclip / xsel, with OSC 52 left to
|
||||
the caller when every backend fails.
|
||||
"""
|
||||
import base64
|
||||
import subprocess
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from hermes_cli import clipboard as clip
|
||||
|
||||
|
||||
def _completed(returncode=0):
|
||||
return subprocess.CompletedProcess(args=[], returncode=returncode)
|
||||
|
||||
|
||||
@pytest.mark.macos_only
|
||||
def test_darwin_uses_pbcopy():
|
||||
with patch.object(clip.subprocess, "run", return_value=_completed()) as run:
|
||||
assert clip.write_clipboard_text("hello") is True
|
||||
argv = run.call_args[0][0]
|
||||
assert argv == ["pbcopy"]
|
||||
assert run.call_args[1]["input"] == b"hello"
|
||||
|
||||
|
||||
@pytest.mark.linux_only
|
||||
def test_linux_falls_through_backends_until_success():
|
||||
calls = []
|
||||
|
||||
def fake_run(argv, **kwargs):
|
||||
calls.append(argv[0])
|
||||
# xclip fails, xsel succeeds
|
||||
return _completed(returncode=0 if argv[0] == "xsel" else 1)
|
||||
|
||||
with patch.object(clip, "_is_wsl", return_value=False), \
|
||||
patch.dict(clip.os.environ, {}, clear=False), \
|
||||
patch.object(clip.os.environ, "get", lambda k, d=None: None), \
|
||||
patch.object(clip.subprocess, "run", side_effect=fake_run):
|
||||
assert clip.write_clipboard_text("x") is True
|
||||
assert calls == ["xclip", "xsel"]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class TestOsc52MultiplexerWrapping:
|
||||
"""CLI _write_osc52_clipboard must wrap for tmux/screen passthrough
|
||||
(mirrors ui-tui/src/lib/osc52.ts wrapForMultiplexer)."""
|
||||
|
||||
def _capture_seq(self, env):
|
||||
import io
|
||||
from unittest.mock import patch as _patch
|
||||
from cli import HermesCLI
|
||||
|
||||
cli_obj = HermesCLI.__new__(HermesCLI)
|
||||
cli_obj._app = None
|
||||
buf = io.StringIO()
|
||||
with _patch.dict(clip.os.environ, env, clear=False), \
|
||||
_patch("cli.sys.stdout", buf):
|
||||
for var in ("TMUX", "STY"):
|
||||
if var not in env:
|
||||
clip.os.environ.pop(var, None)
|
||||
cli_obj._write_osc52_clipboard("hello")
|
||||
return buf.getvalue()
|
||||
|
||||
def test_tmux_wraps_in_dcs_passthrough(self, monkeypatch):
|
||||
monkeypatch.setenv("TMUX", "/tmp/tmux-123/default,1,0")
|
||||
monkeypatch.delenv("STY", raising=False)
|
||||
seq = self._capture_seq({"TMUX": "/tmp/tmux-123/default,1,0"})
|
||||
assert seq.startswith("\x1bPtmux;")
|
||||
assert "]52;c;" in seq
|
||||
assert seq.endswith("\x1b\\")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user