test_main uses test_utils plus more tests

This commit is contained in:
cclauss 2017-07-04 08:01:39 +02:00 committed by GitHub
parent 70ed2d0fb4
commit 2e9c5964d5

View file

@ -1,16 +1,14 @@
#!/usr/bin/env python -m pytest --capture=sys
#!/usr/bin/env python3
# To run the tests, use: python3 -m pytest --capture=sys
from collections import namedtuple
from database import Database
from main import main
import pytest
from test_utils import region_dict
region_record = namedtuple('region_record', 'roman_number start end')
region_dict = {"kanto": region_record("I", 1, 151),
"johto": region_record("II", 152, 251),
"hoenn": region_record("III", 252, 386),
"sinnoh": region_record("IV", 387, 493),
"extra": region_record("", 494, 100000)}
db = Database()
print(len(db))
def test_no_args(capsys):
@ -19,38 +17,81 @@ def test_no_args(capsys):
assert out.startswith("No command line arguments specified.")
def test_len():
# Database unfortunately makes db.__MAX_ID private :-(
__MAX_ID = 493
assert len(db) == __MAX_ID + len(db.get_extra())
def _test_region(region_name):
region_name = (region_name or 'extra').lower()
# Database unfortunately makes db.__get_region() private :-(
func = {"kanto": db.get_kanto,
"johto": db.get_johto,
"hoenn": db.get_hoenn,
"sinnoh": db.get_sinnoh,
"extra": db.get_extra}[region_name]
pokemon_list = func()
region_record = region_dict[region_name]
start = region_record.start
end = len(db) if region_name == "extra" else region_record.end
# make sure there are no missing pokemon
assert len(pokemon_list) == end - start + 1
if region_name == "extra":
return
# make sure that all pokemon.id are in the ID range
assert all([start <= int(p.get_id()) <= end for p in pokemon_list])
def test_regions():
for region_name in region_dict:
_test_region(region_name)
def test_three_args(capsys):
main([__file__, 1, 2, 3])
out, err = capsys.readouterr()
assert out.startswith("Invalid number of arguments.")
def test_two_letters(capsys):
main([__file__, 'bu'])
out, err = capsys.readouterr()
assert 'Butterfree' in out
# prefix search only
main([__file__, 'ut'])
out, err = capsys.readouterr()
assert 'butterfree' not in out.lower()
def failing_test_extra(capsys): # FIXME
main([__file__, 'extra'])
out, err = capsys.readouterr()
assert out.count('Castform') == 3, out
assert 'turtwig' not in out.lower()
def test_region_names(capsys):
main([__file__, 'regions'])
out, err = capsys.readouterr()
for region_name in region_dict:
assert region_name in out
def test_help(capsys):
main([__file__, 'help'])
out, err = capsys.readouterr()
assert 'Usage:' in out
main([__file__, '-h'])
out2, err = capsys.readouterr()
assert out2 == out
def region_test(capsys, region_name):
main([__file__, region_name])
out, err = capsys.readouterr()
# matrix test of first pokemon name and last pokemon name from all regions
for name, region_info in region_dict.items():
if name == 'extra':
continue
assert (region_info.first in out) == (name == region_name)
assert (region_info.last in out) == (name == region_name)
def test_kanto(capsys):
region_test(capsys, 'kanto')
def test_johto(capsys):
region_test(capsys, 'johto')
def test_hoenn(capsys):
region_test(capsys, 'hoenn')
def test_sinnoh(capsys):
region_test(capsys, 'sinnoh')
def test_all(capsys):
main([__file__, 'all'])
out, err = capsys.readouterr()
for region_info in region_dict.values():
assert (region_info.first or '') in out # convert None --> ''
assert (region_info.last or '') in out # convert None --> ''
def test_question_mark(capsys):
main([__file__, '?'])
out, err = capsys.readouterr()
assert 'deprecated' in out