mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-15 19:07:58 +00:00
convert special phrase loaders to generators
Generators simplify the code quite a bit compared to the previous Iterator approach.
This commit is contained in:
@@ -12,50 +12,6 @@ import pytest
|
||||
from nominatim.errors import UsageError
|
||||
from nominatim.tools.special_phrases.sp_csv_loader import SPCsvLoader
|
||||
|
||||
def test_parse_csv(sp_csv_loader):
|
||||
"""
|
||||
Test method parse_csv()
|
||||
Should return the right SpecialPhrase objects.
|
||||
"""
|
||||
phrases = sp_csv_loader.parse_csv()
|
||||
assert check_phrases_content(phrases)
|
||||
|
||||
def test_next(sp_csv_loader):
|
||||
"""
|
||||
Test objects returned from the next() method.
|
||||
It should return all SpecialPhrases objects of
|
||||
the sp_csv_test.csv special phrases.
|
||||
"""
|
||||
phrases = next(sp_csv_loader)
|
||||
assert check_phrases_content(phrases)
|
||||
|
||||
def test_check_csv_validity(sp_csv_loader):
|
||||
"""
|
||||
Test method check_csv_validity()
|
||||
It should raise an exception when file with a
|
||||
different exception than .csv is given.
|
||||
"""
|
||||
sp_csv_loader.csv_path = 'test.csv'
|
||||
sp_csv_loader.check_csv_validity()
|
||||
sp_csv_loader.csv_path = 'test.wrong'
|
||||
with pytest.raises(UsageError):
|
||||
assert sp_csv_loader.check_csv_validity()
|
||||
|
||||
def check_phrases_content(phrases):
|
||||
"""
|
||||
Asserts that the given phrases list contains
|
||||
the right phrases of the sp_csv_test.csv special phrases.
|
||||
"""
|
||||
return len(phrases) > 1 \
|
||||
and any(p.p_label == 'Billboard'
|
||||
and p.p_class == 'advertising'
|
||||
and p.p_type == 'billboard'
|
||||
and p.p_operator == '-' for p in phrases) \
|
||||
and any(p.p_label == 'Zip Lines'
|
||||
and p.p_class == 'aerialway'
|
||||
and p.p_type == 'zip_line'
|
||||
and p.p_operator == '-' for p in phrases)
|
||||
|
||||
@pytest.fixture
|
||||
def sp_csv_loader(src_dir):
|
||||
"""
|
||||
@@ -64,3 +20,35 @@ def sp_csv_loader(src_dir):
|
||||
csv_path = (src_dir / 'test' / 'testdata' / 'sp_csv_test.csv').resolve()
|
||||
loader = SPCsvLoader(csv_path)
|
||||
return loader
|
||||
|
||||
|
||||
def test_generate_phrases(sp_csv_loader):
|
||||
"""
|
||||
Test method parse_csv()
|
||||
Should return the right SpecialPhrase objects.
|
||||
"""
|
||||
phrases = list(sp_csv_loader.generate_phrases())
|
||||
|
||||
assert len(phrases) == 41
|
||||
assert len(set(phrases)) == 41
|
||||
|
||||
assert any(p.p_label == 'Billboard'
|
||||
and p.p_class == 'advertising'
|
||||
and p.p_type == 'billboard'
|
||||
and p.p_operator == '-' for p in phrases)
|
||||
assert any(p.p_label == 'Zip Lines'
|
||||
and p.p_class == 'aerialway'
|
||||
and p.p_type == 'zip_line'
|
||||
and p.p_operator == '-' for p in phrases)
|
||||
|
||||
|
||||
def test_invalid_cvs_file():
|
||||
"""
|
||||
Test method check_csv_validity()
|
||||
It should raise an exception when file with a
|
||||
different exception than .csv is given.
|
||||
"""
|
||||
loader = SPCsvLoader('test.wrong')
|
||||
|
||||
with pytest.raises(UsageError, match='not a csv file'):
|
||||
next(loader.generate_phrases())
|
||||
|
||||
Reference in New Issue
Block a user