diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2011-08-08 20:37:38 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2011-08-08 20:37:38 -0400 |
commit | 829215d157dca64cd1d88be27908e73a084715a7 (patch) | |
tree | 4ea73ce6678a4ebd4be47e23ee58ae4603bedd70 /coverage/fullcoverage | |
parent | cbf42dc7273bfb828c8124c7b7229be15c15b202 (diff) | |
download | python-coveragepy-git-829215d157dca64cd1d88be27908e73a084715a7.tar.gz |
A fullcoverage tracer that works. Events are stashed, then replayed when coverage is started.
Diffstat (limited to 'coverage/fullcoverage')
-rw-r--r-- | coverage/fullcoverage/encodings.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/coverage/fullcoverage/encodings.py b/coverage/fullcoverage/encodings.py index 48b2b2e0..4e1ab354 100644 --- a/coverage/fullcoverage/encodings.py +++ b/coverage/fullcoverage/encodings.py @@ -17,13 +17,22 @@ import sys class FullCoverageTracer(object): def __init__(self): + # `traces` is a list of trace events. Frames are tricky: the same + # frame object is used for a whole scope, with new line numbers + # written into it. So in one scope, all the frame objects are the + # same object, and will eventually all will point to the last line + # executed. So we keep the line numbers alongside the frames. + # The list looks like: + # + # traces = [ + # ((frame, event, arg), lineno), ... + # ] + # self.traces = [] def fullcoverage_trace(self, *args): frame, event, arg = args - #if "os.py" in frame.f_code.co_filename: - # print("%s @ %d" % (frame.f_code.co_filename, frame.f_lineno)) - self.traces.append(args) + self.traces.append((args, frame.f_lineno)) return self.fullcoverage_trace sys.settrace(FullCoverageTracer().fullcoverage_trace) |