summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordhuth <derickhuth@gmail.com>2014-11-07 14:33:06 -0700
committerdhuth <derickhuth@gmail.com>2014-11-07 14:33:06 -0700
commiteb9236c5353785472ae132f27e1cfb9f1e4264a5 (patch)
treebedc5be7d1bdb8d32c1868caa496a8a1530d8d8a
parent5db772d7ba5c5a6cab3b9f9da0bd4eb42cc331b7 (diff)
downloadchill-eb9236c5353785472ae132f27e1cfb9f1e4264a5.tar.gz
chill-eb9236c5353785472ae132f27e1cfb9f1e4264a5.tar.bz2
chill-eb9236c5353785472ae132f27e1cfb9f1e4264a5.zip
Added coverage program
-rw-r--r--test-chill/coverage.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/test-chill/coverage.py b/test-chill/coverage.py
new file mode 100644
index 0000000..9941a9a
--- /dev/null
+++ b/test-chill/coverage.py
@@ -0,0 +1,53 @@
+import argparse
+import pickle
+
+
+def loadcov(filename = 'coverage.pickle'):
+ with open(filename) as f:
+ return pickle.load(f)
+
+
+def lines(covset, filename):
+ for line in covset.coverage_by_file[filename].lines:
+ yield line.lineno, line.count(), line.code
+
+
+def nonexecuted(covset, filename):
+ return filter(lambda line: line[1] == 0, lines(covset, filename))
+
+
+def commented(covset, filename):
+ return filter(lambda line: line[1] is None, lines(covset, filename))
+
+
+def linerange(lineiter, minline, maxline):
+ return filter(lambda line: line[0] >= minline and line[0] <= maxline, lineiter)
+
+
+def print_nonexec(argsns, cov):
+ if argsns.filename is None:
+ covlist = list((k, len(list(nonexecuted(cov, k)))) for k in cov.filenames)
+ covlist = sorted(covlist, key=lambda i: i[1])
+ for i in reversed(range(len(covlist))):
+ print('{}: {}'.format(covlist[i][0].ljust(24), covlist[i][1]))
+ else:
+ minline, maxline = map(int,argsns.linerange)
+ for lineno, count, code in linerange(nonexecuted(cov, argsns.filename), minline, maxline):
+ print('{}: {}'.format(str(lineno).rjust(5), code))
+
+
+def make_argparser():
+ arg_parser = argparse.ArgumentParser('coverage.py')
+ cmd_parser_set = arg_parser.add_subparsers()
+ nonexec_cmd = cmd_parser_set.add_parser('nonexec')
+ nonexec_cmd.add_argument('-f', dest='filename', default=None)
+ nonexec_cmd.add_argument('-r', dest='linerange', nargs=2, default=(0, 120000), metavar='STARTLINE ENDLINE')
+ nonexec_cmd.set_defaults(func=print_nonexec)
+ return arg_parser
+
+
+if __name__ == '__main__':
+ argsns = make_argparser().parse_args()
+ cov = loadcov()
+ argsns.func(argsns, cov)
+