Files
hermes-agent/tests/agent/test_skill_inline_bash_windows.py

49 lines
1.7 KiB
Python

"""Native Windows execution contract for opt-in skill snippets."""
import pytest
from agent.skill_preprocessing import preprocess_skill_content, run_inline_shell
@pytest.mark.platforms("windows")
@pytest.mark.parametrize(('command', 'expected'), [
('printf "hello"', 'hello'),
(':', ''),
('printf "diagnostic" >&2; exit 3', 'diagnostic'),
('printf "preferred"; printf "ignored" >&2', 'preferred'),
])
def test_inline_shell_keeps_output_contract(tmp_path, command, expected):
assert run_inline_shell(command, tmp_path, 5) == expected
@pytest.mark.platforms("windows")
def test_inline_shell_resolver_failure_is_a_marker(tmp_path, monkeypatch):
from tools.environments import local
def unavailable():
raise RuntimeError('Git Bash unavailable')
monkeypatch.setattr(local, '_find_bash', unavailable)
assert run_inline_shell(':', tmp_path, 5) == '[inline-shell error: Git Bash unavailable]'
@pytest.mark.platforms("windows")
def test_disabled_inline_shell_does_not_resolve_bash(tmp_path, monkeypatch):
from tools.environments import local
def unexpected():
pytest.fail('disabled inline shell must not resolve an interpreter')
monkeypatch.setattr(local, '_find_bash', unexpected)
assert preprocess_skill_content('!`printf hello`', tmp_path, skills_cfg={}) == '!`printf hello`'
@pytest.mark.platforms("windows")
def test_inline_shell_executes_in_native_skill_directory(tmp_path):
(tmp_path / 'marker.txt').write_text('native-skill', encoding='utf-8')
result = preprocess_skill_content(
'value=!`read -r value < marker.txt; printf "%s" "$value"`',
tmp_path,
skills_cfg={'inline_shell': True, 'inline_shell_timeout': 5},
)
assert result == 'value=native-skill'