mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-31 07:57:55 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| """
 | |
| Useful tool to run the test suite for rest_framework 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
 | |
| 
 | |
| # fix sys path so we don't need to setup PYTHONPATH
 | |
| sys.path.append(os.path.join(os.path.dirname(__file__), "../.."))
 | |
| os.environ['DJANGO_SETTINGS_MODULE'] = 'rest_framework.runtests.settings'
 | |
| 
 | |
| from coverage import coverage
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     """Run the tests for rest_framework and generate a coverage report."""
 | |
| 
 | |
|     cov = coverage()
 | |
|     cov.erase()
 | |
|     cov.start()
 | |
| 
 | |
|     from django.conf import settings
 | |
|     from django.test.utils import get_runner
 | |
|     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(['tests'])
 | |
|     else:
 | |
|         test_runner = TestRunner()
 | |
|         failures = test_runner.run_tests(['tests'])
 | |
|     cov.stop()
 | |
| 
 | |
|     # Discover the list of all modules that we should test coverage for
 | |
|     import rest_framework
 | |
| 
 | |
|     project_dir = os.path.dirname(rest_framework.__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) in ['tests', 'runtests', 'migrations']:
 | |
|             continue
 | |
| 
 | |
|         # Drop the compat and six modules from coverage, since we're not interested in the coverage
 | |
|         # of modules which are specifically for resolving environment dependant imports.
 | |
|         # (Because we'll end up getting different coverage reports for it for each environment)
 | |
|         if 'compat.py' in files:
 | |
|             files.remove('compat.py')
 | |
| 
 | |
|         if 'six.py' in files:
 | |
|             files.remove('six.py')
 | |
| 
 | |
|         # Same applies to template tags module.
 | |
|         # This module has to include branching on Django versions,
 | |
|         # so it's never possible for it to have full coverage.
 | |
|         if 'rest_framework.py' in files:
 | |
|             files.remove('rest_framework.py')
 | |
| 
 | |
|         cov_files.extend([os.path.join(path, file) for file in files if file.endswith('.py')])
 | |
| 
 | |
|     cov.report(cov_files)
 | |
|     if '--html' in sys.argv:
 | |
|         cov.html_report(cov_files, directory='coverage')
 | |
|     sys.exit(failures)
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     main()
 |