From e5829207036c358fc451a958e6811a5fe20f9b07 Mon Sep 17 00:00:00 2001 From: Tiendil Date: Mon, 20 Jan 2014 14:58:06 +0300 Subject: [PATCH] new tests fix goblin and orc generators --- pynames/elven/__init__.py | 7 +- pynames/generators.py | 6 +- pynames/goblin/__init__.py | 10 +++ .../{ => fixtures}/goblin_names_tables.json | 16 ++--- pynames/mongolian/__init__.py | 3 +- pynames/orc/__init__.py | 9 +++ .../orc/{ => fixtures}/orc_names_list.json | 0 pynames/tests/__init__.py | 3 + pynames/tests/test.py | 18 ++--- pynames/tests/test_generators.py | 69 +++++++++++++++++++ 10 files changed, 112 insertions(+), 29 deletions(-) create mode 100644 pynames/goblin/__init__.py rename pynames/goblin/{ => fixtures}/goblin_names_tables.json (97%) create mode 100644 pynames/orc/__init__.py rename pynames/orc/{ => fixtures}/orc_names_list.json (100%) create mode 100644 pynames/tests/test_generators.py diff --git a/pynames/elven/__init__.py b/pynames/elven/__init__.py index 0793094..c20407d 100644 --- a/pynames/elven/__init__.py +++ b/pynames/elven/__init__.py @@ -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') - - - - - diff --git a/pynames/generators.py b/pynames/generators.py index fac1782..521cb24 100644 --- a/pynames/generators.py +++ b/pynames/generators.py @@ -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__() - - diff --git a/pynames/goblin/__init__.py b/pynames/goblin/__init__.py new file mode 100644 index 0000000..c0a3f50 --- /dev/null +++ b/pynames/goblin/__init__.py @@ -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') diff --git a/pynames/goblin/goblin_names_tables.json b/pynames/goblin/fixtures/goblin_names_tables.json similarity index 97% rename from pynames/goblin/goblin_names_tables.json rename to pynames/goblin/fixtures/goblin_names_tables.json index 85082f9..87c6b58 100644 --- a/pynames/goblin/goblin_names_tables.json +++ b/pynames/goblin/fixtures/goblin_names_tables.json @@ -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": "Бл"}}, diff --git a/pynames/mongolian/__init__.py b/pynames/mongolian/__init__.py index a0d9bb6..052244b 100644 --- a/pynames/mongolian/__init__.py +++ b/pynames/mongolian/__init__.py @@ -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') - diff --git a/pynames/orc/__init__.py b/pynames/orc/__init__.py new file mode 100644 index 0000000..7942183 --- /dev/null +++ b/pynames/orc/__init__.py @@ -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') diff --git a/pynames/orc/orc_names_list.json b/pynames/orc/fixtures/orc_names_list.json similarity index 100% rename from pynames/orc/orc_names_list.json rename to pynames/orc/fixtures/orc_names_list.json diff --git a/pynames/tests/__init__.py b/pynames/tests/__init__.py index 57d631c..958b740 100644 --- a/pynames/tests/__init__.py +++ b/pynames/tests/__init__.py @@ -1 +1,4 @@ # coding: utf-8 + +from pynames.tests.test import * +from pynames.tests.test_generators import * diff --git a/pynames/tests/test.py b/pynames/tests/test.py index 183581a..9d8dc48 100644 --- a/pynames/tests/test.py +++ b/pynames/tests/test.py @@ -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) diff --git a/pynames/tests/test_generators.py b/pynames/tests/test_generators.py new file mode 100644 index 0000000..308cf60 --- /dev/null +++ b/pynames/tests/test_generators.py @@ -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)