mirror of https://github.com/aliasrobotics/cai.git
49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
"""Tests for REPL follow-up prompts (y/N after prompt_toolkit)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from cai.repl.ui.tty_input import (
|
|
normalize_repl_line,
|
|
read_repl_line,
|
|
read_repl_yes_no,
|
|
)
|
|
|
|
|
|
class TestNormalizeReplLine:
|
|
def test_strips_carriage_return_from_enter(self):
|
|
assert normalize_repl_line("y\r") == "y"
|
|
|
|
def test_strips_whitespace(self):
|
|
assert normalize_repl_line(" yes \r\n") == "yes"
|
|
|
|
|
|
class TestReadReplYesNo:
|
|
@patch("cai.repl.ui.tty_input.input", return_value="y\r")
|
|
@patch("cai.repl.ui.tty_input.prepare_tty_for_line_input")
|
|
def test_yes_with_carriage_return(self, _prepare, _input):
|
|
console = MagicMock()
|
|
assert read_repl_yes_no(console, "Continue? (y/N): ") is True
|
|
|
|
@patch("cai.repl.ui.tty_input.input", return_value="")
|
|
@patch("cai.repl.ui.tty_input.prepare_tty_for_line_input")
|
|
def test_empty_defaults_to_no(self, _prepare, _input):
|
|
console = MagicMock()
|
|
assert read_repl_yes_no(console, "Continue? (y/N): ", default=False) is False
|
|
|
|
@patch("cai.repl.ui.tty_input.input", return_value="n")
|
|
@patch("cai.repl.ui.tty_input.prepare_tty_for_line_input")
|
|
def test_no_answer(self, _prepare, _input):
|
|
console = MagicMock()
|
|
assert read_repl_yes_no(console, "Continue? (y/N): ") is False
|
|
|
|
|
|
class TestReadReplLine:
|
|
@patch("cai.repl.ui.tty_input.input", return_value="RESET\r")
|
|
@patch("cai.repl.ui.tty_input.prepare_tty_for_line_input")
|
|
def test_prepares_tty_before_read(self, prepare, _input):
|
|
console = MagicMock()
|
|
assert read_repl_line(console, "> ") == "RESET"
|
|
prepare.assert_called_once()
|