45 lines
2.5 KiB
Python
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()
|