summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-08-20 21:28:37 -0400
committerNed Batchelder <ned@nedbatchelder.com>2015-08-20 21:28:37 -0400
commit3fb754d683d4ba71b04952c27feaafcdae7225e1 (patch)
tree9f3e3e44a868442213a415d2fc1d7647feef18a6
parenteab4dbcf6337ce288467305efae0c86b049bab4b (diff)
downloadpython-coveragepy-git-3fb754d683d4ba71b04952c27feaafcdae7225e1.tar.gz
CoverageData.read and .write are now inverses of each other.
-rw-r--r--CHANGES.txt3
-rw-r--r--coverage/data.py13
-rw-r--r--tests/test_data.py13
3 files changed, 19 insertions, 10 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 47d7bebf..4f7c0fc8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -18,6 +18,9 @@ Latest
message. This is now fixed, and changed some method names in the
CoverageData interface. Fixes `issue 399`_.
+- `CoverageData.read` and `CoverageData.write` are now properly inverses of
+ each other.
+
- When using ``report --skip-covered``, a message will now be included in the
report output indicating how many files were skipped, and if all files are
skipped, coverage.py won't accidentally scold you for having no data to
diff --git a/coverage/data.py b/coverage/data.py
index 974764b0..c319e65a 100644
--- a/coverage/data.py
+++ b/coverage/data.py
@@ -297,19 +297,14 @@ class CoverageData(object):
@classmethod
def _open_for_reading(cls, filename):
"""Open a file appropriately for reading data."""
- f = open(filename, "r")
- try:
- go_away = f.read(len(cls._GO_AWAY))
- if go_away != cls._GO_AWAY:
- raise CoverageException("Doesn't seem to be a coverage.py data file")
- except Exception:
- f.close()
- raise
- return f
+ return open(filename, "r")
@classmethod
def _read_raw_data(cls, file_obj):
"""Read the raw data from a file object."""
+ go_away = file_obj.read(len(cls._GO_AWAY))
+ if go_away != cls._GO_AWAY:
+ raise CoverageException("Doesn't seem to be a coverage.py data file")
return json.load(file_obj)
@classmethod
diff --git a/tests/test_data.py b/tests/test_data.py
index 653a401a..ea6b0df0 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -11,7 +11,7 @@ import re
import mock
-from coverage.backward import iitems
+from coverage.backward import iitems, StringIO
from coverage.data import CoverageData, CoverageDataFiles, debug_main
from coverage.files import PathAliases, canonical_filename
from coverage.misc import CoverageException
@@ -393,6 +393,17 @@ class CoverageDataTest(DataTestHelpers, CoverageTest):
covdata.touch_file("abc.py")
self.assertTrue(covdata.has_arcs())
+ def test_read_and_write_are_opposites(self):
+ covdata1 = CoverageData()
+ covdata1.add_arcs(ARCS_3)
+ stringio = StringIO()
+ covdata1.write(stringio)
+
+ stringio.seek(0)
+ covdata2 = CoverageData()
+ covdata2.read(stringio)
+ self.assert_arcs3_data(covdata2)
+
class CoverageDataTestInTempDir(DataTestHelpers, CoverageTest):
"""Tests of CoverageData that need a temporary directory to make files."""