emitPassing method
List<File>
emitPassing({
- required String requirementId,
- required ScenarioId scenarioId,
- required Iterable<
String> evidenceTypes, - required String target,
- required String runnerCompatibilityId,
- required String digestInput,
- Iterable<
String> controlIds = const [], - String variant = 'default',
- String? outputDirectory,
- String? profile,
- String? runnerId,
- ExecutionSourceIdentity? sourceIdentity,
- String? caseId,
Implementation
List<File> emitPassing({
required String requirementId,
required ScenarioId scenarioId,
required Iterable<String> evidenceTypes,
required String target,
required String runnerCompatibilityId,
required String digestInput,
Iterable<String> controlIds = const [],
String variant = 'default',
String? outputDirectory,
String? profile,
String? runnerId,
ExecutionSourceIdentity? sourceIdentity,
String? caseId,
}) {
final managedContext = RunnerExecutionContext.fromEnvironment(
Platform.environment,
);
if (managedContext == null) {
final explicitManaged =
sourceIdentity != null ||
outputDirectory != null ||
profile != null ||
runnerId != null;
if (!explicitManaged) {
// Ordinary direct tests run normally and publish no evidence.
return const [];
}
if (sourceIdentity == null ||
outputDirectory == null ||
profile == null ||
runnerId == null) {
throw const FormatException(
'Managed evidence options require a complete RunnerExecutionContext',
);
}
}
final effectiveIdentity = managedContext?.sourceIdentity ?? sourceIdentity!;
final effectiveOutputDirectory =
managedContext?.resultDirectory ?? outputDirectory!;
final effectiveProfile = managedContext?.profile ?? profile!;
final effectiveRunnerId = managedContext?.runnerId ?? runnerId!;
if (managedContext != null &&
profile != null &&
profile != managedContext.profile) {
throw const FormatException(
'Evidence profile disagrees with managed context',
);
}
if (managedContext != null &&
runnerId != null &&
runnerId != managedContext.runnerId) {
throw const FormatException(
'Evidence runner disagrees with managed context',
);
}
if (managedContext != null &&
runnerCompatibilityId != managedContext.runnerCompatibilityId) {
throw const FormatException(
'Evidence runner compatibility disagrees with managed context',
);
}
if (managedContext != null &&
sourceIdentity != null &&
canonicalJson(sourceIdentity.toJson()) !=
canonicalJson(managedContext.sourceIdentity.toJson())) {
throw const FormatException(
'Evidence source identity disagrees with managed context',
);
}
final digest = 'sha256:${sha256.convert(utf8.encode(digestInput))}';
final sortedControlIds = [...controlIds.toSet()]..sort();
final identity = effectiveIdentity;
final writer = ExecutionResultWriter(identity: identity);
final files = <File>[];
for (final evidenceType in evidenceTypes.toSet()) {
final executionId = _suiteExecutionId(
profile: effectiveProfile,
requirementId: requirementId,
scenarioId: scenarioId,
evidenceType: evidenceType,
target: target,
variant: variant,
runnerCompatibilityId: runnerCompatibilityId,
caseId: caseId,
);
final result = SuiteResult(
executionId: executionId,
status: SuiteStatus.passed,
requirementId: requirementId,
evidenceType: evidenceType,
target: target,
variant: variant,
candidateId: scenarioId.value,
profile: effectiveProfile,
runnerId: effectiveRunnerId,
runnerCompatibilityId: runnerCompatibilityId,
sourcePackage: identity.sourcePackage,
sourceAdapter: identity.sourceAdapter,
sourceCompatibilityId: identity.sourceCompatibilityId,
resultDigest: digest,
scenarioIds: [scenarioId],
controlIds: sortedControlIds,
);
files.add(writer.writeSuite(effectiveOutputDirectory, result));
}
return files;
}