summaryrefslogtreecommitdiff
path: root/tests/plugin2.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/plugin2.py')
-rw-r--r--tests/plugin2.py38
1 files changed, 31 insertions, 7 deletions
diff --git a/tests/plugin2.py b/tests/plugin2.py
index 1fa66cb2..4fb3d057 100644
--- a/tests/plugin2.py
+++ b/tests/plugin2.py
@@ -1,24 +1,48 @@
"""A plugin for test_plugins.py to import."""
import coverage
+from coverage.parser import CodeParser
+
class Plugin(coverage.CoveragePlugin):
def file_tracer(self, filename):
if "render.py" in filename:
- return RenderFileTracer(filename)
+ return RenderFileTracer()
+
+ def file_reporter(self, filename):
+ return FileReporter(filename)
class RenderFileTracer(coverage.plugin.FileTracer):
- def __init__(self, filename):
- pass
+ """A FileTracer using information from the caller."""
def has_dynamic_source_filename(self):
return True
def dynamic_source_filename(self, filename, frame):
- filename = "fake%d.html" % frame.f_lineno
- print("dynamic filename: %r" % filename)
- return filename
+ if frame.f_code.co_name != "render":
+ return None
+ return frame.f_locals['filename']
def line_number_range(self, frame):
- return 17,19
+ lineno = frame.f_locals['linenum']
+ return lineno,lineno+1
+
+
+class FileReporter(coverage.plugin.FileReporter):
+ # TODO: Why do I have to make a FileReporter just to make a CodeParser??
+ def __init__(self, filename):
+ self.filename = filename
+
+ def get_parser(self, exclude=None):
+ # Goofy test arrangement: claim that the file has as many lines as the
+ # number in its name.
+ num = self.filename.split(".")[0].split("_")[1]
+ return PluginParser(int(num))
+
+class PluginParser(CodeParser):
+ def __init__(self, num_lines):
+ self.num_lines = num_lines
+
+ def parse_source(self):
+ return set(range(1, self.num_lines+1)), set([])