diff options
-rw-r--r-- | coverage/data.py | 36 | ||||
-rw-r--r-- | coverage/debug.py | 17 | ||||
-rw-r--r-- | tests/test_data.py | 12 |
3 files changed, 37 insertions, 28 deletions
diff --git a/coverage/data.py b/coverage/data.py index 9a636358..c19b5c64 100644 --- a/coverage/data.py +++ b/coverage/data.py @@ -5,14 +5,16 @@ import glob import json +import optparse import os import os.path import random +import re import socket from coverage import env from coverage.backward import iitems, string_class -from coverage.debug import _TEST_NAME_FILE, pretty_data +from coverage.debug import _TEST_NAME_FILE from coverage.files import PathAliases from coverage.misc import CoverageException, file_be_gone @@ -699,6 +701,29 @@ class CoverageDataFiles(object): file_be_gone(f) +def canonicalize_json_data(data): + """Canonicalize our JSON data so it can be compared.""" + for fname, lines in iitems(data.get('lines', {})): + data['lines'][fname] = sorted(lines) + for fname, arcs in iitems(data.get('arcs', {})): + data['arcs'][fname] = sorted(arcs) + + +def pretty_data(data): + """Format data as JSON, but as nicely as possible. + + Returns a string. + + """ + # Start with a basic JSON dump. + out = json.dumps(data, indent=4, sort_keys=True) + # But pairs of numbers shouldn't be split across lines... + out = re.sub(r"\[\s+(-?\d+),\s+(-?\d+)\s+]", r"[\1, \2]", out) + # Trailing spaces mess with tests, get rid of them. + out = re.sub(r"(?m)\s+$", "", out) + return out + + def debug_main(args): """Dump the raw data from data files. @@ -707,9 +732,18 @@ def debug_main(args): $ python -m coverage.data [FILE] """ + parser = optparse.OptionParser() + parser.add_option( + "-c", "--canonical", action="store_true", + help="Sort data into a canonical order", + ) + options, args = parser.parse_args(args) + for filename in (args or [".coverage"]): print("--- {0} ------------------------------".format(filename)) data = CoverageData._read_raw_data_file(filename) + if options.canonical: + canonicalize_json_data(data) print(pretty_data(data)) diff --git a/coverage/debug.py b/coverage/debug.py index 8ae087d7..8d6892bb 100644 --- a/coverage/debug.py +++ b/coverage/debug.py @@ -4,9 +4,7 @@ """Control of and utilities for debugging.""" import inspect -import json import os -import re import sys @@ -100,18 +98,3 @@ def dump_stack_frames(out=None): # pragma: debugging out = out or sys.stdout out.write(short_stack()) out.write("\n") - - -def pretty_data(data): - """Format data as JSON, but as nicely as possible. - - Returns a string. - - """ - # Start with a basic JSON dump. - out = json.dumps(data, indent=4, sort_keys=True) - # But pairs of numbers shouldn't be split across lines... - out = re.sub(r"\[\s+(-?\d+),\s+(-?\d+)\s+]", r"[\1, \2]", out) - # Trailing spaces mess with tests, get rid of them. - out = re.sub(r"(?m)\s+$", "", out) - return out diff --git a/tests/test_data.py b/tests/test_data.py index ec3a6786..93e482d7 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -11,8 +11,8 @@ import re import mock -from coverage.backward import iitems, StringIO -from coverage.data import CoverageData, CoverageDataFiles, debug_main +from coverage.backward import StringIO +from coverage.data import CoverageData, CoverageDataFiles, debug_main, canonicalize_json_data from coverage.files import PathAliases, canonical_filename from coverage.misc import CoverageException @@ -493,14 +493,6 @@ class CoverageDataTestInTempDir(DataTestHelpers, CoverageTest): self.assertEqual(expected[name], json_got) -def canonicalize_json_data(data): - """Canonicalize our JSON data so it can be compared.""" - for fname, lines in iitems(data.get('lines', {})): - data['lines'][fname] = sorted(lines) - for fname, arcs in iitems(data.get('arcs', {})): - data['arcs'][fname] = sorted(arcs) - - class CoverageDataFilesTest(DataTestHelpers, CoverageTest): """Tests of CoverageDataFiles.""" |