mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
0094e9584c
This commit updates the tests to take advantage of some of py.test's newer features. Requires py.test 2.3 or newer. Tested with 2.3.0 and 2.5.2. Tests which were parametrized now use py.test's built-in parametrization[1]. The session and lookup objects are now implemented as fixtures[2]. The media root is a fixture as well. Fixtures are automatically passed to any function that expects them. Since the session is now created in one place, it is now possible to provide an engine URI on the command line when running py.test. Ditto for the index directory. (But the environment variables still work of course.) Slow tests are now marked as such and not run unless the --all option is given. A couple media tests are marked as xfail (expected to fail) because they are broken. [1]: http://pytest.org/latest/parametrize.html [2]: http://pytest.org/latest/fixture.html
184 lines
6.7 KiB
Python
184 lines
6.7 KiB
Python
# Encoding: UTF-8
|
|
|
|
import csv
|
|
|
|
from pokedex.db import translations, tables
|
|
|
|
fake_version_names = (
|
|
'version_id,local_language_id,name',
|
|
'1,0,name1',
|
|
'2,0,name2',
|
|
'3,0,name3',
|
|
'3,1,othername3',
|
|
)
|
|
|
|
fake_translation_csv = (
|
|
'language_id,table,id,column,source_crc,string',
|
|
'0,Version,1,name,,name1',
|
|
'0,Version,2,name,,name2',
|
|
'0,Version,3,name,,name3',
|
|
'1,Version,3,name,,othername3',
|
|
)
|
|
|
|
def test_yield_source_csv_messages():
|
|
check_version_message_stream(translations.yield_source_csv_messages(
|
|
tables.Version.names_table,
|
|
tables.Version,
|
|
csv.reader(iter(fake_version_names)),
|
|
))
|
|
|
|
def test_yield_guessed_csv_messages():
|
|
check_version_message_stream(translations.yield_guessed_csv_messages(
|
|
iter(fake_translation_csv),
|
|
))
|
|
|
|
def test_yield_translation_csv_messages():
|
|
check_version_message_stream(translations.yield_translation_csv_messages(
|
|
iter(fake_translation_csv),
|
|
))
|
|
|
|
def check_version_message_stream(messages):
|
|
messages = list(messages)
|
|
assert messages[0].string == 'name1'
|
|
assert messages[1].string == 'name2'
|
|
assert messages[2].string == 'name3'
|
|
assert messages[3].string == 'othername3'
|
|
for message in messages[:3]:
|
|
assert message.language_id == 0
|
|
assert messages[3].language_id == 1
|
|
for id, message in zip((1, 2, 3, 3), messages):
|
|
assert message.merge_key == ('Version', id, 'name'), message.key
|
|
|
|
def get_messages(*rows):
|
|
return list(translations.yield_translation_csv_messages(iter(rows), True))
|
|
|
|
def test_merge_translations():
|
|
source = get_messages(
|
|
'0,Table,1,col,,none',
|
|
'0,Table,2,col,,new',
|
|
'0,Table,3,col,,existing',
|
|
'0,Table,4,col,,both',
|
|
'0,Table,5,col,,(gap)',
|
|
'0,Table,6,col,,new-bad',
|
|
'0,Table,7,col,,existing-bad',
|
|
'0,Table,8,col,,both-bad',
|
|
'0,Table,9,col,,new-bad-ex-good',
|
|
'0,Table,10,col,,new-good-ex-bad',
|
|
'0,Table,11,col,,(gap)',
|
|
'0,Table,12,col,,"Numbers: 1, 2, and 003"',
|
|
'0,Table,13,col,,"Numbers: 3, 2, and 001"',
|
|
)
|
|
new = get_messages(
|
|
'0,Table,2,col,%s,new' % translations.crc('new'),
|
|
'0,Table,4,col,%s,new' % translations.crc('both'),
|
|
'0,Table,6,col,%s,new' % translations.crc('----'),
|
|
'0,Table,8,col,%s,new' % translations.crc('----'),
|
|
'0,Table,9,col,%s,new' % translations.crc('----'),
|
|
'0,Table,10,col,%s,new' % translations.crc('new-good-ex-bad'),
|
|
'0,Table,12,col,%s,{num} {num} {num}' % translations.crc('Numbers: {num}, {num}, and {num}'),
|
|
'0,Table,13,col,%s,{num} {num} {num}' % translations.crc('----'),
|
|
'0,Table,100,col,%s,unused' % translations.crc('----'),
|
|
)
|
|
new[-3].number_replacement = True
|
|
new[-3].source = 'Numbers: 1, 2, and 003'
|
|
new[-2].number_replacement = True
|
|
new[-2].source = '----'
|
|
existing = get_messages(
|
|
'0,Table,3,col,%s,existing' % translations.crc('existing'),
|
|
'0,Table,4,col,%s,existing' % translations.crc('both'),
|
|
'0,Table,7,col,%s,existing' % translations.crc('----'),
|
|
'0,Table,8,col,%s,existing' % translations.crc('----'),
|
|
'0,Table,9,col,%s,existing' % translations.crc('new-bad-ex-good'),
|
|
'0,Table,10,col,%s,existing' % translations.crc('----'),
|
|
'0,Table,100,col,%s,unused' % translations.crc('----'),
|
|
)
|
|
expected_list = (
|
|
('none', None, None),
|
|
('new', True, 'new'),
|
|
('existing', True, 'existing'),
|
|
('both', True, 'new'),
|
|
('(gap)', None, None),
|
|
('new-bad', False, 'new'),
|
|
('existing-bad', False, 'existing'),
|
|
('both-bad', False, 'new'),
|
|
('new-bad-ex-good', True, 'existing'),
|
|
('new-good-ex-bad', True, 'new'),
|
|
('(gap)', None, None),
|
|
('Numbers: 1, 2, and 003', True, '1 2 003'),
|
|
('Numbers: 3, 2, and 001', False, '3 2 001'),
|
|
)
|
|
unused = []
|
|
result_stream = list(translations.merge_translations(source, new, [], existing, unused=unused.append))
|
|
for result, expected in zip(result_stream, expected_list):
|
|
res_src, res_crc, res_str, res_match = result
|
|
exp_src, exp_match, exp_str = expected
|
|
print result, expected
|
|
assert res_src.string == exp_src
|
|
assert res_str == exp_str, (res_str, exp_str)
|
|
if exp_match is None:
|
|
assert res_crc is None
|
|
elif exp_match is True:
|
|
assert res_crc == translations.crc(res_src.string)
|
|
elif exp_match is False:
|
|
assert res_crc == translations.crc('----')
|
|
assert res_match == exp_match
|
|
print 'unused:', unused
|
|
for message in unused:
|
|
assert message.string == 'unused'
|
|
assert message.id == 100
|
|
|
|
def test_merge():
|
|
check_merge((0, 1, 2, 3))
|
|
check_merge((0, 1), (2, 3))
|
|
check_merge((2, 3), (0, 1))
|
|
check_merge((0, 2), (1, 3))
|
|
check_merge((0, 3), (1, 2))
|
|
check_merge((0, 1), (2, 3), (2, 3))
|
|
|
|
def check_merge(*sequences):
|
|
merged = list(translations.Merge(*sequences))
|
|
concatenated = [val for seq in sequences for val in seq]
|
|
assert merged == sorted(concatenated)
|
|
|
|
def test_merge_dynamic_add():
|
|
merge = translations.Merge((1, 2, 3))
|
|
def adder():
|
|
for val in (1, 2, 3):
|
|
yield val
|
|
merge.add_iterator([4])
|
|
merge.add_iterator(adder())
|
|
assert tuple(merge) == (1, 1, 2, 2, 3, 3, 4, 4, 4)
|
|
|
|
def test_merge_adjacent():
|
|
messages = get_messages(
|
|
'0,Table,1,col,,strA',
|
|
'0,Table,2,col,,strB',
|
|
'0,Table,2,col,,strC',
|
|
'0,Table,2,col,,strB',
|
|
'0,Table,2,col,,strD',
|
|
'0,Table,3,col,,strE',
|
|
)
|
|
result = [m.string for m in translations.merge_adjacent(messages)]
|
|
expected = ['strA', 'strB\n\nstrC\n\nstrD', 'strE']
|
|
assert result == expected
|
|
|
|
def test_leftjoin():
|
|
check_leftjoin([], [], [], [])
|
|
check_leftjoin([], [1], [], [1])
|
|
check_leftjoin([], [1, 2], [], [1, 2])
|
|
check_leftjoin([1], [], [(1, None)], [])
|
|
check_leftjoin([1], [1], [(1, 1)], [])
|
|
check_leftjoin([1], [2], [(1, None)], [2])
|
|
check_leftjoin([1, 2], [1], [(1, 1), (2, None)], [])
|
|
check_leftjoin([1, 2], [1, 2], [(1, 1), (2, 2)], [])
|
|
check_leftjoin([1], [1, 2], [(1, 1)], [2])
|
|
check_leftjoin([1, 2], [1, 3], [(1, 1), (2, None)], [3])
|
|
check_leftjoin([1, 2, 3], [1, 3], [(1, 1), (2, None), (3, 3)], [])
|
|
check_leftjoin([1, 2, 2, 3], [1, 3], [(1, 1), (2, None), (2, None), (3, 3)], [])
|
|
check_leftjoin([1, 2, 2, 3], [2, 2, 2], [(1, None), (2, 2), (2, 2), (3, None)], [2])
|
|
|
|
def check_leftjoin(seqa, seqb, expected, expected_unused):
|
|
unused = []
|
|
result = list(translations.leftjoin(seqa, seqb, unused=unused.append))
|
|
assert result == list(expected)
|
|
assert unused == list(expected_unused)
|