75 lines
1.8 KiB
Python
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,
|
|
},
|
|
)
|
|
]
|