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