(self)
| 217 | class TranslateTestCase(unittest.TestCase): |
| 218 | |
| 219 | def test_translate(self): |
| 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') |
| 229 | # from the docs |
| 230 | self.assertEqual(translate('*.txt'), r'(?s:.*\.txt)\z') |
| 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') |
| 236 | # fancy translation to prevent exponential-time match failure |
| 237 | t = translate('**a*a****a') |
| 238 | self.assertEqual(t, r'(?s:(?>.*?a)(?>.*?a).*a)\z') |
| 239 | # and try pasting multiple translate results - it's an undocumented |
| 240 | # feature that this works |
| 241 | r1 = translate('**a**a**a*') |
| 242 | r2 = translate('**b**b**b*') |
| 243 | r3 = translate('*c*c*c*') |
| 244 | fatre = "|".join([r1, r2, r3]) |
| 245 | self.assertTrue(re.match(fatre, 'abaccad')) |
| 246 | self.assertTrue(re.match(fatre, 'abxbcab')) |
| 247 | self.assertTrue(re.match(fatre, 'cbabcaxc')) |
| 248 | self.assertFalse(re.match(fatre, 'dabccbad')) |
| 249 | |
| 250 | def test_translate_wildcards(self): |
| 251 | for pattern, expect in [ |
nothing calls this directly
no test coverage detected