@@ -175,4 +175,51 @@ extension RegexTests {
175175
176176 }
177177 }
178+
179+ func testCaptureNames( ) {
180+ let particle = try ! Regex ( #"(?<name>particle)-(?<id>\d+)"# )
181+ let particleInput = " particle-123 "
182+
183+ let uuid = try ! Regex ( #"(?<name>uuid): (?<id>[-a-f\d]+)"# )
184+ let uuidInput = " uuid: 1234-abcd-5678 "
185+
186+ let digitID = try ! Regex ( #"(?<id>\d+): (?<name>\w+)"# )
187+ let digitInput = " 1234: insert_name_here "
188+
189+ func expect(
190+ _ regex: Regex < AnyRegexOutput > ,
191+ _ input: String ,
192+ capture name: String ,
193+ _ expected: String ?
194+ ) {
195+ guard let match = input. wholeMatch ( of: regex) ,
196+ let cap = match [ name] ? . substring
197+ else {
198+ XCTAssertNil ( expected)
199+ return
200+ }
201+ XCTAssertEqual ( String ( cap) , expected)
202+ }
203+
204+ expect ( particle, particleInput, capture: " id " , " 123 " )
205+ expect ( particle, particleInput, capture: " name " , " particle " )
206+ expect ( uuid, particleInput, capture: " id " , nil )
207+ expect ( uuid, particleInput, capture: " name " , nil )
208+ expect ( digitID, particleInput, capture: " id " , nil )
209+ expect ( digitID, particleInput, capture: " name " , nil )
210+
211+ expect ( particle, uuidInput, capture: " id " , nil )
212+ expect ( particle, uuidInput, capture: " name " , nil )
213+ expect ( uuid, uuidInput, capture: " id " , " 1234-abcd-5678 " )
214+ expect ( uuid, uuidInput, capture: " name " , " uuid " )
215+ expect ( digitID, uuidInput, capture: " id " , nil )
216+ expect ( digitID, uuidInput, capture: " name " , nil )
217+
218+ expect ( particle, digitInput, capture: " id " , nil )
219+ expect ( particle, digitInput, capture: " name " , nil )
220+ expect ( uuid, digitInput, capture: " id " , nil )
221+ expect ( uuid, digitInput, capture: " name " , nil )
222+ expect ( digitID, digitInput, capture: " id " , " 1234 " )
223+ expect ( digitID, digitInput, capture: " name " , " insert_name_here " )
224+ }
178225}
0 commit comments