'''
Created on 2020-09-19
@author: wf
'''
import unittest
import geograpy
from geograpy.locator import Locator
from collections import Counter
import os
import re
[docs]class TestLocator(unittest.TestCase):
'''
test the Locator class from the location module
'''
[docs] def setUp(self):
self.debug=True
pass
[docs] def tearDown(self):
pass
[docs] def testGeolite2Cities(self):
'''
test the locs.db cache for cities
'''
loc=Locator()
cities=loc.getGeolite2Cities()
if self.debug:
print("Found %d cities " % len(cities))
self.assertEqual(121223,len(cities))
pass
[docs] def testHasData(self):
'''
check has data and populate functionality
'''
loc=Locator()
if os.path.isfile(loc.db_file):
os.remove(loc.db_file)
# reinit sqlDB
loc=Locator()
self.assertFalse(loc.db_has_data())
loc.populate_db()
self.assertTrue(loc.db_has_data())
[docs] def testIsoRegexp(self):
'''
test regular expression for iso codes
'''
loc=Locator.getInstance()
self.assertFalse(loc.isISO('Singapore'))
query="""
select distinct country_iso_code as isocode from cities
union
select distinct subdivision_1_iso_code as isocode from cities
union
select distinct subdivision_1_iso_code as isocode from cities
"""
loc.populate_db()
isocodeRecords=loc.sqlDB.query(query)
for isocodeRecord in isocodeRecords:
isocode=isocodeRecord['isocode']
if isocode:
self.assertTrue(loc.isISO(isocode))
[docs] def testWordCount(self):
'''
test the word count
'''
loc=Locator.getInstance()
query="SELECT city_name AS name from CITIES"
nameRecords=loc.sqlDB.query(query)
print ("found %d names" % len(nameRecords))
wc=Counter()
for nameRecord in nameRecords:
name=nameRecord['name']
words=re.split(r"\W+",name)
wc[len(words)]+=1
print (wc.most_common(20))
[docs] def testExamples(self):
'''
test examples
'''
examples=['Amsterdam, Netherlands', 'Vienna, Austria','Vienna IL','Paris - Texas', 'Paris TX',
'Austin, TX','Austin Texas','Auckland, New Zealand']
countries=['NL','AT','US','US','US','US','US','NZ']
for index,example in enumerate(examples):
city=geograpy.locate(example)
if self.debug:
print("%22s->%s" % (example,city))
self.assertEquals(countries[index],city.country.iso)
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.testName']
unittest.main()