diff options
author | Alexander Todorov <atodorov@otb.bg> | 2015-08-07 16:50:51 +0300 |
---|---|---|
committer | Alexander Todorov <atodorov@otb.bg> | 2015-08-07 16:50:51 +0300 |
commit | 5ffeef081a9efca75c7557b244660d3226467350 (patch) | |
tree | c42e1f0e0becda74382a66d9ded7c299160ccc10 | |
parent | 4111d81a2bfc41d7ce9f2426cfe4cd4d137d6e8e (diff) | |
download | python-coveragepy-git-5ffeef081a9efca75c7557b244660d3226467350.tar.gz |
Add pickle2json converter. Closes #395
--HG--
branch : read_pickle
extra : amend_source : 71ae428d9f389e19ed74215bfc3f1630fcdc40a1
-rw-r--r-- | coverage/backward.py | 6 | ||||
-rw-r--r-- | coverage/pickle2json.py | 40 | ||||
-rw-r--r-- | tests/test_pickle2json.py | 64 |
3 files changed, 110 insertions, 0 deletions
diff --git a/coverage/backward.py b/coverage/backward.py index 340dc130..7f571c07 100644 --- a/coverage/backward.py +++ b/coverage/backward.py @@ -37,6 +37,12 @@ try: except NameError: unicode_class = str +# Where do pickles come from? +try: + import cPickle as pickle +except ImportError: + import pickle + # range or xrange? try: range = xrange diff --git a/coverage/pickle2json.py b/coverage/pickle2json.py new file mode 100644 index 00000000..4a2e941a --- /dev/null +++ b/coverage/pickle2json.py @@ -0,0 +1,40 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt + +"""Convert pickle to JSON for coverage.py.""" + +from coverage.backward import pickle +from coverage.data import CoverageData + +def pickle_read_raw_data(cls, file_obj): + return pickle.load(file_obj) + +def pickle2json(infile, outfile): + try: + old_read_raw_data = CoverageData._read_raw_data + CoverageData._read_raw_data = pickle_read_raw_data + + covdata = CoverageData() + + inf = open(infile, 'rb') + covdata.read(inf) + inf.close() + + covdata.write_file(outfile) + finally: + CoverageData._read_raw_data = old_read_raw_data + + +if __name__ == "__main__": + from optparse import OptionParser + + parser = OptionParser(usage="usage: %s [options]" % __file__) + parser.description = "Convert .coverage files from pickle to JSON format" + parser.add_option("-i", "--input-file", action="store", default=".coverage", + help="Name of input file. Default .coverage") + parser.add_option("-o", "--output-file", action="store", default=".coverage", + help="Name of output file. Default .coverage") + + (options, args) = parser.parse_args() + + pickle2json(options.input_file, options.output_file) diff --git a/tests/test_pickle2json.py b/tests/test_pickle2json.py new file mode 100644 index 00000000..06dc4c2e --- /dev/null +++ b/tests/test_pickle2json.py @@ -0,0 +1,64 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt + +"""Tests for coverage.pickle2json""" + +from coverage.backward import pickle, iitems +from coverage.data import CoverageData +from coverage.pickle2json import pickle2json + +from tests.coveragetest import CoverageTest +from tests.test_data import * + +class Pickle2JsonTestInTempDir(DataTestHelpers, CoverageTest): + """ Tests pickle2json """ + + def write_pickled_file(self, covdata, filename): + """ write coverage data as pickled `filename` """ + # Create the file data. + file_data = {} + + if covdata._arcs: + file_data['arcs'] = dict((f, list(amap)) for f, amap in iitems(covdata._arcs)) + else: + file_data['lines'] = dict((f, list(lmap)) for f, lmap in iitems(covdata._lines)) + + # Write the pickle to the file. + file_obj = open(filename, 'wb') + try: + pickle.dump(file_data, file_obj, 2) + finally: + file_obj.close() + + def test_read_write_lines_pickle(self): + """ test the old pickle format """ + covdata1 = CoverageData() + covdata1.set_lines(LINES_1) + self.write_pickled_file(covdata1, "lines.pkl") + + pickle2json("lines.pkl", "lines.json") + + covdata2 = CoverageData() + covdata2.read_file("lines.json") + self.assert_line_counts(covdata2, SUMMARY_1) + self.assert_measured_files(covdata2, MEASURED_FILES_1) + self.assertCountEqual(covdata2.lines("a.py"), A_PY_LINES_1) + self.assertEqual(covdata2.run_infos(), []) + + def test_read_write_arcs_pickle(self): + """ test the old pickle format """ + covdata1 = CoverageData() + covdata1.set_arcs(ARCS_3) + self.write_pickled_file(covdata1, "arcs.pkl") + + pickle2json("arcs.pkl", "arcs.json") + + covdata2 = CoverageData() + covdata2.read_file("arcs.json") + self.assert_line_counts(covdata2, SUMMARY_3) + self.assert_measured_files(covdata2, MEASURED_FILES_3) + self.assertCountEqual(covdata2.lines("x.py"), X_PY_LINES_3) + self.assertCountEqual(covdata2.arcs("x.py"), X_PY_ARCS_3) + self.assertCountEqual(covdata2.lines("y.py"), Y_PY_LINES_3) + self.assertCountEqual(covdata2.arcs("y.py"), Y_PY_ARCS_3) + self.assertEqual(covdata2.run_infos(), []) |