|
20 | 20 | letter, |
21 | 21 | line_info, |
22 | 22 | line_info_at, |
| 23 | + make_stream, |
23 | 24 | match_item, |
24 | 25 | peek, |
25 | 26 | regex, |
@@ -619,6 +620,18 @@ def foo(): |
619 | 620 | ], |
620 | 621 | ) |
621 | 622 |
|
| 623 | + source = "aaaaa" |
| 624 | + self.assertEqual( |
| 625 | + foo.many().parse("AB\nCD", source=source), |
| 626 | + [ |
| 627 | + ("A", (0, 0, source)), |
| 628 | + ("B", (0, 1, source)), |
| 629 | + ("\n", (0, 2, source)), |
| 630 | + ("C", (1, 0, source)), |
| 631 | + ("D", (1, 1, source)), |
| 632 | + ], |
| 633 | + ) |
| 634 | + |
622 | 635 | def test_should_fail(self): |
623 | 636 | not_a_digit = digit.should_fail("not a digit") >> regex(r".*") |
624 | 637 |
|
@@ -713,14 +726,24 @@ def foo(): |
713 | 726 |
|
714 | 727 | class TestUtils(unittest.TestCase): |
715 | 728 | def test_line_info_at(self): |
| 729 | + |
716 | 730 | text = "abc\ndef" |
717 | 731 | self.assertEqual(line_info_at(text, 0), (0, 0)) |
718 | 732 | self.assertEqual(line_info_at(text, 2), (0, 2)) |
719 | 733 | self.assertEqual(line_info_at(text, 3), (0, 3)) |
720 | 734 | self.assertEqual(line_info_at(text, 4), (1, 0)) |
721 | 735 | self.assertEqual(line_info_at(text, 7), (1, 3)) |
| 736 | + |
722 | 737 | self.assertRaises(ValueError, lambda: line_info_at(text, 8)) |
723 | 738 |
|
| 739 | + text = make_stream("abc\ndef", source="aaaa") |
| 740 | + self.assertEqual(line_info_at(text, 0), (0, 0, "aaaa")) |
| 741 | + self.assertEqual(line_info_at(text, 2), (0, 2, "aaaa")) |
| 742 | + self.assertEqual(line_info_at(text, 3), (0, 3, "aaaa")) |
| 743 | + self.assertEqual(line_info_at(text, 4), (1, 0, "aaaa")) |
| 744 | + self.assertEqual(line_info_at(text, 7), (1, 3, "aaaa")) |
| 745 | + |
| 746 | + self.assertRaises(ValueError, lambda: line_info_at(text, 8)) |
724 | 747 |
|
725 | 748 |
|
726 | 749 | class TestForwardDeclaration(unittest.TestCase): |
|
0 commit comments