69 lines
1.6 KiB
Python
69 lines
1.6 KiB
Python
import json
|
|
|
|
import pytest
|
|
|
|
from scripts.msvc_harness.config import ConfigError, load_config
|
|
|
|
|
|
def _write_config(root, data):
|
|
config_dir = root / ".harness"
|
|
config_dir.mkdir()
|
|
(config_dir / "config.json").write_text(
|
|
json.dumps(data),
|
|
encoding="utf-8",
|
|
)
|
|
|
|
|
|
def test_load_config_uses_defaults(tmp_path):
|
|
config = load_config(tmp_path)
|
|
|
|
assert config.version == 1
|
|
assert config.project_type == "auto"
|
|
assert config.cmake.source_dir == tmp_path.resolve()
|
|
assert config.cmake.binary_dir is None
|
|
assert config.tdd.test_roots == (
|
|
(tmp_path / "tests").resolve(),
|
|
(tmp_path / "test").resolve(),
|
|
)
|
|
|
|
|
|
def test_load_config_rejects_path_outside_repository(tmp_path):
|
|
root = tmp_path / "repo"
|
|
root.mkdir()
|
|
_write_config(
|
|
root,
|
|
{
|
|
"version": 1,
|
|
"cmake": {
|
|
"sourceDir": "../outside",
|
|
},
|
|
},
|
|
)
|
|
|
|
with pytest.raises(ConfigError, match="outside the repository"):
|
|
load_config(root)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"missing_field",
|
|
["binaryDir", "configurePreset", "buildPreset", "testPreset"],
|
|
)
|
|
def test_load_config_requires_all_cmake_preset_fields(tmp_path, missing_field):
|
|
cmake = {
|
|
"binaryDir": "out/build/windows-debug",
|
|
"configurePreset": "windows-debug",
|
|
"buildPreset": "windows-debug",
|
|
"testPreset": "windows-debug",
|
|
}
|
|
del cmake[missing_field]
|
|
_write_config(
|
|
tmp_path,
|
|
{
|
|
"version": 1,
|
|
"cmake": cmake,
|
|
},
|
|
)
|
|
|
|
with pytest.raises(ConfigError, match="must be specified together"):
|
|
load_config(tmp_path)
|