| from ..app import support_utils | |
| import unittest | |
| class TestParse_Diff(unittest.TestCase): | |
| def test_ignore_triple_minuses(self) -> None: | |
| diff_lines = """--- | |
| --- | |
| ---""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertFalse(bad_lines, f"Triple minuses should be ignored {bad_lines = }") | |
| def test_ignore_single_character(self) -> None: | |
| diff_lines = """@ | |
| @ | |
| ? | |
| *""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertFalse(bad_lines, f"Single characters are not ignored {bad_lines = }") | |
| def test_not_ignore_single_word(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ @@ | |
| -12, | |
| +11""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertTrue(bad_lines, f"Single words are ignored {bad_lines = }") | |
| def test_ignore_double_at_sign(self) -> None: | |
| diff_lines = """@@ | |
| @@ | |
| @@""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertFalse(bad_lines, f"Double '@' signs are not ignored {bad_lines = }") | |
| def test_good_float_rounding(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ -11717 +11717 @@ | |
| -2505,2,-9.5670268990152E-01 | |
| +2505,2,-9.5670268990153E-01 | |
| @@ -12539 +12539 @@ | |
| -3327,2,-2.2462134450621E+00 | |
| +3327,2,-2.2462134450620E+00""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertFalse(bad_lines, f"Good rounding failed {bad_lines = }") | |
| def test_ignore_bad_formatting(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ @@ | |
| -2, 3, 4, 5, 6 | |
| +2,3,4,5,6""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertFalse(bad_lines, f"Formatting is not checked {bad_lines = }") | |
| def test_good_rounding_consecutive_changes(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ @@ | |
| -2505,2,-9.5670268990152E-01 | |
| +2505,2,-9.5670268990153E-01 | |
| -3327,2,-2.2462134450621E+00 | |
| +3327,2,-2.2462134450620E+00""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertFalse(bad_lines, f"Good consecutive rounding changes failed {bad_lines = }") | |
| def test_good_rounding_space_split(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ @@ | |
| -2505 2 -9.5670268990152E-01 | |
| +2505 2 -9.5670268990153E-01""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertFalse( | |
| bad_lines, | |
| f"Good consecutive rounding changes split by space failed {bad_lines = }", | |
| ) | |
| def test_bad_rounding_space_split(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ @@ | |
| -2505 2 -9.5670268990152E-01 | |
| +2505 2 -9.5680268990153E-01""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertTrue(bad_lines, f"Bad rounding split by space shouldn't pass {bad_lines = }") | |
| def test_good_rounding_space_with_extra_word(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ @@ | |
| -EXTRA 2505 2 -9.5670268990152E-01 | |
| +EXTRA 2505 2 -9.5670268990153E-01""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertFalse(bad_lines, f"Good rounding with extra word failed {bad_lines = }") | |
| def test_good_and_bad_rounding(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ @@ | |
| -2505, 2, -9.5670268990152E-01 | |
| +2505, 2, -9.5670268990153E-01 | |
| @@ @@ | |
| -2505, 2, -9.5670268990152E-01 | |
| +2505, 2, -9.5680268990153E-01""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertTrue(bad_lines, f"Bad rounding split by space shouldn't pass {bad_lines = }") | |
| self.assertTrue( | |
| sum(line.startswith("@@") for line in bad_lines) == 1, | |
| f"Exactly one double '@' lines should be present {bad_lines = }", | |
| ) | |
| def test_good_and_bad_rounding_consecutive(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ @@ | |
| -2505, 2, -9.5670268990152E-01 | |
| +2505, 2, -9.5670268990153E-01 | |
| -2505, 2, -9.5670268990152E-01 | |
| +2505, 2, -9.5680268990153E-01""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertTrue(bad_lines, f"Bad rounding shouldn't pass {bad_lines = }") | |
| self.assertTrue( | |
| len(bad_lines) == 3, | |
| f"Number of bad_lines should be exactly three {bad_lines = }", | |
| ) | |
| self.assertTrue( | |
| sum(line.startswith("@@") for line in bad_lines) == 1, | |
| f"Exactly one double '@' lines should be present {bad_lines = }", | |
| ) | |
| def test_bad_and_bad_rounding(self) -> None: | |
| diff_lines = """--- | |
| +++ | |
| @@ @@ | |
| -2505, 2, -9.5670268990152E-01 | |
| +2505, 2. -9.5671268990153E-01 | |
| @@ @@ | |
| -2505, 2, -9.5670268990152E-01 | |
| +2505, 2, -9.5680268990153E-01""".splitlines() | |
| bad_lines = support_utils.parse_diff(diff_lines=iter(diff_lines)) | |
| self.assertTrue(bad_lines, f"Bad rounding split by space shouldn't pass {bad_lines = }") | |
| self.assertTrue( | |
| sum(line.startswith("@@") for line in bad_lines) == 2, | |
| f"Exactly two double '@' lines should be present {bad_lines = }", | |
| ) | |