@@ -218,24 +218,24 @@ class TranslateTestCase(unittest.TestCase):
218
218
219
219
def test_translate (self ):
220
220
import re
221
- self .assertEqual (translate ('*' ), r'(?s:.*)\Z ' )
222
- self .assertEqual (translate ('?' ), r'(?s:.)\Z ' )
223
- self .assertEqual (translate ('a?b*' ), r'(?s:a.b.*)\Z ' )
224
- self .assertEqual (translate ('[abc]' ), r'(?s:[abc])\Z ' )
225
- self .assertEqual (translate ('[]]' ), r'(?s:[]])\Z ' )
226
- self .assertEqual (translate ('[!x]' ), r'(?s:[^x])\Z ' )
227
- self .assertEqual (translate ('[^x]' ), r'(?s:[\^x])\Z ' )
228
- self .assertEqual (translate ('[x' ), r'(?s:\[x)\Z ' )
221
+ self .assertEqual (translate ('*' ), r'(?s:.*)\z ' )
222
+ self .assertEqual (translate ('?' ), r'(?s:.)\z ' )
223
+ self .assertEqual (translate ('a?b*' ), r'(?s:a.b.*)\z ' )
224
+ self .assertEqual (translate ('[abc]' ), r'(?s:[abc])\z ' )
225
+ self .assertEqual (translate ('[]]' ), r'(?s:[]])\z ' )
226
+ self .assertEqual (translate ('[!x]' ), r'(?s:[^x])\z ' )
227
+ self .assertEqual (translate ('[^x]' ), r'(?s:[\^x])\z ' )
228
+ self .assertEqual (translate ('[x' ), r'(?s:\[x)\z ' )
229
229
# from the docs
230
- self .assertEqual (translate ('*.txt' ), r'(?s:.*\.txt)\Z ' )
230
+ self .assertEqual (translate ('*.txt' ), r'(?s:.*\.txt)\z ' )
231
231
# squash consecutive stars
232
- self .assertEqual (translate ('*********' ), r'(?s:.*)\Z ' )
233
- self .assertEqual (translate ('A*********' ), r'(?s:A.*)\Z ' )
234
- self .assertEqual (translate ('*********A' ), r'(?s:.*A)\Z ' )
235
- self .assertEqual (translate ('A*********?[?]?' ), r'(?s:A.*.[?].)\Z ' )
232
+ self .assertEqual (translate ('*********' ), r'(?s:.*)\z ' )
233
+ self .assertEqual (translate ('A*********' ), r'(?s:A.*)\z ' )
234
+ self .assertEqual (translate ('*********A' ), r'(?s:.*A)\z ' )
235
+ self .assertEqual (translate ('A*********?[?]?' ), r'(?s:A.*.[?].)\z ' )
236
236
# fancy translation to prevent exponential-time match failure
237
237
t = translate ('**a*a****a' )
238
- self .assertEqual (t , r'(?s:(?>.*?a)(?>.*?a).*a)\Z ' )
238
+ self .assertEqual (t , r'(?s:(?>.*?a)(?>.*?a).*a)\z ' )
239
239
# and try pasting multiple translate results - it's an undocumented
240
240
# feature that this works
241
241
r1 = translate ('**a**a**a*' )
@@ -249,56 +249,56 @@ def test_translate(self):
249
249
250
250
def test_translate_wildcards (self ):
251
251
for pattern , expect in [
252
- ('ab*' , r'(?s:ab.*)\Z ' ),
253
- ('ab*cd' , r'(?s:ab.*cd)\Z ' ),
254
- ('ab*cd*' , r'(?s:ab(?>.*?cd).*)\Z ' ),
255
- ('ab*cd*12' , r'(?s:ab(?>.*?cd).*12)\Z ' ),
256
- ('ab*cd*12*' , r'(?s:ab(?>.*?cd)(?>.*?12).*)\Z ' ),
257
- ('ab*cd*12*34' , r'(?s:ab(?>.*?cd)(?>.*?12).*34)\Z ' ),
258
- ('ab*cd*12*34*' , r'(?s:ab(?>.*?cd)(?>.*?12)(?>.*?34).*)\Z ' ),
252
+ ('ab*' , r'(?s:ab.*)\z ' ),
253
+ ('ab*cd' , r'(?s:ab.*cd)\z ' ),
254
+ ('ab*cd*' , r'(?s:ab(?>.*?cd).*)\z ' ),
255
+ ('ab*cd*12' , r'(?s:ab(?>.*?cd).*12)\z ' ),
256
+ ('ab*cd*12*' , r'(?s:ab(?>.*?cd)(?>.*?12).*)\z ' ),
257
+ ('ab*cd*12*34' , r'(?s:ab(?>.*?cd)(?>.*?12).*34)\z ' ),
258
+ ('ab*cd*12*34*' , r'(?s:ab(?>.*?cd)(?>.*?12)(?>.*?34).*)\z ' ),
259
259
]:
260
260
with self .subTest (pattern ):
261
261
translated = translate (pattern )
262
262
self .assertEqual (translated , expect , pattern )
263
263
264
264
for pattern , expect in [
265
- ('*ab' , r'(?s:.*ab)\Z ' ),
266
- ('*ab*' , r'(?s:(?>.*?ab).*)\Z ' ),
267
- ('*ab*cd' , r'(?s:(?>.*?ab).*cd)\Z ' ),
268
- ('*ab*cd*' , r'(?s:(?>.*?ab)(?>.*?cd).*)\Z ' ),
269
- ('*ab*cd*12' , r'(?s:(?>.*?ab)(?>.*?cd).*12)\Z ' ),
270
- ('*ab*cd*12*' , r'(?s:(?>.*?ab)(?>.*?cd)(?>.*?12).*)\Z ' ),
271
- ('*ab*cd*12*34' , r'(?s:(?>.*?ab)(?>.*?cd)(?>.*?12).*34)\Z ' ),
272
- ('*ab*cd*12*34*' , r'(?s:(?>.*?ab)(?>.*?cd)(?>.*?12)(?>.*?34).*)\Z ' ),
265
+ ('*ab' , r'(?s:.*ab)\z ' ),
266
+ ('*ab*' , r'(?s:(?>.*?ab).*)\z ' ),
267
+ ('*ab*cd' , r'(?s:(?>.*?ab).*cd)\z ' ),
268
+ ('*ab*cd*' , r'(?s:(?>.*?ab)(?>.*?cd).*)\z ' ),
269
+ ('*ab*cd*12' , r'(?s:(?>.*?ab)(?>.*?cd).*12)\z ' ),
270
+ ('*ab*cd*12*' , r'(?s:(?>.*?ab)(?>.*?cd)(?>.*?12).*)\z ' ),
271
+ ('*ab*cd*12*34' , r'(?s:(?>.*?ab)(?>.*?cd)(?>.*?12).*34)\z ' ),
272
+ ('*ab*cd*12*34*' , r'(?s:(?>.*?ab)(?>.*?cd)(?>.*?12)(?>.*?34).*)\z ' ),
273
273
]:
274
274
with self .subTest (pattern ):
275
275
translated = translate (pattern )
276
276
self .assertEqual (translated , expect , pattern )
277
277
278
278
def test_translate_expressions (self ):
279
279
for pattern , expect in [
280
- ('[' , r'(?s:\[)\Z ' ),
281
- ('[!' , r'(?s:\[!)\Z ' ),
282
- ('[]' , r'(?s:\[\])\Z ' ),
283
- ('[abc' , r'(?s:\[abc)\Z ' ),
284
- ('[!abc' , r'(?s:\[!abc)\Z ' ),
285
- ('[abc]' , r'(?s:[abc])\Z ' ),
286
- ('[!abc]' , r'(?s:[^abc])\Z ' ),
287
- ('[!abc][!def]' , r'(?s:[^abc][^def])\Z ' ),
280
+ ('[' , r'(?s:\[)\z ' ),
281
+ ('[!' , r'(?s:\[!)\z ' ),
282
+ ('[]' , r'(?s:\[\])\z ' ),
283
+ ('[abc' , r'(?s:\[abc)\z ' ),
284
+ ('[!abc' , r'(?s:\[!abc)\z ' ),
285
+ ('[abc]' , r'(?s:[abc])\z ' ),
286
+ ('[!abc]' , r'(?s:[^abc])\z ' ),
287
+ ('[!abc][!def]' , r'(?s:[^abc][^def])\z ' ),
288
288
# with [[
289
- ('[[' , r'(?s:\[\[)\Z ' ),
290
- ('[[a' , r'(?s:\[\[a)\Z ' ),
291
- ('[[]' , r'(?s:[\[])\Z ' ),
292
- ('[[]a' , r'(?s:[\[]a)\Z ' ),
293
- ('[[]]' , r'(?s:[\[]\])\Z ' ),
294
- ('[[]a]' , r'(?s:[\[]a\])\Z ' ),
295
- ('[[a]' , r'(?s:[\[a])\Z ' ),
296
- ('[[a]]' , r'(?s:[\[a]\])\Z ' ),
297
- ('[[a]b' , r'(?s:[\[a]b)\Z ' ),
289
+ ('[[' , r'(?s:\[\[)\z ' ),
290
+ ('[[a' , r'(?s:\[\[a)\z ' ),
291
+ ('[[]' , r'(?s:[\[])\z ' ),
292
+ ('[[]a' , r'(?s:[\[]a)\z ' ),
293
+ ('[[]]' , r'(?s:[\[]\])\z ' ),
294
+ ('[[]a]' , r'(?s:[\[]a\])\z ' ),
295
+ ('[[a]' , r'(?s:[\[a])\z ' ),
296
+ ('[[a]]' , r'(?s:[\[a]\])\z ' ),
297
+ ('[[a]b' , r'(?s:[\[a]b)\z ' ),
298
298
# backslashes
299
- ('[\\ ' , r'(?s:\[\\)\Z ' ),
300
- (r'[\]' , r'(?s:[\\])\Z ' ),
301
- (r'[\\]' , r'(?s:[\\\\])\Z ' ),
299
+ ('[\\ ' , r'(?s:\[\\)\z ' ),
300
+ (r'[\]' , r'(?s:[\\])\z ' ),
301
+ (r'[\\]' , r'(?s:[\\\\])\z ' ),
302
302
]:
303
303
with self .subTest (pattern ):
304
304
translated = translate (pattern )
0 commit comments