hermes-agent/tests/hermes_cli/test_input_sanitize.py
HexLab98 2388e0687b test(input): preservation regressions and prompt.submit boundary (#62557)
Add cases for mid-string markers, trailing punctuation, and insufficient
tail repeats; verify prompt.submit passes sanitized text to run_conversation.
2026-07-15 07:39:42 -07:00

51 lines
1.9 KiB
Python

"""Tests for shared user prompt input sanitization."""
from hermes_cli.input_sanitize import (
collapse_repeated_input_artifacts,
sanitize_user_prompt_text,
strip_leaked_bracketed_paste_wrappers,
)
class TestStripLeakedBracketedPasteWrappers:
def test_plain_text_unchanged(self):
assert strip_leaked_bracketed_paste_wrappers("hello world") == "hello world"
def test_strips_canonical_escape_wrappers(self):
assert strip_leaked_bracketed_paste_wrappers("\x1b[200~hello\x1b[201~") == "hello"
def test_strips_visible_caret_escape_wrappers(self):
assert strip_leaked_bracketed_paste_wrappers("^[[200~hello^[[201~") == "hello"
def test_does_not_strip_non_wrapper_bracket_forms_in_normal_text(self):
text = "literal[200~tag and literal[201~tag should stay"
assert strip_leaked_bracketed_paste_wrappers(text) == text
class TestCollapseRepeatedInputArtifacts:
def test_issue_62557_corruption_tail(self):
prefix = "需要时随时叫我。"
tail = "[e~[[e" + "~[[e" * 20
assert collapse_repeated_input_artifacts(prefix + tail) == prefix
def test_plain_text_unchanged(self):
text = "build00~tag should stay"
assert collapse_repeated_input_artifacts(text) == text
def test_mid_string_marker_followed_by_suffix_preserved(self):
text = "notes ~[[e more text here"
assert collapse_repeated_input_artifacts(text) == text
def test_trailing_punctuation_preserved(self):
assert collapse_repeated_input_artifacts("wait....") == "wait...."
def test_insufficient_tail_repeats_preserved(self):
text = "hello~[[e~[[e"
assert collapse_repeated_input_artifacts(text) == text
class TestSanitizeUserPromptText:
def test_combines_wrapper_strip_and_tail_collapse(self):
prefix = "hello["
corrupted = prefix + "~[[e" * 8
assert sanitize_user_prompt_text(corrupted) == "hello"