Files
pd-guard/src/test/java/ru/pdguard/detect/ToponymDictionaryTest.java
T
Максименко Никита ВладимировичandClaude Sonnet 5 f7eee7577c feat: validate ADDRESS_CITY against a real city dictionary
The rule matched any capitalized word after "г."/"город" — no check
that it's an actual place. ToponymDictionary checks the match against
1111 Russian cities (pensnarik/russian-cities) plus CIS capitals,
matching by stem so declined forms work ("Москве" against "Москва").

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 21:29:57 +03:00

43 lines
1.6 KiB
Java

package ru.pdguard.detect;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
/** Словарь городов — проверка вместо любого слова с заглавной буквы после «г.». */
class ToponymDictionaryTest {
@Test
void recognisesNominativeCase() {
assertTrue(ToponymDictionary.isKnownCity("Москва"));
assertTrue(ToponymDictionary.isKnownCity("Казань"));
assertTrue(ToponymDictionary.isKnownCity("Санкт-Петербург"));
}
@Test
void recognisesInflectedForms() {
assertTrue(ToponymDictionary.isKnownCity("Москве"), "дательный падеж города на гласную");
assertTrue(ToponymDictionary.isKnownCity("Тамбове"), "предложный падеж города на согласную");
assertTrue(ToponymDictionary.isKnownCity("Казани"), "родительный падеж");
}
@Test
void recognisesCisCapitals() {
assertTrue(ToponymDictionary.isKnownCity("Минск"));
assertTrue(ToponymDictionary.isKnownCity("Алматы"));
}
@Test
void rejectsMadeUpWord() {
assertFalse(ToponymDictionary.isKnownCity("Ерунда"));
assertFalse(ToponymDictionary.isKnownCity("Бла-бла"));
}
@Test
void isCaseInsensitive() {
assertTrue(ToponymDictionary.isKnownCity("МОСКВА"));
assertTrue(ToponymDictionary.isKnownCity("москва"));
}
}