tox, runcoverage, and setup.py test

This commit is contained in:
Tom Christie 2011-03-13 17:08:46 +00:00
parent d6e7e95d95
commit bed7d8c3a9
11 changed files with 160 additions and 32 deletions

View File

@ -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

16
README
View File

@ -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

View File

@ -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()

View File

@ -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()

View File

@ -0,0 +1,7 @@
"""
Blank URLConf just to keep runtests.py happy.
"""
from django.conf.urls.defaults import *
urlpatterns = patterns('',
)

View 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)

View File

@ -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)

View File

@ -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)),
)

40
tox.ini Normal file
View File

@ -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/