extractMetadataFromString function

ExtractedMetadata extractMetadataFromString(
  1. String text
)

Extracts Allure metadata annotations from text.

Implementation

ExtractedMetadata extractMetadataFromString(String text) {
  final labels = <AllureLabel>[];
  final links = <AllureLink>[];
  String? explicitAllureId;
  String? explicitDisplayName;
  var clean = text;

  final patterns = <RegExp, void Function(RegExpMatch)>{
    RegExp(r'@allure\.id[:=]([^\s]+)'): (match) {
      explicitAllureId = match.group(1);
      labels.add(AllureLabel(name: 'ALLURE_ID', value: match.group(1)!));
    },
    RegExp(r'@allure\.label\.([^:=\s]+)[:=]([^\s]+)'): (match) {
      labels.add(AllureLabel(name: match.group(1)!, value: match.group(2)!));
    },
    RegExp(r'@allure\.link\.([^:=\s]+)[:=]([^\s]+)'): (match) {
      final linkType = match.group(1);
      final value = match.group(2)!;
      links.add(AllureLink(url: value, type: linkType));
    },
    RegExp(r'@allure\.name[:=]([^\s].*?)$'): (match) {
      explicitDisplayName = match.group(1)?.trim();
    },
  };

  for (final entry in patterns.entries) {
    final matches = entry.key.allMatches(clean).toList();
    for (final match in matches) {
      entry.value(match);
    }
    clean = clean
        .replaceAll(entry.key, '')
        .replaceAll(RegExp(r'\s{2,}'), ' ')
        .trim();
  }

  return ExtractedMetadata(
    cleanName: clean.isEmpty ? text : clean,
    allureId: explicitAllureId,
    displayName: explicitDisplayName,
    labels: labels,
    links: links,
  );
}