modify documents

This commit is contained in:
KOKO\Mimi
2026-09-05 15:14:21 +09:00
parent 31dac85192
commit 97e4d7a971
79 changed files with 4570 additions and 2787 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ class CMakeAdapter:
if config.cmake.configure_preset is None:
command_cwd = root
binary = root / ".harness/build"
binary = config.cmake.binary_dir or root / ".harness/build"
configure = (
str(tools.cmake),
"-S",
+6 -4
View File
@@ -13,12 +13,14 @@ from .base import AdapterError
def _test_argv(root: Path, command: tuple[str, ...]) -> tuple[str, ...]:
if "/" not in command[0] and "\\" not in command[0]:
return command
first = Path(command[0].replace("\\", "/"))
executable = first if first.is_absolute() else (root / first).resolve()
if first.is_absolute():
raise AdapterError(
"msbuild.testCommand executable must be repository-relative"
)
executable = (root / first).resolve()
try:
executable.relative_to(root)
executable.relative_to(root.resolve())
except ValueError as exc:
raise AdapterError(
"msbuild.testCommand resolves outside the repository"
+46 -6
View File
@@ -1,5 +1,6 @@
import json
from pathlib import Path
from string import Formatter
from typing import Any
from .models import CMakeConfig, HarnessConfig, MSBuildConfig, TDDConfig
@@ -43,15 +44,52 @@ def _mapping(value: Any, label: str) -> dict[str, Any]:
def _nonempty_string(value: Any, label: str) -> str:
if not isinstance(value, str) or not value:
raise ConfigError(f"{label} must be a non-empty string")
if any(ord(character) < 32 or ord(character) == 127 for character in value):
raise ConfigError(f"{label} must not contain control characters")
return value
def _string_array(value: Any, label: str) -> tuple[str, ...]:
if not isinstance(value, list):
raise ConfigError(f"{label} must be an array")
if not value or any(not isinstance(item, str) or not item for item in value):
if not value:
raise ConfigError(f"{label} must be a non-empty string array")
return tuple(value)
return tuple(
_nonempty_string(item, f"{label}[{index}]")
for index, item in enumerate(value)
)
def _validate_test_pattern(pattern: str) -> None:
candidate = Path(pattern)
if (
candidate.is_absolute()
or bool(candidate.drive)
or "/" in pattern
or "\\" in pattern
or candidate.name != pattern
):
raise ConfigError(
"every tdd.testPatterns entry must be a safe basename pattern"
)
try:
fields = [
(field_name, format_spec, conversion)
for _, field_name, format_spec, conversion in Formatter().parse(pattern)
if field_name is not None
]
except ValueError as exc:
raise ConfigError(f"invalid tdd.testPatterns entry: {exc}") from exc
if (
not fields
or any(
field_name != "stem" or format_spec or conversion
for field_name, format_spec, conversion in fields
)
):
raise ConfigError(
"every tdd.testPatterns entry may contain only the {stem} field"
)
def load_config(root: Path) -> HarnessConfig:
@@ -92,8 +130,10 @@ def load_config(root: Path) -> HarnessConfig:
binary_dir = _repo_path(
root, _nonempty_string(cmake_data["binaryDir"], "cmake.binaryDir"), "cmake.binaryDir"
)
preset_keys = ("configurePreset", "buildPreset", "testPreset", "binaryDir")
if any(key in cmake_data for key in preset_keys) and not all(key in cmake_data for key in preset_keys):
preset_keys = ("configurePreset", "buildPreset", "testPreset")
if any(key in cmake_data for key in preset_keys) and not (
all(key in cmake_data for key in preset_keys) and binary_dir is not None
):
raise ConfigError("cmake configurePreset, buildPreset, testPreset, and binaryDir must be specified together")
configure_preset = (
_nonempty_string(cmake_data["configurePreset"], "cmake.configurePreset")
@@ -131,8 +171,8 @@ def load_config(root: Path) -> HarnessConfig:
raw_test_roots = _string_array(tdd_data["testRoots"], "tdd.testRoots") if "testRoots" in tdd_data else ("tests", "test")
test_roots = tuple(_repo_path(root, item, "tdd.testRoots") for item in raw_test_roots)
test_patterns = _string_array(tdd_data["testPatterns"], "tdd.testPatterns") if "testPatterns" in tdd_data else DEFAULT_TEST_PATTERNS
if any("{stem}" not in pattern for pattern in test_patterns):
raise ConfigError("every tdd.testPatterns entry must contain {stem}")
for pattern in test_patterns:
_validate_test_pattern(pattern)
exclude = _string_array(tdd_data["exclude"], "tdd.exclude") if "exclude" in tdd_data else ()
for item in exclude:
_repo_path(root, item, "tdd.exclude")
+1 -1
View File
@@ -48,7 +48,7 @@ def discover_project(root: Path, config: HarnessConfig) -> DiscoveryResult:
project = _single_msbuild(root, config.msbuild.solution)
return DiscoveryResult(ProjectSelection(ProjectKind.MSBUILD, project))
entry = _cmake_entry(root)
entry = _cmake_entry(config.cmake.source_dir)
if entry is not None:
return DiscoveryResult(ProjectSelection(ProjectKind.CMAKE, entry))