49 lines
1.7 KiB
Python
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'
|