094e630da9229a7b5dac674dbd18ec30d7f9a3de
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', 504),
34 (u
'イーブイ', 'pokemon', 133),
35 (u
'Iibui', 'pokemon', 133),
36 (u
'Eievui', 'pokemon', 133),
37 (u
'이브이', 'pokemon', 133),
38 (u
'伊布', 'pokemon', 133),
39 (u
'Evoli', 'pokemon', 133),
42 for input, table
, id in tests
:
43 results
= lookup
.lookup(input)
44 assert_equal(len(results
), 1, u
"'%s' returns one result" % input
)
45 assert_equal(results
[0].exact
, True, u
"'%s' match exactly" % input
)
47 row
= results
[0].object
48 assert_equal(row
.__tablename__
, table
, u
"'%s' is in the right table" % input
)
49 assert_equal(row
.id, id, u
"'%s' returns the right id" % input
)
53 results
= lookup
.lookup(u
'1')
54 assert_true(len(results
) >= 5, u
'At least five things have id 1')
55 assert_true(all(_
.object.id == 1 for _
in results
),
56 u
'All results have id 1')
58 def test_multi_lookup():
59 results
= lookup
.lookup(u
'Metronome')
60 assert_equal(len(results
), 2, u
'Two things called "Metronome"')
61 assert_true(results
[0].exact
, u
'Metronome matches are exact')
64 def test_type_lookup():
65 results
= lookup
.lookup(u
'pokemon:1')
66 assert_equal(results
[0].object.__tablename__
, 'pokemon',
67 u
'Type restriction works correctly')
68 assert_equal(len(results
), 1, u
'Only one id result when type is specified')
69 assert_equal(results
[0].name
, u
'Bulbasaur', u
'Type + id returns the right result')
71 results
= lookup
.lookup(u
'1', valid_types
=['pokemon'])
72 assert_equal(results
[0].name
, u
'Bulbasaur', u
'valid_types works as well as type: prefix')
74 def test_language_lookup():
75 # There are two objects named "charge": the move Charge, and the move
76 # Tackle, which is called "Charge" in French.
77 results
= lookup
.lookup(u
'charge')
78 assert_true(len(results
) > 1, u
'There are multiple "charge"s')
80 results
= lookup
.lookup(u
'@fr:charge')
81 assert_equal(results
[0].iso639
, u
'fr', u
'Language restriction works correctly')
82 assert_equal(len(results
), 1, u
'Only one "charge" result when language is specified')
83 assert_equal(results
[0].object.name
, u
'Tackle',
84 u
'Language + vague name returns the right result')
86 results
= lookup
.lookup(u
'charge', valid_types
=['@fr'])
87 assert_equal(results
[0].object.name
, u
'Tackle',
88 u
'valid_types works as well as @lang: prefix')
90 results
= lookup
.lookup(u
'@fr,move:charge')
91 assert_equal(results
[0].object.name
, u
'Tackle',
92 u
'Languages and types both work together')
94 def test_fuzzy_lookup():
96 # Regular English names
97 (u
'chamander', u
'Charmander'),
98 (u
'pokeball', u
'Poké Ball'),
100 # Names with squiggles in them
101 (u
'farfetchd', u
"Farfetch'd"),
102 (u
'porygonz', u
'Porygon-Z'),
104 # Sufficiently long foreign names
105 (u
'カクレオ', u
'Kecleon'),
106 (u
'Yamikrasu', u
'Murkrow'),
109 for misspelling
, name
in tests
:
110 results
= lookup
.lookup(misspelling
)
111 first_result
= results
[0]
112 assert_equal(first_result
.object.name
, name
,
113 u
'Simple misspellings are corrected')
115 results
= lookup
.lookup(u
'Nidoran')
116 top_names
= [_
.object.name
for _
in results
[0:2]]
117 assert_true(u
'Nidoran♂' in top_names
, u
'Nidoran♂ is a top result for "Nidoran"')
118 assert_true(u
'Nidoran♀' in top_names
, u
'Nidoran♀ is a top result for "Nidoran"')
120 def test_wildcard_lookup():
122 (u
'pokemon:*meleon', u
'Charmeleon'),
123 (u
'item:master*', u
'Master Ball'),
124 (u
'ee?ee', u
'Eevee'),
127 for wildcard
, name
in tests
:
128 results
= lookup
.lookup(wildcard
)
129 first_result
= results
[0]
130 assert_equal(first_result
.object.name
, name
,
131 u
'Wildcards work correctly')
133 def test_random_lookup():
135 results
= lookup
.lookup(u
'random')
136 assert_equal(len(results
), 1, u
'Random returns one result')
138 for table_name
in [u
'pokemon', u
'moves', u
'items', u
'abilities', u
'types']:
139 results
= lookup
.lookup(u
'random', valid_types
=[table_name
])
140 assert_equal(len(results
), 1, u
'Constrained random returns one result')
141 assert_equal(results
[0].object.__tablename__
, table_name
,
142 u
'Constrained random returns result from the right table')