Skip to content

Commit 8e38b67

Browse files
authored
Merge pull request #21477 from palimondo/against-the-dark
[benchmark] BenchmarkDriver check --markdown
2 parents c12e062 + b831f93 commit 8e38b67

File tree

2 files changed

+41
-9
lines changed

2 files changed

+41
-9
lines changed

benchmark/scripts/Benchmark_Driver

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -330,11 +330,15 @@ class BenchmarkDoctor(object):
330330
super(BenchmarkDoctor, self).__init__()
331331
self.driver = driver or BenchmarkDriver(args)
332332
self.results = {}
333-
self.console_handler = logging.StreamHandler(sys.stdout)
334-
self.console_handler.setLevel(logging.DEBUG if args.verbose else
335-
logging.INFO)
336-
self.console_handler.setFormatter(
337-
LoggingReportFormatter(use_color=sys.stdout.isatty()))
333+
334+
if hasattr(args, 'markdown') and args.markdown:
335+
self.console_handler = MarkdownReportHandler(sys.stdout)
336+
else:
337+
self.console_handler = logging.StreamHandler(sys.stdout)
338+
self.console_handler.setFormatter(
339+
LoggingReportFormatter(use_color=sys.stdout.isatty()))
340+
self.console_handler.setLevel(logging.DEBUG if args.verbose else
341+
logging.INFO)
338342
self.log.addHandler(self.console_handler)
339343
self.log.debug('Checking tests: %s', ', '.join(self.driver.tests))
340344
self.requirements = [
@@ -350,6 +354,7 @@ class BenchmarkDoctor(object):
350354
"""Close log handlers on exit."""
351355
for handler in list(self.log.handlers):
352356
handler.close()
357+
self.log.removeHandler(self.console_handler)
353358

354359
benchmark_naming_convention_re = re.compile(r'[A-Z][a-zA-Z0-9\-.!?]+')
355360
camel_humps_re = re.compile(r'[a-z][A-Z]')
@@ -703,9 +708,13 @@ def parse_args(args):
703708
'check',
704709
help='',
705710
parents=[shared_benchmarks_parser])
706-
check_parser.add_argument(
711+
check_group = check_parser.add_mutually_exclusive_group()
712+
check_group.add_argument(
707713
'-v', '--verbose', action='store_true',
708-
help='show more details during benchmark analysis',)
714+
help='show more details during benchmark analysis')
715+
check_group.add_argument(
716+
'-md', '--markdown', action='store_true',
717+
help='format report as Markdown table')
709718
check_parser.set_defaults(func=BenchmarkDoctor.run_check)
710719

711720
compare_parser = subparsers.add_parser(

benchmark/scripts/test_Benchmark_Driver.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,20 @@ def test_check_supports_vebose_output(self):
120120
self.assertTrue(parse_args(['check', '-v']).verbose)
121121
self.assertTrue(parse_args(['check', '--verbose']).verbose)
122122

123+
def test_check_supports_mardown_output(self):
124+
self.assertFalse(parse_args(['check']).markdown)
125+
self.assertTrue(parse_args(['check', '-md']).markdown)
126+
self.assertTrue(parse_args(['check', '--markdown']).markdown)
127+
128+
def test_check_flags_are_mutually_exclusive(self):
129+
with captured_output() as (out, err):
130+
self.assertRaises(SystemExit,
131+
parse_args, ['check', '-md', '-v'])
132+
self.assert_contains(
133+
['error:', 'argument -v/--verbose: ' +
134+
'not allowed with argument -md/--markdown'],
135+
err.getvalue())
136+
123137

124138
class ArgsStub(object):
125139
def __init__(self):
@@ -497,7 +511,7 @@ def setUpClass(cls):
497511

498512
def setUp(self):
499513
super(TestBenchmarkDoctor, self).setUp()
500-
self.args = Stub(verbose=False)
514+
self.args = Stub(verbose=False, markdown=False)
501515
self._doctor_log_handler.reset()
502516
self.logs = self._doctor_log_handler.messages
503517

@@ -516,8 +530,9 @@ def test_uses_logging(self):
516530
def test_supports_verbose_output(self):
517531
driver = BenchmarkDriverMock(tests=['B1', 'B2'])
518532
driver.verbose = True
533+
self.args.verbose = True
519534
with captured_output() as (out, _):
520-
BenchmarkDoctor(Stub(verbose=True), driver)
535+
BenchmarkDoctor(self.args, driver)
521536
self.assert_contains(['Checking tests: B1, B2'], out.getvalue())
522537

523538
def test_uses_report_formatter(self):
@@ -528,6 +543,14 @@ def test_uses_report_formatter(self):
528543
self.assertTrue(isinstance(console_handler.formatter,
529544
LoggingReportFormatter))
530545

546+
def test_uses_optional_markdown_report_formatter(self):
547+
self.args.markdown = True
548+
with captured_output() as (_, _):
549+
doc = BenchmarkDoctor(self.args, BenchmarkDriverMock(tests=['B1']))
550+
self.assertTrue(doc)
551+
console_handler = logging.getLogger('BenchmarkDoctor').handlers[1]
552+
self.assertTrue(isinstance(console_handler, MarkdownReportHandler))
553+
531554
def test_measure_10_independent_1s_benchmark_series(self):
532555
"""Measurement strategy takes 5 i2 and 5 i1 series.
533556

0 commit comments

Comments
 (0)