|
1 | 1 | import pytest |
2 | 2 |
|
3 | 3 | from nameparser import HumanName |
| 4 | +from nameparser.config.prefixes import PREFIXES, NON_FIRST_NAME_PREFIXES |
| 5 | +from nameparser.config.first_name_prefixes import FIRST_NAME_PREFIXES |
4 | 6 |
|
5 | 7 | from tests.base import HumanNameTestBase |
6 | 8 |
|
@@ -163,6 +165,25 @@ def test_comma_three_conjunctions(self) -> None: |
163 | 165 | self.m(hn.middle, "Q. Xavier", hn) |
164 | 166 | self.m(hn.suffix, "III", hn) |
165 | 167 |
|
| 168 | + def test_non_first_name_prefixes_subset_of_prefixes(self) -> None: |
| 169 | + # Every non-first-name prefix must still be a prefix so it joins forward. |
| 170 | + self.assertTrue(NON_FIRST_NAME_PREFIXES <= PREFIXES) |
| 171 | + |
| 172 | + def test_non_first_name_prefixes_disjoint_from_first_name_prefixes(self) -> None: |
| 173 | + # A word cannot be both "joins to the first name" and "never a first |
| 174 | + # name" (e.g. 'abu' is a first_name_prefix, so it is excluded here). |
| 175 | + self.assertEqual(NON_FIRST_NAME_PREFIXES & FIRST_NAME_PREFIXES, set()) |
| 176 | + |
| 177 | + def test_non_first_name_prefixes_expected_members(self) -> None: |
| 178 | + # 'abu' is in PREFIXES but excluded (it is a first_name_prefix); |
| 179 | + # 'von'/'van'/'della'/'di'/'del' are excluded (they can be first names). |
| 180 | + self.assertIn('de', NON_FIRST_NAME_PREFIXES) |
| 181 | + self.assertIn('dos', NON_FIRST_NAME_PREFIXES) |
| 182 | + self.assertNotIn('abu', NON_FIRST_NAME_PREFIXES) |
| 183 | + self.assertNotIn('von', NON_FIRST_NAME_PREFIXES) |
| 184 | + self.assertNotIn('van', NON_FIRST_NAME_PREFIXES) |
| 185 | + self.assertNotIn('della', NON_FIRST_NAME_PREFIXES) |
| 186 | + |
166 | 187 |
|
167 | 188 | class LastNamePrefixSplitTestCase(HumanNameTestBase): |
168 | 189 |
|
|
0 commit comments