diff options
| author | Tom Christie | 2011-03-13 17:08:46 +0000 | 
|---|---|---|
| committer | Tom Christie | 2011-03-13 17:08:46 +0000 | 
| commit | bed7d8c3a99425b8dfa5c5a9c6b1d49a46f5284f (patch) | |
| tree | d3ad16683a727ea847ca807660419e3f290929cb | |
| parent | d6e7e95d95e7367f0d999c14d874d810a028a177 (diff) | |
| download | django-rest-framework-bed7d8c3a99425b8dfa5c5a9c6b1d49a46f5284f.tar.bz2 | |
tox, runcoverage, and setup.py test
| -rw-r--r-- | .hgignore | 4 | ||||
| -rw-r--r-- | README | 16 | ||||
| -rw-r--r-- | djangorestframework/runtests/__init__.py (renamed from testproject/__init__.py) | 0 | ||||
| -rw-r--r-- | djangorestframework/runtests/runcoverage.py | 53 | ||||
| -rw-r--r-- | djangorestframework/runtests/runtests.py | 35 | ||||
| -rw-r--r-- | djangorestframework/runtests/settings.py (renamed from testproject/settings.py) | 0 | ||||
| -rw-r--r-- | djangorestframework/runtests/urls.py | 7 | ||||
| -rw-r--r-- | setup.py | 10 | ||||
| -rwxr-xr-x | testproject/manage.py | 11 | ||||
| -rw-r--r-- | testproject/urls.py | 16 | ||||
| -rw-r--r-- | tox.ini | 40 | 
11 files changed, 160 insertions, 32 deletions
| @@ -6,12 +6,16 @@ syntax: glob  env  docs/build  html +htmlcov  examples/media/pygments/*  examples/media/objectstore/*  build/*  dist/* +djangorestframework.egg-info/*  MANIFEST  .project  .pydevproject  .settings  .cache +.coverage +.tox @@ -8,9 +8,14 @@ pip install -r requirements.txt # django  # To run the tests... -cd testproject -export PYTHONPATH=.. -python manage.py test djangorestframework +export PYTHONPATH=.    # Ensure djangorestframework is on the PYTHONPATH +python djangorestframework/runtests/runtests.py + + +# To run the test coverage report... + +export PYTHONPATH=.    # Ensure djangorestframework is on the PYTHONPATH +python djangorestframework/runtests/runcoverage.py  # To run the examples... @@ -24,3 +29,8 @@ python manage.py runserver  pip install -r docs/requirements.txt   # sphinx  sphinx-build -c docs -b html -d docs/build docs html + +# To run the tests against the full set of supported configurations + +deactivate  # Ensure we are not currently running in a virtualenv +tox diff --git a/testproject/__init__.py b/djangorestframework/runtests/__init__.py index e69de29b..e69de29b 100644 --- a/testproject/__init__.py +++ b/djangorestframework/runtests/__init__.py diff --git a/djangorestframework/runtests/runcoverage.py b/djangorestframework/runtests/runcoverage.py new file mode 100644 index 00000000..1deb1080 --- /dev/null +++ b/djangorestframework/runtests/runcoverage.py @@ -0,0 +1,53 @@ +""" +Useful tool to run the test suite for djangorestframework and generate a coverage report. +""" + +# http://ericholscher.com/blog/2009/jun/29/enable-setuppy-test-your-django-apps/ +# http://www.travisswicegood.com/2010/01/17/django-virtualenv-pip-and-fabric/ +# http://code.djangoproject.com/svn/django/trunk/tests/runtests.py +import os +import sys +os.environ['DJANGO_SETTINGS_MODULE'] = 'djangorestframework.runtests.settings' + +from django.conf import settings +from django.test.utils import get_runner +from coverage import coverage +from itertools import chain +import djangorestframework + +def main(): +    """Run the tests for djangorestframework and generate a coverage report.""" +     +    # Discover the list of all modules that we should test coverage for +    project_dir = os.path.dirname(djangorestframework.__file__) +    cov_files = [] +    for (path, dirs, files) in os.walk(project_dir): +        # Drop tests and runtests directories from the test coverage report +        if os.path.basename(path) == 'tests' or os.path.basename(path) == 'runtests': +            continue +        cov_files.extend([os.path.join(path, file) for file in files if file.endswith('.py')]) + +    cov = coverage() +    cov.erase() +    cov.start() +    TestRunner = get_runner(settings) + +    if hasattr(TestRunner, 'func_name'): +        # Pre 1.2 test runners were just functions, +        # and did not support the 'failfast' option. +        import warnings +        warnings.warn( +            'Function-based test runners are deprecated. Test runners should be classes with a run_tests() method.', +            DeprecationWarning +        ) +        failures = TestRunner(['djangorestframework']) +    else: +        test_runner = TestRunner() +        failures = test_runner.run_tests(['djangorestframework']) + +    cov.stop() +    cov.report(cov_files) +    sys.exit(failures) + +if __name__ == '__main__': +    main() diff --git a/djangorestframework/runtests/runtests.py b/djangorestframework/runtests/runtests.py new file mode 100644 index 00000000..a3cdfa67 --- /dev/null +++ b/djangorestframework/runtests/runtests.py @@ -0,0 +1,35 @@ +''' +Created on Mar 10, 2011 + +@author: tomchristie +''' +# http://ericholscher.com/blog/2009/jun/29/enable-setuppy-test-your-django-apps/ +# http://www.travisswicegood.com/2010/01/17/django-virtualenv-pip-and-fabric/ +# http://code.djangoproject.com/svn/django/trunk/tests/runtests.py +import os +import sys +os.environ['DJANGO_SETTINGS_MODULE'] = 'djangorestframework.runtests.settings' + +from django.conf import settings +from django.test.utils import get_runner + +def main(): +    TestRunner = get_runner(settings) + +    if hasattr(TestRunner, 'func_name'): +        # Pre 1.2 test runners were just functions, +        # and did not support the 'failfast' option. +        import warnings +        warnings.warn( +            'Function-based test runners are deprecated. Test runners should be classes with a run_tests() method.', +            DeprecationWarning +        ) +        failures = TestRunner(['djangorestframework']) +    else: +        test_runner = TestRunner() +        failures = test_runner.run_tests(['djangorestframework']) + +    sys.exit(failures) + +if __name__ == '__main__': +    main() diff --git a/testproject/settings.py b/djangorestframework/runtests/settings.py index 2bf955aa..2bf955aa 100644 --- a/testproject/settings.py +++ b/djangorestframework/runtests/settings.py diff --git a/djangorestframework/runtests/urls.py b/djangorestframework/runtests/urls.py new file mode 100644 index 00000000..45555813 --- /dev/null +++ b/djangorestframework/runtests/urls.py @@ -0,0 +1,7 @@ +""" +Blank URLConf just to keep runtests.py happy. +""" +from django.conf.urls.defaults import * + +urlpatterns = patterns('', +)
\ No newline at end of file @@ -1,7 +1,7 @@  #!/usr/bin/env/python  # -*- coding: utf-8 -*- -from distutils.core import setup +from setuptools import setup  setup(      name = "djangorestframework", @@ -14,9 +14,11 @@ setup(      author_email = 'tom@tomchristie.com',      packages = ['djangorestframework',                  'djangorestframework.templatetags', -                'djangorestframework.tests'], +                'djangorestframework.tests', +                'djangorestframework.runtests'],      package_dir={'djangorestframework': 'djangorestframework'},      package_data = {'djangorestframework': ['templates/*', 'static/*']}, +    test_suite = 'djangorestframework.runtests.runtests.main',      classifiers = [          'Development Status :: 4 - Beta',          'Environment :: Web Environment', @@ -29,3 +31,7 @@ setup(      ]  ) +import os, shutil +shutil.rmtree(os.path.join(os.path.dirname(__file__), 'djangorestframework.egg-info'), True) + + diff --git a/testproject/manage.py b/testproject/manage.py deleted file mode 100755 index 5e78ea97..00000000 --- a/testproject/manage.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python -from django.core.management import execute_manager -try: -    import settings # Assumed to be in the same directory. -except ImportError: -    import sys -    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) -    sys.exit(1) - -if __name__ == "__main__": -    execute_manager(settings) diff --git a/testproject/urls.py b/testproject/urls.py deleted file mode 100644 index d1312789..00000000 --- a/testproject/urls.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.conf.urls.defaults import * - -# Uncomment the next two lines to enable the admin: -# from django.contrib import admin -# admin.autodiscover() - -urlpatterns = patterns('', -    # Example: -    # (r'^testproject/', include('testproject.foo.urls')), - -    # Uncomment the admin/doc line below to enable admin documentation: -    # (r'^admin/doc/', include('django.contrib.admindocs.urls')), - -    # Uncomment the next line to enable the admin: -    # (r'^admin/', include(admin.site.urls)), -) diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000..b586ab07 --- /dev/null +++ b/tox.ini @@ -0,0 +1,40 @@ +[tox] +envlist= +    py25-django12, py26-django12, py27-django12, py25-django13, py26-django13, py27-django13 + +[testenv] +commands= +    python setup.py test + +[testenv:py25-django12] +basepython=python2.5 +deps= +    django==1.2.4 +    simplejson + +[testenv:py26-django12] +basepython=python2.6 +deps= +    django==1.2.4 + +[testenv:py27-django12] +basepython=python2.7 +deps= +    django==1.2.4 + +[testenv:py25-django13] +basepython=python2.5 +deps= +    http://www.djangoproject.com/download/1.3-rc-1/tarball/ +    simplejson + +[testenv:py26-django13] +basepython=python2.6 +deps= +    http://www.djangoproject.com/download/1.3-rc-1/tarball/ + +[testenv:py27-django13] +basepython=python2.7 +deps= +    http://www.djangoproject.com/download/1.3-rc-1/tarball/ + | 
