@@ -172,26 +172,31 @@ func configurationForSwiftPMEntryPoint(withArguments args: [String]) throws -> C
172
172
// constructed solely from a string, they are safe to send across isolation
173
173
// boundaries.
174
174
var filters = [ Configuration . TestFilter] ( )
175
- if #available( _regexAPI, * ) {
176
- if let filterArgIndex = args. firstIndex ( of: " --filter " ) , filterArgIndex < args. endIndex {
177
- let filterArg = args [ args. index ( after: filterArgIndex) ]
178
-
179
- let regex = try UncheckedSendable ( rawValue: Regex ( filterArg) )
180
- filters. append { test in
181
- let id = String ( describing: test. id)
182
- return id. contains ( regex. rawValue)
183
- }
175
+ if let filterArgIndex = args. firstIndex ( of: " --filter " ) , filterArgIndex < args. endIndex {
176
+ guard #available( _regexAPI, * ) else {
177
+ throw _EntryPointError. featureUnavailable ( " The '--filter' option is not supported on this OS version. " )
184
178
}
185
- if let skipArgIndex = args. firstIndex ( of: " --skip " ) , skipArgIndex < args. endIndex {
186
- let skipArg = args [ args. index ( after: skipArgIndex) ]
187
179
188
- let regex = try UncheckedSendable ( rawValue : Regex ( skipArg ) )
189
- filters . append { test in
190
- let id = String ( describing : test. id )
191
- return !id . contains ( regex . rawValue )
192
- }
180
+ let filterArg = args [ args . index ( after : filterArgIndex ) ]
181
+ let regex = try UncheckedSendable ( rawValue : Regex ( filterArg ) )
182
+ filters . append { test in
183
+ let id = String ( describing : test . id )
184
+ return id . contains ( regex . rawValue )
193
185
}
194
186
}
187
+ if let skipArgIndex = args. firstIndex ( of: " --skip " ) , skipArgIndex < args. endIndex {
188
+ guard #available( _regexAPI, * ) else {
189
+ throw _EntryPointError. featureUnavailable ( " The '--skip' option is not supported on this OS version. " )
190
+ }
191
+
192
+ let skipArg = args [ args. index ( after: skipArgIndex) ]
193
+ let regex = try UncheckedSendable ( rawValue: Regex ( skipArg) )
194
+ filters. append { test in
195
+ let id = String ( describing: test. id)
196
+ return !id. contains ( regex. rawValue)
197
+ }
198
+ }
199
+
195
200
configuration. testFilter = { [ filters] test in
196
201
filters. allSatisfy { filter in
197
202
filter ( test)
@@ -329,3 +334,23 @@ extension [Event.ConsoleOutputRecorder.Option] {
329
334
}
330
335
#endif
331
336
}
337
+
338
+ // MARK: - Error reporting
339
+
340
+ /// A type describing an error encountered in the entry point.
341
+ private enum _EntryPointError : Error {
342
+ /// A feature is unavailable.
343
+ ///
344
+ /// - Parameters:
345
+ /// - explanation: An explanation of the problem.
346
+ case featureUnavailable( _ explanation: String )
347
+ }
348
+
349
+ extension _EntryPointError : CustomStringConvertible {
350
+ var description : String {
351
+ switch self {
352
+ case let . featureUnavailable( explanation) :
353
+ explanation
354
+ }
355
+ }
356
+ }
0 commit comments