filtered method

List<AuthPluginConformanceCase> filtered({
  1. Iterable<String>? include,
  2. Iterable<String> exclude = const <String>[],
})

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),
    ),
  );
}