37 lines
1.8 KiB
Python
37 lines
1.8 KiB
Python
from uuid import uuid4
|
|
|
|
from .base import AdapterError
|
|
from ..models import (CommandSpec, ProjectKind, ResultCheck, ResultCheckKind,
|
|
ValidationPlan, ValidationStep)
|
|
|
|
|
|
class DotnetAdapter:
|
|
def create_plan(self, root, selection, config, tools):
|
|
root = root.resolve()
|
|
if not config.dotnet.test_projects:
|
|
raise AdapterError("dotnet.testProjects must specify the product tests")
|
|
tests = tuple(dict.fromkeys(config.dotnet.test_projects))
|
|
targets = tuple(dict.fromkeys((selection.project_file, *tests)))
|
|
configuration = config.dotnet.configuration
|
|
steps = []
|
|
for action in ("restore", "build"):
|
|
for target in targets:
|
|
argv = (str(tools.dotnet), action, str(target))
|
|
# Restore and build must evaluate the same conditional references.
|
|
if action == "restore":
|
|
argv += (f"-p:Configuration={configuration}",)
|
|
else:
|
|
argv += ("-c", configuration, "--no-restore", "-warnaserror")
|
|
steps.append(ValidationStep(CommandSpec(argv, root, f"{action}: {target.name}")))
|
|
results = root / ".harness/test-results" / uuid4().hex
|
|
for index, target in enumerate(tests):
|
|
directory = results / str(index)
|
|
argv = (str(tools.dotnet), "test", str(target), "-c", configuration,
|
|
"--no-build", "--no-restore", "--logger", "trx",
|
|
"--results-directory", str(directory))
|
|
steps.append(ValidationStep(
|
|
CommandSpec(argv, root, f"test: {target.name}"),
|
|
(ResultCheck(ResultCheckKind.TRX_HAS_TESTS, directory),),
|
|
))
|
|
return ValidationPlan(ProjectKind.DOTNET, tuple(steps))
|