filtered method
Selects cases by stable ID while preserving registration order.
When include is omitted every case is eligible. Unknown include or
exclude IDs throw, preventing a misspelled filter from silently skipping
a contract.
Implementation
List<AuthPluginConformanceCase> filtered({
Iterable<String>? include,
Iterable<String> exclude = const <String>[],
}) {
final known = cases.map((value) => value.id).toSet();
final included = include?.toSet();
final excluded = exclude.toSet();
final unknown = <String>{
if (included != null) ...included.difference(known),
...excluded.difference(known),
};
if (unknown.isNotEmpty) {
final sorted = unknown.toList()..sort();
throw ArgumentError.value(sorted, 'include/exclude', 'unknown case IDs');
}
return List<AuthPluginConformanceCase>.unmodifiable(
cases.where(
(value) =>
(included == null || included.contains(value.id)) &&
!excluded.contains(value.id),
),
);
}