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
156 lines
4.4 KiB
Python
156 lines
4.4 KiB
Python
# Encoding: UTF-8
|
|
|
|
import pytest
|
|
parametrize = pytest.mark.parametrize
|
|
|
|
@parametrize(
|
|
('input', 'table', 'id'),
|
|
[
|
|
# Simple lookups
|
|
(u'Eevee', 'pokemon_species',133),
|
|
(u'Scratch', 'moves', 10),
|
|
(u'Master Ball', 'items', 1),
|
|
(u'normal', 'types', 1),
|
|
(u'Run Away', 'abilities', 50),
|
|
|
|
# Funny characters
|
|
(u'Mr. Mime', 'pokemon_species', 122),
|
|
(u"Farfetch'd", 'pokemon_species', 83),
|
|
(u'Poké Ball', 'items', 4),
|
|
|
|
# Forms
|
|
(u'Rotom', 'pokemon_species', 479),
|
|
(u'Wash Rotom', 'pokemon_forms', 10059),
|
|
(u'East Shellos', 'pokemon_forms', 10039),
|
|
|
|
# Other languages
|
|
(u'イーブイ', 'pokemon_species', 133),
|
|
(u'Iibui', 'pokemon_species', 133),
|
|
(u'Eievui', 'pokemon_species', 133),
|
|
(u'이브이', 'pokemon_species', 133),
|
|
(u'伊布', 'pokemon_species', 133),
|
|
(u'Evoli', 'pokemon_species', 133),
|
|
]
|
|
)
|
|
def test_exact_lookup(lookup, input, table, id):
|
|
results = lookup.lookup(input)
|
|
assert len(results) == 1
|
|
assert results[0].exact == True
|
|
|
|
row = results[0].object
|
|
assert row.__tablename__ == table
|
|
assert row.id == id
|
|
|
|
|
|
def test_id_lookup(lookup):
|
|
results = lookup.lookup(u'1')
|
|
assert len(results) >= 5
|
|
assert all(result.object.id == 1 for result in results)
|
|
|
|
|
|
def test_multi_lookup(lookup):
|
|
results = lookup.lookup(u'Metronome')
|
|
assert len(results) == 2
|
|
assert results[0].exact
|
|
|
|
|
|
def test_type_lookup(lookup):
|
|
results = lookup.lookup(u'pokemon:1')
|
|
assert results[0].object.__tablename__ == 'pokemon_species'
|
|
assert len(results) == 1
|
|
assert results[0].object.name == u'Bulbasaur'
|
|
|
|
results = lookup.lookup(u'1', valid_types=['pokemon_species'])
|
|
assert results[0].object.name == u'Bulbasaur'
|
|
|
|
|
|
def test_language_lookup(lookup):
|
|
# There are two objects named "charge": the move Charge, and the move
|
|
# Tackle, which is called "Charge" in French.
|
|
results = lookup.lookup(u'charge')
|
|
assert len(results) > 1
|
|
|
|
results = lookup.lookup(u'@fr:charge')
|
|
assert results[0].iso639 == u'fr'
|
|
assert len(results) == 1
|
|
assert results[0].object.name == u'Tackle'
|
|
|
|
results = lookup.lookup(u'charge', valid_types=['@fr'])
|
|
assert results[0].object.name == u'Tackle'
|
|
|
|
results = lookup.lookup(u'@fr,move:charge')
|
|
assert results[0].object.name == u'Tackle'
|
|
|
|
results = lookup.lookup(u'@fr:charge', valid_types=['move'])
|
|
assert results[0].object.name, u'Tackle'
|
|
|
|
|
|
@parametrize(
|
|
('misspelling', 'name'),
|
|
[
|
|
# Regular English names
|
|
(u'chamander', u'Charmander'),
|
|
(u'pokeball', u'Poké Ball'),
|
|
|
|
# Names with squiggles in them
|
|
(u'farfetchd', u"Farfetch'd"),
|
|
(u'porygonz', u'Porygon-Z'),
|
|
|
|
# Sufficiently long foreign names
|
|
(u'カクレオ', u'Kecleon'),
|
|
(u'Yamikrasu', u'Murkrow'),
|
|
]
|
|
)
|
|
def test_fuzzy_lookup(lookup, misspelling, name):
|
|
results = lookup.lookup(misspelling)
|
|
first_result = results[0]
|
|
assert first_result.object.name == name
|
|
|
|
|
|
def test_nidoran(lookup):
|
|
results = lookup.lookup(u'Nidoran')
|
|
top_names = [result.object.name for result in results[0:2]]
|
|
assert u'Nidoran♂' in top_names
|
|
assert u'Nidoran♀' in top_names
|
|
|
|
|
|
@parametrize(
|
|
('wildcard', 'name'),
|
|
[
|
|
(u'pokemon:*meleon', u'Charmeleon'),
|
|
(u'item:master*', u'Master Ball'),
|
|
(u'ee?ee', u'Eevee'),
|
|
]
|
|
)
|
|
def test_wildcard_lookup(lookup, wildcard, name):
|
|
results = lookup.lookup(wildcard)
|
|
first_result = results[0]
|
|
assert first_result.object.name == name
|
|
|
|
|
|
def test_bare_random(lookup):
|
|
for i in range(5):
|
|
results = lookup.lookup(u'random')
|
|
assert len(results) == 1
|
|
|
|
|
|
@parametrize(
|
|
'table_name',
|
|
[
|
|
u'pokemon_species',
|
|
u'moves',
|
|
u'items',
|
|
u'abilities',
|
|
u'types'
|
|
]
|
|
)
|
|
def test_qualified_random(lookup, table_name):
|
|
results = lookup.lookup(u'random', valid_types=[table_name])
|
|
assert len(results) == 1
|
|
assert results[0].object.__tablename__ == table_name
|
|
|
|
|
|
def test_crash_empty_prefix(lookup):
|
|
"""Searching for ':foo' used to crash, augh!"""
|
|
results = lookup.lookup(u':Eevee')
|
|
assert results[0].object.name == u'Eevee'
|