|
2 | 2 | cpython_only, captured_stdout, |
3 | 3 | check_disallow_instantiation, linked_to_musl, |
4 | 4 | warnings_helper, SHORT_TIMEOUT, Stopwatch, requires_resource) |
| 5 | +import itertools |
5 | 6 | import locale |
6 | 7 | import re |
7 | 8 | import string |
@@ -610,31 +611,15 @@ def test_match_getitem(self): |
610 | 611 |
|
611 | 612 | def test_match_getitem_slice(self): |
612 | 613 | m = re.match(r"(a)(b)(c)", "abc") |
613 | | - self.assertEqual(m[:0], ()) |
614 | | - self.assertEqual(m[:1], ("abc",)) |
615 | | - self.assertEqual(m[:2], ("abc", "a")) |
616 | | - self.assertEqual(m[:3], ("abc", "a", "b")) |
617 | | - self.assertEqual(m[:4], ("abc", "a", "b", "c")) |
618 | | - self.assertEqual(m[0:], ("abc", "a", "b", "c")) |
619 | | - self.assertEqual(m[1:], ("a", "b", "c")) |
620 | | - self.assertEqual(m[2:], ("b", "c")) |
621 | | - self.assertEqual(m[3:], ("c",)) |
622 | | - self.assertEqual(m[4:], ()) |
623 | | - self.assertEqual(m[:-4], ()) |
624 | | - self.assertEqual(m[:-3], ("abc",)) |
625 | | - self.assertEqual(m[:-2], ("abc", "a")) |
626 | | - self.assertEqual(m[:-1], ("abc", "a", "b")) |
627 | | - self.assertEqual(m[-4:], ("abc", "a", "b", "c")) |
628 | | - self.assertEqual(m[-3:], ("a", "b", "c")) |
629 | | - self.assertEqual(m[-2:], ("b", "c")) |
630 | | - self.assertEqual(m[-1:], ("c",)) |
631 | | - self.assertEqual(m[1:-1], ("a", "b")) |
632 | | - self.assertEqual(m[::-1], ("c", "b", "a", "abc")) |
633 | | - self.assertEqual(m[::4], ("abc",)) |
634 | | - self.assertEqual(m[2:2], ()) |
635 | | - self.assertEqual(m[3:1], ()) |
636 | | - self.assertEqual(m[1:3], ("a", "b")) |
637 | | - self.assertEqual(m[-1::-2], ("c", "a")) |
| 614 | + seq = ("abc", "a", "b", "c") |
| 615 | + indices = [None, *range(-len(seq), len(seq) + 1)] |
| 616 | + for start, end, step in itertools.product( |
| 617 | + indices, |
| 618 | + indices, |
| 619 | + filter(lambda x: x != 0, indices), # slice step cannot be zero |
| 620 | + ): |
| 621 | + with self.subTest(start=start, end=end, step=step): |
| 622 | + self.assertEqual(m[start:end:step], seq[start:end:step]) |
638 | 623 |
|
639 | 624 | def test_match_sequence(self): |
640 | 625 | m = re.match(r"(a)(b)(c)", "abc") |
@@ -664,52 +649,57 @@ def test_match_sequence(self): |
664 | 649 | self.assertEqual(v, "123") |
665 | 650 |
|
666 | 651 | def test_match_iter(self): |
667 | | - m = re.match(r"(a)(b)(c)", "abc") |
668 | | - it = iter(m) |
| 652 | + it = iter(re.match(r"(a)(b)(c)", "abc")) |
669 | 653 | self.assertEqual(next(it), "abc") |
670 | 654 | self.assertEqual(next(it), "a") |
671 | 655 | self.assertEqual(next(it), "b") |
672 | 656 | self.assertEqual(next(it), "c") |
673 | | - with self.assertRaises(StopIteration): |
674 | | - next(it) |
| 657 | + self.assertRaises(StopIteration, next, it) |
675 | 658 |
|
676 | 659 | def test_match_index(self): |
677 | | - m = re.match(r"(a)(b)(c)", "abc") |
678 | | - self.assertEqual(m.index("abc"), 0) |
| 660 | + m = re.match(r"(a)(b)(c)(b)", "abcb") |
| 661 | + self.assertEqual(m.index("abcb"), 0) |
679 | 662 | self.assertEqual(m.index("a"), 1) |
680 | 663 | self.assertEqual(m.index("b"), 2) |
681 | 664 | self.assertEqual(m.index("c"), 3) |
682 | 665 | self.assertRaises(ValueError, m.index, "123") |
683 | 666 |
|
684 | 667 | # With start index. |
685 | | - self.assertRaises(ValueError, m.index, "abc", 1) |
686 | 668 | self.assertEqual(m.index("a", 1), 1) |
687 | 669 | self.assertEqual(m.index("b", 1), 2) |
688 | 670 | self.assertEqual(m.index("c", 1), 3) |
| 671 | + self.assertRaises(ValueError, m.index, "abcb", 1) |
689 | 672 | self.assertRaises(ValueError, m.index, "123", 1) |
690 | 673 |
|
691 | | - self.assertRaises(ValueError, m.index, "abc", 2) |
692 | | - self.assertRaises(ValueError, m.index, "a", 2) |
693 | 674 | self.assertEqual(m.index("b", 2), 2) |
694 | 675 | self.assertEqual(m.index("c", 2), 3) |
| 676 | + self.assertRaises(ValueError, m.index, "abcb", 2) |
| 677 | + self.assertRaises(ValueError, m.index, "a", 2) |
695 | 678 | self.assertRaises(ValueError, m.index, "123", 2) |
696 | 679 |
|
697 | | - self.assertRaises(ValueError, m.index, "abc", 3) |
698 | | - self.assertRaises(ValueError, m.index, "a", 3) |
699 | | - self.assertRaises(ValueError, m.index, "b", 3) |
| 680 | + self.assertEqual(m.index("b", 3), 4) |
700 | 681 | self.assertEqual(m.index("c", 3), 3) |
| 682 | + self.assertRaises(ValueError, m.index, "abcb", 3) |
| 683 | + self.assertRaises(ValueError, m.index, "a", 3) |
701 | 684 | self.assertRaises(ValueError, m.index, "123", 3) |
702 | 685 |
|
703 | | - self.assertRaises(ValueError, m.index, "abc", 4) |
| 686 | + self.assertEqual(m.index("b", 4), 4) |
| 687 | + self.assertRaises(ValueError, m.index, "abcb", 4) |
704 | 688 | self.assertRaises(ValueError, m.index, "a", 4) |
705 | | - self.assertRaises(ValueError, m.index, "b", 4) |
706 | 689 | self.assertRaises(ValueError, m.index, "c", 4) |
707 | 690 | self.assertRaises(ValueError, m.index, "123", 4) |
708 | 691 |
|
| 692 | + self.assertRaises(ValueError, m.index, "abcb", 5) |
| 693 | + self.assertRaises(ValueError, m.index, "a", 5) |
| 694 | + self.assertRaises(ValueError, m.index, "b", 5) |
| 695 | + self.assertRaises(ValueError, m.index, "c", 5) |
| 696 | + self.assertRaises(ValueError, m.index, "123", 5) |
| 697 | + |
709 | 698 | # With start index and stop index. |
710 | | - self.assertRaises(ValueError, m.index, "b", 0, 2) |
711 | 699 | self.assertEqual(m.index("b", 1, 3), 2) |
712 | 700 | self.assertEqual(m.index("b", 2, 4), 2) |
| 701 | + self.assertEqual(m.index("b", 3, 5), 4) |
| 702 | + self.assertRaises(ValueError, m.index, "b", 0, 2) |
713 | 703 | self.assertRaises(ValueError, m.index, "b", 3, 4) |
714 | 704 | self.assertRaises(ValueError, m.index, "b", -1, 0) |
715 | 705 |
|
@@ -749,7 +739,6 @@ def test_match_match_case(self): |
749 | 739 | case _: |
750 | 740 | self.fail() |
751 | 741 |
|
752 | | - |
753 | 742 | def test_re_fullmatch(self): |
754 | 743 | # Issue 16203: Proposal: add re.fullmatch() method. |
755 | 744 | self.assertEqual(re.fullmatch(r"a", "a").span(), (0, 1)) |
|
0 commit comments