"""Regression tests for issue #22379 — Ctrl+Enter newline over SSH/WSL. prompt_toolkit treats c-j (LF) as Enter on POSIX so thin PTYs (docker exec, some BSD ssh) that send LF for plain Enter still work. But Windows Terminal (native, WSL, and SSH-forwarded sessions) sends Ctrl+Enter as bare LF — same byte. Without environment-aware gating, binding c-j to submit means Ctrl+Enter submits instead of inserting a newline. These tests pin the gating predicate and the resulting binding behavior. """ from __future__ import annotations import os import sys from unittest.mock import patch def test_native_windows_preserves_newline(): import cli as cli_mod with patch.object(sys, "platform", "win32"): assert cli_mod._preserve_ctrl_enter_newline() is True def test_ssh_tty_alone_preserves_newline(): import cli as cli_mod with patch.object(sys, "platform", "linux"): # Strip out anything that might leak truth with patch.dict(os.environ, {"SSH_TTY": "/dev/pts/0"}, clear=True): assert cli_mod._preserve_ctrl_enter_newline() is True def test_windows_terminal_session_preserves_newline(): import cli as cli_mod with patch.object(sys, "platform", "linux"): with patch.dict(os.environ, {"WT_SESSION": "abc-def"}, clear=True): assert cli_mod._preserve_ctrl_enter_newline() is True def test_ghostty_tmux_session_preserves_ctrl_j_newline(): """Ghostty-inherited env survives tmux even when TERM_PROGRAM becomes tmux.""" import cli as cli_mod with patch.object(sys, "platform", "linux"): with patch.dict( os.environ, {"TERM": "tmux-256color", "TERM_PROGRAM": "tmux", "GHOSTTY_RESOURCES_DIR": "/usr/share/ghostty"}, clear=True, ): assert cli_mod._preserve_ctrl_enter_newline() is True def test_proc_version_microsoft_marker_preserves_newline(): """WSL detection via /proc when env vars are scrubbed (sudo etc.).""" import cli as cli_mod from io import StringIO with patch.object(sys, "platform", "linux"): with patch.dict(os.environ, {}, clear=True): real_open = open def _fake_open(path, *args, **kwargs): if "/proc/version" in str(path) or "/proc/sys/kernel/osrelease" in str(path): return StringIO("Linux version 5.15.167.4-microsoft-standard-WSL2") return real_open(path, *args, **kwargs) with patch("builtins.open", side_effect=_fake_open): assert cli_mod._preserve_ctrl_enter_newline() is True # --------------------------------------------------------------------------- # install_ctrl_enter_alias() — ANSI sequence mappings for enhanced terminals # ---------------------------------------------------------------------------