| Index: tools/telemetry/third_party/coverage/tests/test_debug.py
|
| diff --git a/tools/telemetry/third_party/coverage/tests/test_debug.py b/tools/telemetry/third_party/coverage/tests/test_debug.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4d9e9271763f592c4582d6bcf98915c3e89fb598
|
| --- /dev/null
|
| +++ b/tools/telemetry/third_party/coverage/tests/test_debug.py
|
| @@ -0,0 +1,137 @@
|
| +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
|
| +# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
|
| +
|
| +"""Tests of coverage/debug.py"""
|
| +
|
| +import os
|
| +import re
|
| +
|
| +import coverage
|
| +from coverage.backward import StringIO
|
| +from coverage.debug import info_formatter, info_header
|
| +from tests.coveragetest import CoverageTest
|
| +
|
| +
|
| +class InfoFormatterTest(CoverageTest):
|
| + """Tests of misc.info_formatter."""
|
| +
|
| + run_in_temp_dir = False
|
| +
|
| + def test_info_formatter(self):
|
| + lines = list(info_formatter([
|
| + ('x', 'hello there'),
|
| + ('very long label', ['one element']),
|
| + ('regular', ['abc', 'def', 'ghi', 'jkl']),
|
| + ('nothing', []),
|
| + ]))
|
| + self.assertEqual(lines, [
|
| + ' x: hello there',
|
| + 'very long label: one element',
|
| + ' regular: abc',
|
| + ' def',
|
| + ' ghi',
|
| + ' jkl',
|
| + ' nothing: -none-',
|
| + ])
|
| +
|
| + def test_info_formatter_with_generator(self):
|
| + lines = list(info_formatter(('info%d' % i, i) for i in range(3)))
|
| + self.assertEqual(lines, ['info0: 0', 'info1: 1', 'info2: 2'])
|
| +
|
| + def test_info_header(self):
|
| + self.assertEqual(
|
| + info_header("x"),
|
| + "-- x ---------------------------------------------------------"
|
| + )
|
| + self.assertEqual(
|
| + info_header("hello there"),
|
| + "-- hello there -----------------------------------------------"
|
| + )
|
| +
|
| +
|
| +class DebugTraceTest(CoverageTest):
|
| + """Tests of debug output."""
|
| +
|
| + def f1_debug_output(self, debug):
|
| + """Runs some code with `debug` option, returns the debug output."""
|
| + # Make code to run.
|
| + self.make_file("f1.py", """\
|
| + def f1(x):
|
| + return x+1
|
| +
|
| + for i in range(5):
|
| + f1(i)
|
| + """)
|
| +
|
| + debug_out = StringIO()
|
| + cov = coverage.Coverage(debug=debug)
|
| + cov._debug_file = debug_out
|
| + self.start_import_stop(cov, "f1")
|
| +
|
| + out_lines = debug_out.getvalue().splitlines()
|
| + return out_lines
|
| +
|
| + def test_debug_no_trace(self):
|
| + out_lines = self.f1_debug_output([])
|
| +
|
| + # We should have no output at all.
|
| + self.assertFalse(out_lines)
|
| +
|
| + def test_debug_trace(self):
|
| + out_lines = self.f1_debug_output(["trace"])
|
| +
|
| + # We should have a line like "Tracing 'f1.py'"
|
| + self.assertIn("Tracing 'f1.py'", out_lines)
|
| +
|
| + # We should have lines like "Not tracing 'collector.py'..."
|
| + coverage_lines = lines_matching(
|
| + out_lines,
|
| + r"^Not tracing .*: is part of coverage.py$"
|
| + )
|
| + self.assertTrue(coverage_lines)
|
| +
|
| + def test_debug_trace_pid(self):
|
| + out_lines = self.f1_debug_output(["trace", "pid"])
|
| +
|
| + # Now our lines are always prefixed with the process id.
|
| + pid_prefix = "^pid %5d: " % os.getpid()
|
| + pid_lines = lines_matching(out_lines, pid_prefix)
|
| + self.assertEqual(pid_lines, out_lines)
|
| +
|
| + # We still have some tracing, and some not tracing.
|
| + self.assertTrue(lines_matching(out_lines, pid_prefix + "Tracing "))
|
| + self.assertTrue(lines_matching(out_lines, pid_prefix + "Not tracing "))
|
| +
|
| + def test_debug_config(self):
|
| + out_lines = self.f1_debug_output(["config"])
|
| +
|
| + labels = """
|
| + attempted_config_files branch config_files cover_pylib data_file
|
| + debug exclude_list extra_css html_dir html_title ignore_errors
|
| + include omit parallel partial_always_list partial_list paths
|
| + precision show_missing source timid xml_output
|
| + """.split()
|
| + for label in labels:
|
| + label_pat = r"^\s*%s: " % label
|
| + self.assertEqual(len(lines_matching(out_lines, label_pat)), 1)
|
| +
|
| + def test_debug_sys(self):
|
| + out_lines = self.f1_debug_output(["sys"])
|
| +
|
| + labels = """
|
| + version coverage cover_dirs pylib_dirs tracer config_files
|
| + configs_read data_path python platform implementation executable
|
| + cwd path environment command_line cover_match pylib_match
|
| + """.split()
|
| + for label in labels:
|
| + label_pat = r"^\s*%s: " % label
|
| + self.assertEqual(
|
| + len(lines_matching(out_lines, label_pat)),
|
| + 1,
|
| + msg="Incorrect lines for %r" % label,
|
| + )
|
| +
|
| +
|
| +def lines_matching(lines, pat):
|
| + """Gives the list of lines from `lines` that match `pat`."""
|
| + return [l for l in lines if re.search(pat, l)]
|
|
|