Files
2026-10-14 12:42:58 +00:00

45 lines
2.5 KiB
Python

#!/usr/bin/env python3
from pathlib import Path
import csv,json,unittest
ROOT=Path(__file__).resolve().parents[1]
def load(file,comments=False):
with file.open(encoding='utf-8-sig',newline='') as f:
if comments: content=(line for line in f if not line.startswith('#'))
else:content=f
return list(csv.DictReader(content))
class TestBGMLegend(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.rules={r['code']:r for r in load(ROOT/'config/poi-overrides-legend-reviewed.csv',True)}
cls.strict={r['code']:r for r in load(ROOT/'data/BGMountains-unique-poi-types-STRICT-reviewed.csv')}
cls.legacy={r['code']:r for r in load(ROOT/'data/BGMountains-unique-poi-types-reviewed.csv')}
cls.corrections=load(ROOT/'data/legend-corrections-log.csv')
cls.names=load(ROOT/'data/extended-label-decoder-changes.csv')
def test_catalog_counts(self):
self.assertEqual(len(self.rules),1871)
self.assertEqual(len(self.legacy),1871)
self.assertEqual(len(self.strict),263)
self.assertEqual(sum(int(x['count']) for x in self.strict.values()),410563)
self.assertEqual(sum(int(x['outside_subdivision_count']) for x in self.legacy.values()),5602)
self.assertEqual(int(self.strict['0x6608']['count']),2644)
self.assertNotIn('0x10d1f',self.strict)
def test_legend_exact_icons(self):
self.assertEqual(len(self.corrections),60)
self.assertEqual(len(json.loads((ROOT/"data/legend-mappings.json").read_text(encoding="utf-8"))),67)
self.assertEqual(len(self.names),117)
for c in self.corrections:
rule=self.rules[c['code']]
self.assertTrue(rule['tags'].startswith('garmin:legend='))
self.assertEqual(rule['tags'],c['new_override_tags'])
self.assertEqual(self.strict[c['code']]['review_status'],'icon_legend_verified')
self.assertIn('tourism=hotel',self.rules['0x6608']['tags'])
self.assertIn('natural=spring',self.rules['0x6511']['tags'])
self.assertNotIn('information=guidepost',self.rules['0x6503']['tags'])
self.assertIn('tourism=camp_site',self.rules['0x6415']['tags'])
def test_false_nesebar_handled_correctly(self):
one=self.legacy['0x10d1f']
self.assertEqual(one['example1_name'],'есебър')
self.assertEqual(one['strict_count'],'0')
self.assertTrue(any(r['code']=='0x10d1f' and r['new_name']=='' for r in self.names))
if __name__=='__main__':unittest.main()