summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2013-09-08 15:31:10 -0400
committerNed Batchelder <ned@nedbatchelder.com>2013-09-08 15:31:10 -0400
commit7ee8de2756922ae14cd51bbbede2ca25be86d7f6 (patch)
tree99f4b887aebea73442e9d742d2fe580d9da8a42b
parent603be79c849af9fa01ec520e9bcce4692f1e2092 (diff)
downloadpython-coveragepy-git-7ee8de2756922ae14cd51bbbede2ca25be86d7f6.tar.gz
A test that the collector is using the should_trace_cache properly.
-rw-r--r--tests/test_collector.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/test_collector.py b/tests/test_collector.py
new file mode 100644
index 00000000..d0aa997e
--- /dev/null
+++ b/tests/test_collector.py
@@ -0,0 +1,47 @@
+"""Tests of coverage/collector.py and other collectors."""
+
+import re
+
+import coverage
+from coverage.backward import StringIO
+
+from tests.coveragetest import CoverageTest
+
+
+class CollectorTest(CoverageTest):
+ """Test specific aspects of the collection process."""
+
+ def test_should_trace_cache(self):
+ # The tracers should only invoke should_trace once for each file name.
+
+ # Make some files that invoke each other.
+ self.make_file("f1.py", """\
+ def f1(x, f):
+ return f(x)
+ """)
+
+ self.make_file("f2.py", """\
+ import f1
+
+ def func(x):
+ return f1.f1(x, otherfunc)
+
+ def otherfunc(x):
+ return x*x
+
+ for i in range(10):
+ func(i)
+ """)
+
+ debug_out = StringIO()
+ cov = coverage.coverage(
+ include=["f1.py"], debug=['trace'], debug_file=debug_out
+ )
+
+ # Import the python file, executing it.
+ self.start_import_stop(cov, "f2")
+
+ # Grab all the filenames mentioned in debug output, there should be no
+ # duplicates.
+ filenames = re.findall(r"'[^']+'", debug_out.getvalue())
+ self.assertEqual(len(filenames), len(set(filenames)))