Pokemon-Terminal/test_main.py
Samuel Henrique cc51b5d957 More testing
- Main resets the pokemon list if not called directly
2017-07-07 16:03:00 -03:00

86 lines
2.8 KiB
Python

#!/usr/bin/env python3
# To run the tests, use: python3 -m pytest --capture=sys
from database import Database
from filters import Filter
import filters
from main import main
from test_utils import region_dict
import random
db = Database()
def broken_test_no_args(capsys):
""" FIXME: Now the the main file accepts zero arguments """
main([__file__])
out, err = capsys.readouterr()
assert out.startswith("No command line arguments specified.")
def broken_test_three_args(capsys):
""" FIXME: Now the main file accepts way more then 3 arguments """
main([__file__, 1, 2, 3])
out, err = capsys.readouterr()
assert out.startswith("Invalid number of arguments.")
def broken_test_two_letters(capsys):
""" FIXME: The search argorhytm is now bultin the name filter """
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 test_extra(capsys):
main(['-e', '-dr'])
# TODO: Assertion based on number of files on ./Extras
assert str(random.choice(Filter.filtered_list)).startswith('---')
def test_region_names(capsys):
try:
main(['-r', 'wrong_region', '-dr'])
except SystemExit:
pass # It's supposed to crash.
err: str = capsys.readouterr()[1].strip()
assert err.endswith("(choose from 'kanto', 'johto', 'hoenn', 'sinnoh')")
def test_all(capsys):
main(['-dr', '-ne'])
out = capsys.readouterr()[0]
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_region(capsys):
regFilter = filters.RegionFilter(None, None)
noExtras = filters.NonExtrasFilter(None, None)
# matrix test of first pokemon name and last pokemon name from all regions
for name, region_info in region_dict.items():
filtered = [p for p in Filter.POKEMON_LIST
if regFilter.matches(p, name) and noExtras.matches(p, None)]
assert len(filtered) == region_info.size
assert random.choice(filtered).get_region() == name
assert filtered[0].get_id() == ('%03d' % (region_info.start))
assert filtered[-1].get_id() == ('%03d' % (region_info.end))
assert filtered[0].get_name() == region_info.first.lower()
assert filtered[-1].get_name() == region_info.last.lower()
if __name__ == '__main__':
# Test runner: Runs all functions whose name begins with `test_`
# locals() changes when trying to do this without the list comprehension!!!
name_funcs = [(n, f) for n, f in locals().items() if n.startswith('test_')]
for name, func in name_funcs:
if callable(func):
func()
else:
print(name + ' is not callable()!')