new tests

fix goblin and orc generators
This commit is contained in:
Tiendil 2014-01-20 14:58:06 +03:00
parent 7bd0b79acc
commit e582920703
10 changed files with 112 additions and 29 deletions

View file

@ -3,7 +3,7 @@
import os
from ..from_tables_generator import FromTablesGenerator
from pynames.from_tables_generator import FromTablesGenerator
FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixtures')
@ -12,8 +12,3 @@ class WarhammerNamesGenerator(FromTablesGenerator):
class DnDNamesGenerator(FromTablesGenerator):
SOURCE = os.path.join(FIXTURES_DIR, 'dnd_names_tables.json')

View file

@ -25,7 +25,7 @@ class BaseGenerator(object):
class Name(object):
__slots__ = ('genders', 'native_language', 'translations')
def __init__(self, native_language, data):
@ -41,7 +41,7 @@ class Name(object):
def exists_for(self, genders):
return genders & self.genders
def __unicode__(self):
def __unicode__(self):
for gender in GENDER.ALL:
if gender in self.genders:
return self.translations[gender][self.native_language]
@ -49,5 +49,3 @@ class Name(object):
raise PynamesException(error_msg)
def __str__(self): return self.__unicode__()

View file

@ -0,0 +1,10 @@
# coding: utf-8
import os
from pynames.from_tables_generator import FromTablesGenerator
FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixtures')
class GoblinGenerator(FromTablesGenerator):
SOURCE = os.path.join(FIXTURES_DIR, 'goblin_names_tables.json')

View file

@ -3,17 +3,17 @@
"languages": ["ru"],
"native_language": "ru",
"templates": { "male": {"probability": 1,
"genders": ["m"],
"template": ["prefixes", "male_suffixes"]},
"genders": ["m"],
"template": ["prefixes", "male_suffixes"]},
"female": {"probability": 1,
"genders": ["f"],
"template": ["prefixes", "female_suffixes"]}
"genders": ["f"],
"template": ["prefixes", "female_suffixes"]}
},
"tables": { "apostrophe": [{"languages": {"ru": "'"}}],
"prefixes": [{"languages": {"ru": "Б"}},
{"languages": {"ru": "Бв"}},
{"languages": {"ru": "Бг"}},
{"languages": {"ru": "Бд"}},
"prefixes": [{"languages": {"ru": "Б"}},
{"languages": {"ru": "Бв"}},
{"languages": {"ru": "Бг"}},
{"languages": {"ru": "Бд"}},
{"languages": {"ru": "Бж"}},
{"languages": {"ru": "Бз"}},
{"languages": {"ru": "Бл"}},

View file

@ -1,10 +1,9 @@
# coding: utf-8
import os
from ..from_list_generator import FromListGenerator
from pynames.from_list_generator import FromListGenerator
FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixtures')
class MongolianNamesGenerator(FromListGenerator):
SOURCE = os.path.join(FIXTURES_DIR, 'mongolian_names_list.json')

9
pynames/orc/__init__.py Normal file
View file

@ -0,0 +1,9 @@
# coding: utf-8
import os
from pynames.from_list_generator import FromListGenerator
FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixtures')
class OrcNamesGenerator(FromListGenerator):
SOURCE = os.path.join(FIXTURES_DIR, 'orc_names_list.json')

View file

@ -1 +1,4 @@
# coding: utf-8
from pynames.tests.test import *
from pynames.tests.test_generators import *

View file

@ -3,9 +3,9 @@
import os
import unittest
from ..generators import Name, GENDER, LANGUAGE
from ..from_list_generator import FromListGenerator
from ..from_tables_generator import FromTablesGenerator
from pynames.generators import Name, GENDER, LANGUAGE
from pynames.from_list_generator import FromListGenerator
from pynames.from_tables_generator import FromTablesGenerator
FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixtures')
@ -71,15 +71,15 @@ class TestFromListGenerator(unittest.TestCase):
for i in xrange(100):
name = generator.get_name_simple(gender=GENDER.MALE, language=LANGUAGE.RU)
self.assertTrue(name in self.NAMES_RU_MALE)
self.assertTrue(name in self.NAMES_RU_MALE)
for i in xrange(100):
name = generator.get_name_simple(gender=GENDER.FEMALE, language=LANGUAGE.RU)
self.assertTrue(name in self.NAMES_RU_FEMALE)
self.assertTrue(name in self.NAMES_RU_FEMALE)
for i in xrange(100):
name = generator.get_name_simple(gender=GENDER.MALE, language=LANGUAGE.EN)
self.assertTrue(name in self.NAMES_EN_MALE)
self.assertTrue(name in self.NAMES_EN_MALE)
for i in xrange(100):
name = generator.get_name_simple(gender=GENDER.FEMALE, language=LANGUAGE.EN)
@ -120,15 +120,15 @@ class TestFromTablesGenerator(unittest.TestCase):
for i in xrange(100):
name = generator.get_name_simple(gender=GENDER.MALE, language=LANGUAGE.RU)
self.assertTrue(name in self.NAMES_RU_MALE)
self.assertTrue(name in self.NAMES_RU_MALE)
for i in xrange(100):
name = generator.get_name_simple(gender=GENDER.FEMALE, language=LANGUAGE.RU)
self.assertTrue(name in self.NAMES_RU_FEMALE)
self.assertTrue(name in self.NAMES_RU_FEMALE)
for i in xrange(100):
name = generator.get_name_simple(gender=GENDER.MALE, language=LANGUAGE.EN)
self.assertTrue(name in self.NAMES_EN_MALE)
self.assertTrue(name in self.NAMES_EN_MALE)
for i in xrange(100):
name = generator.get_name_simple(gender=GENDER.FEMALE, language=LANGUAGE.EN)

View file

@ -0,0 +1,69 @@
# coding: utf-8
import os
import importlib
import unittest
import pynames
from pynames.generators import BaseGenerator, GENDER
from pynames.from_list_generator import FromListGenerator
from pynames.from_tables_generator import FromTablesGenerator
def get_all_generators():
submodules = []
root_dir = os.path.dirname(pynames.__file__)
for dirname in os.listdir(root_dir):
module_path = os.path.join(root_dir, dirname)
if not os.path.isdir(module_path):
continue
try:
module_name = 'pynames.%s' % dirname
module = importlib.import_module(module_name)
submodules.append(module)
except Exception:
continue
generators = []
for module in submodules:
for generator in module.__dict__.values():
if not isinstance(generator, type) or not issubclass(generator, BaseGenerator):
continue
if generator in (FromTablesGenerator, FromListGenerator):
continue
generators.append(generator)
return generators
class TestGenerators(unittest.TestCase):
pass
def create_test_method(generator_class):
def test_method(self):
generator = generator_class()
self.assertTrue(generator.get_names_number() > 0)
self.assertTrue(generator.get_names_number(GENDER.MALE) + generator.get_names_number(GENDER.FEMALE) >= generator.get_names_number())
self.assertTrue(generator.get_name_simple())
self.assertTrue(generator.get_name())
test_method.__name__ = 'test_%s' % generator.__name__
return test_method
for generator in get_all_generators():
test_method = create_test_method(generator)
setattr(TestGenerators, test_method.__name__, test_method)