2 from nose
.tools
import *
5 from pokedex
.lookup
import PokedexLookup
12 lookup
= PokedexLookup()
13 lookup
.rebuild_index()
15 def test_exact_lookup():
18 (u
'Eevee', 'pokemon', 133),
19 (u
'Scratch', 'moves', 10),
20 (u
'Master Ball', 'items', 1),
21 (u
'normal', 'types', 1),
22 (u
'Run Away', 'abilities', 50),
25 (u
'Mr. Mime', 'pokemon', 122),
26 (u
"Farfetch'd", 'pokemon', 83),
27 (u
'Poké Ball', 'items', 4),
30 (u
'Rotom', 'pokemon', 479),
31 (u
'Wash Rotom', 'pokemon_forms',10059),
32 (u
'East Shellos', 'pokemon_forms',10039),
35 (u
'イーブイ', 'pokemon', 133),
36 (u
'Iibui', 'pokemon', 133),
37 (u
'Eievui', 'pokemon', 133),
38 (u
'이브이', 'pokemon', 133),
39 (u
'伊布', 'pokemon', 133),
40 (u
'Evoli', 'pokemon', 133),
43 for input, table
, id in tests
:
44 results
= lookup
.lookup(input)
45 assert_equal(len(results
), 1, u
"'%s' returns one result" % input
)
46 assert_equal(results
[0].exact
, True, u
"'%s' match exactly" % input
)
48 row
= results
[0].object
49 assert_equal(row
.__tablename__
, table
, u
"'%s' is in the right table" % input
)
50 assert_equal(row
.id, id, u
"'%s' returns the right id" % input
)
54 results
= lookup
.lookup(u
'1')
55 assert_true(len(results
) >= 5, u
'At least five things have id 1')
56 assert_true(all(_
.object.id == 1 for _
in results
),
57 u
'All results have id 1')
59 def test_multi_lookup():
60 results
= lookup
.lookup(u
'Metronome')
61 assert_equal(len(results
), 2, u
'Two things called "Metronome"')
62 assert_true(results
[0].exact
, u
'Metronome matches are exact')
65 def test_type_lookup():
66 results
= lookup
.lookup(u
'pokemon:1')
67 assert_equal(results
[0].object.__tablename__
, 'pokemon',
68 u
'Type restriction works correctly')
69 assert_equal(len(results
), 1, u
'Only one id result when type is specified')
70 assert_equal(results
[0].object.name
, u
'Bulbasaur',
71 u
'Type + id returns the right result')
73 results
= lookup
.lookup(u
'1', valid_types
=['pokemon'])
74 assert_equal(results
[0].object.name
, u
'Bulbasaur',
75 u
'valid_types works as well as type: prefix')
77 def test_language_lookup():
78 # There are two objects named "charge": the move Charge, and the move
79 # Tackle, which is called "Charge" in French.
80 results
= lookup
.lookup(u
'charge')
81 assert_true(len(results
) > 1, u
'There are multiple "charge"s')
83 results
= lookup
.lookup(u
'@fr:charge')
84 assert_equal(results
[0].iso639
, u
'fr', u
'Language restriction works correctly')
85 assert_equal(len(results
), 1, u
'Only one "charge" result when language is specified')
86 assert_equal(results
[0].object.name
, u
'Tackle',
87 u
'Language + vague name returns the right result')
89 results
= lookup
.lookup(u
'charge', valid_types
=['@fr'])
90 assert_equal(results
[0].object.name
, u
'Tackle',
91 u
'valid_types works as well as @lang: prefix')
93 results
= lookup
.lookup(u
'@fr,move:charge')
94 assert_equal(results
[0].object.name
, u
'Tackle',
95 u
'Languages and types both work together')
97 results
= lookup
.lookup(u
'@fr:charge', valid_types
=['move'])
98 assert_equal(results
[0].object.name
, u
'Tackle',
99 u
'valid_types and language prefixes get along')
101 def test_fuzzy_lookup():
103 # Regular English names
104 (u
'chamander', u
'Charmander'),
105 (u
'pokeball', u
'Poké Ball'),
107 # Names with squiggles in them
108 (u
'farfetchd', u
"Farfetch'd"),
109 (u
'porygonz', u
'Porygon-Z'),
111 # Sufficiently long foreign names
112 (u
'カクレオ', u
'Kecleon'),
113 (u
'Yamikrasu', u
'Murkrow'),
116 for misspelling
, name
in tests
:
117 results
= lookup
.lookup(misspelling
)
118 first_result
= results
[0]
119 assert_equal(first_result
.object.name
, name
,
120 u
'Simple misspellings are corrected')
122 results
= lookup
.lookup(u
'Nidoran')
123 top_names
= [_
.object.name
for _
in results
[0:2]]
124 assert_true(u
'Nidoran♂' in top_names
, u
'Nidoran♂ is a top result for "Nidoran"')
125 assert_true(u
'Nidoran♀' in top_names
, u
'Nidoran♀ is a top result for "Nidoran"')
127 def test_wildcard_lookup():
129 (u
'pokemon:*meleon', u
'Charmeleon'),
130 (u
'item:master*', u
'Master Ball'),
131 (u
'ee?ee', u
'Eevee'),
134 for wildcard
, name
in tests
:
135 results
= lookup
.lookup(wildcard
)
136 first_result
= results
[0]
137 assert_equal(first_result
.object.name
, name
,
138 u
'Wildcards work correctly')
140 def test_random_lookup():
142 results
= lookup
.lookup(u
'random')
143 assert_equal(len(results
), 1, u
'Random returns one result')
145 for table_name
in [u
'pokemon', u
'moves', u
'items', u
'abilities', u
'types']:
146 results
= lookup
.lookup(u
'random', valid_types
=[table_name
])
147 assert_equal(len(results
), 1, u
'Constrained random returns one result')
148 assert_equal(results
[0].object.__tablename__
, table_name
,
149 u
'Constrained random returns result from the right table')
151 def test_crash_empty_prefix():
152 """Searching for ':foo' used to crash, augh!"""
153 results
= lookup
.lookup(u
'Eevee')
154 assert_equal(results
[0].object.name
, u
'Eevee', u
'Empty prefix dun crash')