diff options
-rw-r--r-- | coverage/html.py | 12 | ||||
-rw-r--r-- | coverage/parser.py | 12 | ||||
-rw-r--r-- | test/coveragetest.py | 6 | ||||
-rw-r--r-- | test/osinfo.py | 6 | ||||
-rw-r--r-- | test/test_execfile.py | 6 | ||||
-rw-r--r-- | test/test_parser.py | 7 |
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() |