Skip to content

Commit acead4a

Browse files
committed
Add some logic to configurationForEntryPoint(from:) to filter by tags using a special tag: prefix
1 parent 15837ac commit acead4a

1 file changed

Lines changed: 33 additions & 2 deletions

File tree

Sources/Testing/ABI/EntryPoints/EntryPoint.swift

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -633,8 +633,39 @@ public func configurationForEntryPoint(from args: __CommandLineArguments_v0) thr
633633

634634
return try Configuration.TestFilter(membership: membership, matchingAnyOf: regexes)
635635
}
636-
filters.append(try testFilter(forRegularExpressions: args.filter, label: "--filter", membership: .including))
637-
filters.append(try testFilter(forRegularExpressions: args.skip, label: "--skip", membership: .excluding))
636+
637+
// Extract any filters or skips without the `tag:` prefix; those will be treated as normal regexes.
638+
let tagPrefix = "tag:"
639+
let escapedTagPrefix = "tag\\:"
640+
var nonTagFilterRegexes: [String] = []
641+
var nonTagSkipRegexes: [String] = []
642+
643+
for var filter in args.filter ?? [] {
644+
if filter.hasPrefix(tagPrefix) {
645+
filters.append(Configuration.TestFilter(includingAnyOf: [Tag(userProvidedStringValue: String(filter.dropFirst(4)))]))
646+
} else {
647+
// If we run into the escaped tag prefix, we need to to remove the escape character before adding it as a regex filter
648+
if filter.hasPrefix(escapedTagPrefix) {
649+
filter.replaceSubrange(escapedTagPrefix.startIndex..<escapedTagPrefix.endIndex, with: tagPrefix)
650+
}
651+
nonTagFilterRegexes.append(filter)
652+
}
653+
}
654+
655+
for var skip in args.skip ?? [] {
656+
if skip.hasPrefix(tagPrefix) {
657+
filters.append(Configuration.TestFilter(includingAnyOf: [Tag(userProvidedStringValue: String(skip.dropFirst(4)))]))
658+
} else {
659+
// If we run into the escaped tag prefix, we need to to remove the escape character before adding it as a regex filter
660+
if skip.hasPrefix(escapedTagPrefix) {
661+
skip.replaceSubrange(escapedTagPrefix.startIndex..<escapedTagPrefix.endIndex, with: tagPrefix)
662+
}
663+
nonTagSkipRegexes.append(skip)
664+
}
665+
}
666+
667+
filters.append(try testFilter(forRegularExpressions: nonTagFilterRegexes, label: "--filter", membership: .including))
668+
filters.append(try testFilter(forRegularExpressions: nonTagSkipRegexes, label: "--skip", membership: .excluding))
638669

639670
configuration.testFilter = filters.reduce(.unfiltered) { $0.combining(with: $1) }
640671
if args.includeHiddenTests == true {

0 commit comments

Comments
 (0)