summaryrefslogtreecommitdiff
path: root/coverage/html.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2011-08-17 09:40:21 -0400
committerNed Batchelder <ned@nedbatchelder.com>2011-08-17 09:40:21 -0400
commit13782a65a275b6f57a25af1fff235bfa7bdd85b7 (patch)
treef50a8de597a52b2c588d485992fbc5ae17bc7380 /coverage/html.py
parentf8c5d6f541eac387184c7d3ec830792551fb505f (diff)
downloadpython-coveragepy-13782a65a275b6f57a25af1fff235bfa7bdd85b7.tar.gz
Properly handle Unicode characters in Python source when creating the HTML report (except surrogates come out as pairs of blots in the HTML). Fixes #124 and #144.
Diffstat (limited to 'coverage/html.py')
-rw-r--r--coverage/html.py22
1 files changed, 11 insertions, 11 deletions
diff --git a/coverage/html.py b/coverage/html.py
index 9b95100..be6ff08 100644
--- a/coverage/html.py
+++ b/coverage/html.py
@@ -3,7 +3,7 @@
import os, re, shutil
import coverage
-from coverage.backward import pickle
+from coverage.backward import pickle, write_encoded
from coverage.misc import CoverageException, Hasher
from coverage.phystokens import source_token_lines
from coverage.report import Reporter
@@ -98,6 +98,10 @@ class HtmlReporter(Reporter):
os.path.join(self.directory, static)
)
+ def write_html(self, fname, html):
+ """Write `html` to `fname`, properly encoded."""
+ write_encoded(fname, html, 'ascii', 'xmlcharrefreplace')
+
def file_hash(self, source, cu):
"""Compute a hash that changes if the file needs to be re-reported."""
m = Hasher()
@@ -189,12 +193,9 @@ class HtmlReporter(Reporter):
# Write the HTML page for this file.
html_filename = flat_rootname + ".html"
html_path = os.path.join(self.directory, html_filename)
+
html = spaceless(self.source_tmpl.render(locals()))
- fhtml = open(html_path, 'w')
- try:
- fhtml.write(html)
- finally:
- fhtml.close()
+ self.write_html(html_path, html)
# Save this file's information for the index file.
index_info = {
@@ -217,11 +218,10 @@ class HtmlReporter(Reporter):
totals = sum([f['nums'] for f in files])
- fhtml = open(os.path.join(self.directory, "index.html"), "w")
- try:
- fhtml.write(index_tmpl.render(locals()))
- finally:
- fhtml.close()
+ self.write_html(
+ os.path.join(self.directory, "index.html"),
+ index_tmpl.render(locals())
+ )
# Write the latest hashes for next time.
self.status.write(self.directory)