diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2014-06-12 17:17:38 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2014-06-12 17:17:38 -0400 |
commit | 44527cc9db62aa3979c69abe4edb7070aafd6897 (patch) | |
tree | eb0476b7b5cab892b8e122cb3e8291b5458763c8 /coverage/collector.py | |
parent | be5178fda38750c0aae78061bf1b1bf3397a467d (diff) | |
download | python-coveragepy-git-44527cc9db62aa3979c69abe4edb7070aafd6897.tar.gz |
Hacked-in django template support
--HG--
branch : django
Diffstat (limited to 'coverage/collector.py')
-rw-r--r-- | coverage/collector.py | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/coverage/collector.py b/coverage/collector.py index 94af5df5..07a87e03 100644 --- a/coverage/collector.py +++ b/coverage/collector.py @@ -45,6 +45,7 @@ class PyTracer(object): self.should_trace = None self.should_trace_cache = None self.warn = None + self.handler = None self.cur_file_data = None self.last_line = 0 self.data_stack = [] @@ -76,7 +77,7 @@ class PyTracer(object): self.cur_file_data[pair] = None if self.coroutine_id_func: self.data_stack = self.data_stacks[self.coroutine_id_func()] - self.cur_file_data, self.last_line = self.data_stack.pop() + self.handler, self.cur_file_data, self.last_line = self.data_stack.pop() self.last_exc_back = None if event == 'call': @@ -85,19 +86,22 @@ class PyTracer(object): if self.coroutine_id_func: self.data_stack = self.data_stacks[self.coroutine_id_func()] self.last_coroutine = self.coroutine_id_func() - self.data_stack.append((self.cur_file_data, self.last_line)) + self.data_stack.append((self.handler, self.cur_file_data, self.last_line)) filename = frame.f_code.co_filename if filename not in self.should_trace_cache: - tracename = self.should_trace(filename, frame) - self.should_trace_cache[filename] = tracename + tracename, handler = self.should_trace(filename, frame) + self.should_trace_cache[filename] = tracename, handler else: - tracename = self.should_trace_cache[filename] + tracename, handler = self.should_trace_cache[filename] #print("called, stack is %d deep, tracename is %r" % ( # len(self.data_stack), tracename)) + if tracename and handler: + tracename = handler.file_name(frame) if tracename: if tracename not in self.data: self.data[tracename] = {} self.cur_file_data = self.data[tracename] + self.handler = handler else: self.cur_file_data = None # Set the last_line to -1 because the next arc will be entering a @@ -107,14 +111,20 @@ class PyTracer(object): # Record an executed line. #if self.coroutine_id_func: # assert self.last_coroutine == self.coroutine_id_func() - if self.cur_file_data is not None: - if self.arcs: - #print("lin", self.last_line, frame.f_lineno) - self.cur_file_data[(self.last_line, frame.f_lineno)] = None - else: - #print("lin", frame.f_lineno) - self.cur_file_data[frame.f_lineno] = None - self.last_line = frame.f_lineno + if self.handler: + lineno_from, lineno_to = self.handler.line_number_range(frame) + else: + lineno_from, lineno_to = frame.f_lineno, frame.f_lineno + if lineno_from != -1: + if self.cur_file_data is not None: + if self.arcs: + #print("lin", self.last_line, frame.f_lineno) + self.cur_file_data[(self.last_line, lineno_from)] = None + else: + #print("lin", frame.f_lineno) + for lineno in range(lineno_from, lineno_to+1): + self.cur_file_data[lineno] = None + self.last_line = lineno_to elif event == 'return': if self.arcs and self.cur_file_data: first = frame.f_code.co_firstlineno @@ -123,7 +133,7 @@ class PyTracer(object): if self.coroutine_id_func: self.data_stack = self.data_stacks[self.coroutine_id_func()] self.last_coroutine = self.coroutine_id_func() - self.cur_file_data, self.last_line = self.data_stack.pop() + self.handler, self.cur_file_data, self.last_line = self.data_stack.pop() #print("returned, stack is %d deep" % (len(self.data_stack))) elif event == 'exception': #print("exc", self.last_line, frame.f_lineno) |