| """Unit tests for cores.location — geography, language, plates.""" |
|
|
| from __future__ import annotations |
|
|
| from cores.location import ( |
| coords_to_country, coordinate_to_country, coords_to_city_estimate, |
| detect_script, script_to_regions, text_to_country_hints, |
| plate_format_to_country, |
| LocationEvidenceCollector, LocationEstimator, |
| ) |
|
|
|
|
| class TestGeography: |
| def test_usa_coordinates(self): |
| |
| assert coords_to_country(40.7, -74.0) == "United States" |
|
|
| def test_france_coordinates(self): |
| |
| assert coords_to_country(48.85, 2.35) == "France" |
|
|
| def test_japan_coordinates(self): |
| |
| assert coords_to_country(35.68, 139.76) == "Japan" |
|
|
| def test_ocean_coordinates_returns_none(self): |
| |
| assert coords_to_country(0.0, -160.0) is None |
|
|
| def test_coordinate_to_country_confidence(self): |
| |
| result = coordinate_to_country(47.0, 2.0) |
| assert result["country"] == "France" |
| assert result["confidence"] > 0.5 |
|
|
| def test_city_estimate_near_major_city(self): |
| result = coords_to_city_estimate(40.7, -74.0) |
| assert result is not None |
| assert result["city"] == "New York" |
|
|
| def test_city_estimate_far_from_cities(self): |
| |
| result = coords_to_city_estimate(0.0, -160.0) |
| assert result is None |
|
|
|
|
| class TestLanguageDetection: |
| def test_latin_script(self): |
| assert detect_script("Hello World") == "latin" |
|
|
| def test_cyrillic_script(self): |
| assert detect_script("Привет мир") == "cyrillic" |
|
|
| def test_arabic_script(self): |
| assert detect_script("مرحبا") == "arabic" |
|
|
| def test_cjk_script(self): |
| assert detect_script("你好世界") == "cjk" |
|
|
| def test_hangul_script(self): |
| assert detect_script("안녕하세요") == "hangul" |
|
|
| def test_thai_script(self): |
| assert detect_script("สวัสดี") == "thai" |
|
|
| def test_empty_text(self): |
| assert detect_script("") == "unknown" |
|
|
| def test_script_to_regions_cyrillic(self): |
| regions = script_to_regions("cyrillic") |
| countries = [r["country"] for r in regions] |
| assert "Russia" in countries |
|
|
| def test_text_to_country_hints_keyword(self): |
| hints = text_to_country_hints("I visited London last summer") |
| countries = [h["country"] for h in hints] |
| assert "United Kingdom" in countries |
|
|
|
|
| class TestPlateFormats: |
| def test_french_plate(self): |
| result = plate_format_to_country("AB123CD") |
| assert result is not None |
| assert result["country"] == "France" |
|
|
| def test_uk_plate(self): |
| result = plate_format_to_country("AB12CDE") |
| assert result is not None |
| assert result["country"] == "United Kingdom" |
|
|
| def test_spanish_plate(self): |
| result = plate_format_to_country("1234ABC") |
| assert result is not None |
| assert result["country"] == "Spain" |
|
|
| def test_russian_plate(self): |
| result = plate_format_to_country("A123BC77") |
| assert result is not None |
| assert result["country"] == "Russia" |
|
|
| def test_empty_plate(self): |
| assert plate_format_to_country("") is None |
|
|
|
|
| class TestLocationEstimator: |
| def test_gps_only(self): |
| collector = LocationEvidenceCollector() |
| collector.add_gps(48.85, 2.35) |
| estimator = LocationEstimator() |
| result = estimator.estimate(collector.evidence, gps={"lat": 48.85, "lon": 2.35}) |
| assert len(result.candidate_countries) > 0 |
| assert result.candidate_countries[0]["country"] == "France" |
| assert result.candidate_countries[0]["confidence"] > 0.5 |
|
|
| def test_ocr_text_evidence(self): |
| collector = LocationEvidenceCollector() |
| collector.add_ocr_text("Привет мир") |
| estimator = LocationEstimator() |
| result = estimator.estimate(collector.evidence) |
| countries = [c["country"] for c in result.candidate_countries] |
| assert "Russia" in countries |
|
|
| def test_no_evidence(self): |
| collector = LocationEvidenceCollector() |
| estimator = LocationEstimator() |
| result = estimator.estimate(collector.evidence) |
| assert result.candidate_countries == [] |
| assert result.overall_confidence == 0.0 |
|
|
| def test_conflicting_evidence(self): |
| collector = LocationEvidenceCollector() |
| |
| collector.add_gps(48.85, 2.35) |
| |
| collector.add_ocr_text("Привет мир") |
| estimator = LocationEstimator() |
| result = estimator.estimate(collector.evidence, gps={"lat": 48.85, "lon": 2.35}) |
| |
| assert len(result.candidate_countries) > 0 |
|
|