Skip to content

Commit cab493b

Browse files
author
Peter Bengtsson
committed
much improved test coverage
1 parent 2fb3fad commit cab493b

File tree

7 files changed

+494
-7
lines changed

7 files changed

+494
-7
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ media/images/icon1_icon2.*.png
1515
media/images/icon3.*.png
1616
media/javascript/shit_code.*.js
1717
media/css/reset_styles.*.css
18-
media/css/reset.*.css
18+
media/css/reset.*.css
19+
coverage_report/

coverage_settings.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from settings import *
2+
3+
TEST_RUNNER='coverage_test_runner.test_runner_with_coverage'
4+
5+
COVERAGE_MODULES = [
6+
'django_static.templatetags.django_static',
7+
]

coverage_test_runner.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from time import time
2+
import os
3+
import shutil
4+
from django.test.simple import DjangoTestSuiteRunner
5+
6+
from django.conf import settings
7+
8+
9+
import coverage
10+
def test_runner_with_coverage(test_labels, verbosity=1, interactive=True,
11+
failfast=None, extra_tests=[]):
12+
"""
13+
Custom test runner. Follows the django.test.simple.run_tests() interface.
14+
"""
15+
# Start code coverage before anything else if necessary
16+
if hasattr(settings, 'COVERAGE_MODULES'):
17+
cov = coverage.coverage()
18+
#coverage.use_cache(0) # Do not cache any of the coverage.py stuff
19+
cov.use_cache(0) # Do not cache any of the coverage.py stuff
20+
cov.start()
21+
22+
test_runner = DjangoTestSuiteRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
23+
test_results = test_runner.run_tests(test_labels, extra_tests=extra_tests)
24+
25+
# Stop code coverage after tests have completed
26+
if hasattr(settings, 'COVERAGE_MODULES'):
27+
cov.stop()
28+
29+
# Print code metrics header
30+
print ''
31+
print '----------------------------------------------------------------------'
32+
print ' Unit Test Code Coverage Results'
33+
print '----------------------------------------------------------------------'
34+
35+
# Report code coverage metrics
36+
if hasattr(settings, 'COVERAGE_MODULES'):
37+
coverage_modules = []
38+
for module in settings.COVERAGE_MODULES:
39+
coverage_modules.append(__import__(module, globals(), locals(), ['']))
40+
cov.report(coverage_modules, show_missing=1)
41+
cov.html_report(coverage_modules, directory='coverage_report')
42+
# Print code metrics footer
43+
print '----------------------------------------------------------------------'
44+
45+
return test_results

django_static/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '1.3.5' # remember to match with setup.py
1+
__version__ = '1.3.6' # remember to match with setup.py

django_static/templatetags/django_static.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
from collections import defaultdict
99
from cStringIO import StringIO
1010
from subprocess import Popen, PIPE
11+
import warnings
1112

1213
try:
1314
from slimmer import css_slimmer, guessSyntax, html_slimmer, js_slimmer, xhtml_slimmer
1415
slimmer = 'installed'
1516
except ImportError:
1617
slimmer = None
17-
import warnings
1818
warnings.warn("slimmer is not installed. (easy_install slimmer)")
1919

2020
if sys.platform == "win32":
@@ -25,6 +25,7 @@
2525
# django
2626
from django import template
2727
from django.conf import settings
28+
from django.template import TemplateSyntaxError
2829

2930
register = template.Library()
3031

@@ -67,7 +68,9 @@ def render(self, context):
6768
return xhtml_slimmer(code)
6869
elif self.format == 'html':
6970
return html_slimmer(code)
70-
71+
else:
72+
raise TemplateSyntaxError("Unrecognized format for slimming content")
73+
7174
return code
7275

7376

@@ -127,7 +130,8 @@ def staticfile_node(parser, token, optimize_if_possible=False):
127130

128131
return StaticFileNode(filename,
129132
symlink_if_possible=_CAN_SYMLINK,
130-
optimize_if_possible=optimize_if_possible)
133+
optimize_if_possible=optimize_if_possible,
134+
context_name=context_name)
131135

132136

133137
class StaticFileNode(template.Node):
@@ -240,6 +244,7 @@ def image_replacer(match):
240244
if new_filename != filename:
241245
tag = tag.replace(filename, new_filename)
242246
return tag
247+
243248
code = img_regex.sub(image_replacer, code)
244249

245250
new_css_filenames = defaultdict(list)
@@ -388,7 +393,7 @@ def wrap_up(filename):
388393
filepath = _filename2filepath(filename, settings.MEDIA_ROOT)
389394
if not os.path.isfile(filepath):
390395
if warn_no_file:
391-
import warnings; warnings.warn("Can't find file %s" % filepath)
396+
warnings.warn("Can't find file %s" % filepath)
392397
return wrap_up(filename)
393398

394399
new_m_time = os.stat(filepath)[stat.ST_MTIME]

0 commit comments

Comments
 (0)