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
+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")