summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/html.py12
-rw-r--r--coverage/parser.py12
-rw-r--r--test/coveragetest.py6
-rw-r--r--test/osinfo.py6
-rw-r--r--test/test_execfile.py6
-rw-r--r--test/test_parser.py7
6 files changed, 35 insertions, 14 deletions
diff --git a/coverage/html.py b/coverage/html.py
index b68cc936..bf49002f 100644
--- a/coverage/html.py
+++ b/coverage/html.py
@@ -145,8 +145,10 @@ class HtmlReporter(Reporter):
html_path = os.path.join(self.directory, html_filename)
html = spaceless(self.source_tmpl.render(locals()))
fhtml = open(html_path, 'w')
- fhtml.write(html)
- fhtml.close()
+ try:
+ fhtml.write(html)
+ finally:
+ fhtml.close()
# Save this file's information for the index file.
self.files.append({
@@ -166,8 +168,10 @@ class HtmlReporter(Reporter):
totals = sum([f['nums'] for f in files])
fhtml = open(os.path.join(self.directory, "index.html"), "w")
- fhtml.write(index_tmpl.render(locals()))
- fhtml.close()
+ try:
+ fhtml.write(index_tmpl.render(locals()))
+ finally:
+ fhtml.close()
# Helpers for templates and generating HTML
diff --git a/coverage/parser.py b/coverage/parser.py
index a71ac102..3dee80eb 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -24,8 +24,10 @@ class CodeParser(object):
if not self.text:
try:
sourcef = open_source(self.filename)
- self.text = sourcef.read()
- sourcef.close()
+ try:
+ self.text = sourcef.read()
+ finally:
+ sourcef.close()
except IOError:
_, err, _ = sys.exc_info()
raise NoSource(
@@ -303,8 +305,10 @@ class ByteParser(object):
if not text:
assert filename, "If no code or text, need a filename"
sourcef = open(filename, 'rU')
- text = sourcef.read()
- sourcef.close()
+ try:
+ text = sourcef.read()
+ finally:
+ sourcef.close()
try:
# Python 2.3 and 2.4 don't like partial last lines, so be sure
diff --git a/test/coveragetest.py b/test/coveragetest.py
index 1e2c2431..6eb34bff 100644
--- a/test/coveragetest.py
+++ b/test/coveragetest.py
@@ -146,8 +146,10 @@ class CoverageTest(TestCase):
# Create the file.
f = open(filename, 'w')
- f.write(text)
- f.close()
+ try:
+ f.write(text)
+ finally:
+ f.close()
return filename
diff --git a/test/osinfo.py b/test/osinfo.py
index 04855fe6..25c3a7c6 100644
--- a/test/osinfo.py
+++ b/test/osinfo.py
@@ -45,8 +45,10 @@ elif sys.platform == 'linux2':
try:
# get pseudo file /proc/<pid>/status
t = open('/proc/%d/status' % os.getpid())
- v = t.read()
- t.close()
+ try:
+ v = t.read()
+ finally:
+ t.close()
except IOError:
return 0 # non-Linux?
# get VmKey line e.g. 'VmRSS: 9999 kB\n ...'
diff --git a/test/test_execfile.py b/test/test_execfile.py
index 2f28a069..f6e4dd7f 100644
--- a/test/test_execfile.py
+++ b/test/test_execfile.py
@@ -55,8 +55,10 @@ class RunTest(CoverageTest):
pylines = """# try newlines|print('Hello, world!')|""".split('|')
for nl in ('\n', '\r\n', '\r'):
fpy = open('nl.py', 'wb')
- fpy.write(nl.join(pylines).encode('utf-8'))
- fpy.close()
+ try:
+ fpy.write(nl.join(pylines).encode('utf-8'))
+ finally:
+ fpy.close()
run_python_file('nl.py', ['nl.py'])
self.assertEqual(self.stdout(), "Hello, world!\n"*3)
diff --git a/test/test_parser.py b/test/test_parser.py
index c25611cf..220db17e 100644
--- a/test/test_parser.py
+++ b/test/test_parser.py
@@ -125,3 +125,10 @@ class ParserFileTest(CoverageTest):
self.make_file(fname, text, newline=newline)
cp = self.parse_file(fname)
self.assertEqual(cp.exit_counts(), counts)
+
+ def test_encoding(self):
+ self.make_file("encoded.py", """\
+ coverage = "\xe7\xf6v\xear\xe3g\xe9"
+ """)
+ cp = self.parse_file("encoded.py")
+ cp.exit_counts()