diff --git a/codeclimate_test_reporter/components/file_coverage.py b/codeclimate_test_reporter/components/file_coverage.py index 1d70ef2..9280e37 100644 --- a/codeclimate_test_reporter/components/file_coverage.py +++ b/codeclimate_test_reporter/components/file_coverage.py @@ -1,9 +1,14 @@ import json +import sys from hashlib import sha1 +if sys.version_info < (3, 0): + from io import open + class FileCoverage: def __init__(self, file_node): + self.file_body = None self.file_node = file_node self.__process() @@ -36,11 +41,17 @@ def __line_nodes(self): return self.file_node.findall("lines/line") def __blob(self): - contents = open(self.__filename(), "r").read() + contents = self.__file_body() header = "blob " + str(len(contents)) + "\0" return sha1((header + contents).encode("utf-8")).hexdigest() + def __file_body(self): + if not self.file_body: + self.file_body = open(self.__filename(), "r", encoding="utf-8-sig").read() + + return self.file_body + def __filename(self): return self.file_node.get("filename") @@ -51,7 +62,7 @@ def __covered_strength(self): return self.__guard_division(self.hits, self.covered) def __num_lines(self): - return sum(1 for line in open(self.__filename())) + return len(self.__file_body().splitlines()) def __covered_percent(self): return self.__guard_division(self.covered, self.total) diff --git a/tests/fixtures/source.py b/tests/fixtures/source.py index 3cee368..d7b55f0 100644 --- a/tests/fixtures/source.py +++ b/tests/fixtures/source.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python class Person: diff --git a/tests/test_runner.py b/tests/test_runner.py index 4153d2d..cc2552e 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -4,7 +4,7 @@ import subprocess import sys -if sys.version_info >= (3,0): +if sys.version_info >= (3, 0): from io import StringIO else: from StringIO import StringIO