From: Cris E. <svn...@pl...> - 2010-11-17 19:12:20
|
Author: cewing Date: Wed Nov 17 19:10:17 2010 New Revision: 226959 Added: templer.core/trunk/src/templer/core/tests/docs/ templer.core/trunk/src/templer/core/tests/docs/basic_namespace.txt templer.core/trunk/src/templer/core/tests/docs/nested_namespace.txt templer.core/trunk/src/templer/core/tests/docs/recipe.txt Modified: templer.core/trunk/src/templer/core/tests/test_all.py templer.core/trunk/src/templer/core/tests/test_templates.py Log: move doctests for templates over to the templer.core package Added: templer.core/trunk/src/templer/core/tests/docs/basic_namespace.txt ============================================================================== --- (empty file) +++ templer.core/trunk/src/templer/core/tests/docs/basic_namespace.txt Wed Nov 17 19:10:17 2010 @@ -0,0 +1,18 @@ +======================== +basic_namespace template +======================== + +Use paster:: + + >>> paster('create -t basic_namespace plone.example --no-interactive') + paster create -t basic_namespace plone.example --no-interactive + ... + +Let's check the content:: + + >>> package_dir = os.path.join('plone.example', + ... 'plone', 'example') + >>> ls(package_dir) + __init__.py + + Added: templer.core/trunk/src/templer/core/tests/docs/nested_namespace.txt ============================================================================== --- (empty file) +++ templer.core/trunk/src/templer/core/tests/docs/nested_namespace.txt Wed Nov 17 19:10:17 2010 @@ -0,0 +1,18 @@ +========================= +nested_namespace template +========================= + +Use paster:: + + >>> paster('create -t nested_namespace plone.app.example --no-interactive') + paster create -t nested_namespace plone.app.example --no-interactive + ... + +Let's check the content:: + + >>> package_dir = os.path.join('plone.app.example', + ... 'plone', 'app', 'example') + >>> ls(package_dir) + __init__.py + + Added: templer.core/trunk/src/templer/core/tests/docs/recipe.txt ============================================================================== --- (empty file) +++ templer.core/trunk/src/templer/core/tests/docs/recipe.txt Wed Nov 17 19:10:17 2010 @@ -0,0 +1,63 @@ +=============== +recipe template +=============== + +Use paster:: + + >>> paster('create -t recipe plone.recipe.example --no-interactive') + paster create -t recipe plone.recipe.example --no-interactive + ... + +Let's check the content:: + + >>> package_dir = os.path.join('plone.recipe.example', + ... 'plone', 'recipe', 'example') + >>> ls(package_dir) + README.txt + __init__.py + tests + +Let's check how the recipe looks like:: + + >>> recipe = open(os.path.join(package_dir, '__init__.py')).read() + >>> print recipe + # -*- coding: utf-8 -*- + """Recipe example""" + <BLANKLINE> + class Recipe(object): + """zc.buildout recipe""" + <BLANKLINE> + def __init__(self, buildout, name, options): + self.buildout, self.name, self.options = buildout, name, options + <BLANKLINE> + def install(self): + """Installer""" + # XXX Implement recipe functionality here + <BLANKLINE> + # Return files that were created by the recipe. The buildout + # will remove all returned files upon reinstall. + return tuple() + <BLANKLINE> + def update(self): + """Updater""" + pass + +Now let's try to run the recipe own tests:: + + >>> recipe_dir = 'plone.recipe.example' + >>> cd(recipe_dir) + >>> import sys + >>> python_ = sys.executable + >>> res = read_sh('%s setup.py test' % python_) + >>> 'doctest: readme.txt ... ok' in res.strip().lower() + True + +And the dedicated buildout `test` script (to be fixed):: + + >> null = os.chdir(recipe_dir) + >> null = read_sh('%s bootstrap.py' % python_) + >> null = read_sh(os.path.join('bin', 'buildout')) + >> res = read_sh(os.path.join('bin', 'test')) + >> print res + + Modified: templer.core/trunk/src/templer/core/tests/test_all.py ============================================================================== --- templer.core/trunk/src/templer/core/tests/test_all.py (original) +++ templer.core/trunk/src/templer/core/tests/test_all.py Wed Nov 17 19:10:17 2010 @@ -3,7 +3,7 @@ from templer.core.tests.test_base import test_suite as base_test_suite from templer.core.tests.test_vars import test_suite as vars_test_suite from templer.core.tests.test_script import test_suite as script_test_suite -# from templer.core.tests.test_templates import test_suite as doc_test_suite +from templer.core.tests.test_templates import test_suite as doc_test_suite def test_suite(): """ wrap all tests in a single test suite, doctests must come last @@ -12,7 +12,7 @@ base_test_suite(), vars_test_suite(), script_test_suite(), - # doc_test_suite(), + doc_test_suite(), ]) return suite Modified: templer.core/trunk/src/templer/core/tests/test_templates.py ============================================================================== --- templer.core/trunk/src/templer/core/tests/test_templates.py (original) +++ templer.core/trunk/src/templer/core/tests/test_templates.py Wed Nov 17 19:10:17 2010 @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- -""" -Grabs the tests in doctest -""" + __docformat__ = 'restructuredtext' import unittest @@ -19,7 +16,6 @@ if os.path.isdir(dirname): shutil.rmtree(dirname) - def paster(cmd): print "paster %s" % cmd from paste.script import command @@ -41,15 +37,13 @@ runner = command(command_name) runner.run(args[1:]) - def read_sh(cmd): _cmd = cmd - old = sys.stdout + # old = sys.stdout child_stdout_and_stderr, child_stdin = popen2.popen4(_cmd) child_stdin.close() return child_stdout_and_stderr.read() - def ls(*args): dirname = os.path.join(*args) if os.path.isdir(dirname): @@ -64,16 +58,13 @@ else: print 'No directory named %s' % dirname - def cd(*args): dirname = os.path.join(*args) os.chdir(dirname) - def config(filename): return os.path.join(current_dir, filename) - def cat(*args): filename = os.path.join(*args) if os.path.isfile(filename): @@ -81,38 +72,10 @@ else: print 'No file named %s' % filename - def touch(*args, **kwargs): filename = os.path.join(*args) open(filename, 'w').write(kwargs.get('data','')) - -class ZopeSkelLayer: - - temp_dir = None - - @classmethod - def testSetUp(self): - self.temp_dir = tempfile.mkdtemp() - cd(self.temp_dir) - - @classmethod - def testTearDown(self): - shutil.rmtree(self.temp_dir, ignore_errors=True) - self.temp_dir = None - - from pkg_resources import working_set as ws - #cleanup entries in the working set - for k, v in ws.by_key.items(): - if not os.path.exists(v.location): - del ws.by_key[k] - - for i in reversed(range(len(ws.entries))): - if not os.path.exists(ws.entries[i]): - del ws.entries[i] - - sys.path = ws.entries[:] - def testSetUp(test): test.temp_dir = tempfile.mkdtemp() cd(test.temp_dir) @@ -133,3 +96,40 @@ sys.path = ws.entries[:] +def doc_suite(test_dir, setUp=testSetUp, tearDown=testTearDown, globs=None): + """Returns a test suite, based on doctests found in /docs.""" + suite = [] + if globs is None: + globs = globals() + + flags = (doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | + doctest.REPORT_ONLY_FIRST_FAILURE) + + # package_dir = os.path.split(test_dir)[0] + # if package_dir not in sys.path: + # sys.path.append(package_dir) + + doctest_dir = os.path.join(test_dir, 'docs') + + # filtering files on extension + docs = [os.path.join(doctest_dir, doc) for doc in + os.listdir(doctest_dir) if doc.endswith('.txt')] + + for test in docs: + suite.append(doctest.DocFileSuite(test, optionflags=flags, + globs=globs, setUp=setUp, + tearDown=tearDown, + module_relative=False)) + + return unittest.TestSuite(suite) + +def test_suite(): + """returns the test suite""" + suite = doc_suite(current_dir) + # suite.layer = ZopeSkelLayer + # + return suite + +if __name__ == '__main__': + unittest.main(defaultTest='test_suite') + |