Files
FESA/tests/harness/test_process.py
T

75 lines
1.8 KiB
Python

from types import SimpleNamespace
import pytest
from scripts.msvc_harness.models import (
CommandSpec,
ProjectKind,
ResultCheck,
ResultCheckKind,
ValidationPlan,
ValidationStep,
)
from scripts.msvc_harness.process import ValidationFailure, execute_plan
def _ctest_plan(root):
command = CommandSpec(
("ctest", "--show-only=json-v1"),
root,
"CTest discovery",
)
check = ResultCheck(ResultCheckKind.CTEST_HAS_TESTS)
return ValidationPlan(
ProjectKind.CMAKE,
(ValidationStep(command, (check,)),),
)
def test_execute_plan_rejects_ctest_json_with_no_tests(tmp_path):
def fake_run(*args, **kwargs):
return SimpleNamespace(returncode=0, stdout='{"tests": []}', stderr="")
with pytest.raises(ValidationFailure, match="CTest discovered no tests"):
execute_plan(
_ctest_plan(tmp_path),
tmp_path,
deadline=10,
run=fake_run,
clock=lambda: 0,
)
def test_execute_plan_accepts_ctest_json_with_tests_without_shell(tmp_path):
calls = []
def fake_run(*args, **kwargs):
calls.append((args, kwargs))
return SimpleNamespace(
returncode=0,
stdout='{"tests": [{"name": "unit"}]}',
stderr="",
)
results = execute_plan(
_ctest_plan(tmp_path),
tmp_path,
deadline=10,
run=fake_run,
clock=lambda: 0,
)
assert len(results) == 1
assert calls == [
(
(["ctest", "--show-only=json-v1"],),
{
"cwd": tmp_path.resolve(),
"env": None,
"capture_output": True,
"shell": False,
"timeout": 10,
},
)
]