|
18 | 18 | import time
|
19 | 19 | import unittest
|
20 | 20 |
|
| 21 | +from StringIO import StringIO |
21 | 22 | from imp import load_source
|
22 | 23 |
|
23 | 24 | from compare_perf_tests import PerformanceTestResult
|
|
33 | 34 | BenchmarkDriver = Benchmark_Driver.BenchmarkDriver
|
34 | 35 | BenchmarkDoctor = Benchmark_Driver.BenchmarkDoctor
|
35 | 36 | LoggingReportFormatter = Benchmark_Driver.LoggingReportFormatter
|
| 37 | +MarkdownReportHandler = Benchmark_Driver.MarkdownReportHandler |
36 | 38 |
|
37 | 39 |
|
38 | 40 | class Test_parse_args(unittest.TestCase):
|
@@ -421,6 +423,58 @@ def test_no_prefix_for_base_logging(self):
|
421 | 423 | self.assertEquals(f.format(lr), 'INFO Hi!')
|
422 | 424 |
|
423 | 425 |
|
| 426 | +class TestMarkdownReportHandler(unittest.TestCase): |
| 427 | + def setUp(self): |
| 428 | + super(TestMarkdownReportHandler, self).setUp() |
| 429 | + self.stream = StringIO() |
| 430 | + self.handler = MarkdownReportHandler(self.stream) |
| 431 | + |
| 432 | + def assert_contains(self, texts): |
| 433 | + assert not isinstance(texts, str) |
| 434 | + for text in texts: |
| 435 | + self.assertIn(text, self.stream.getvalue()) |
| 436 | + |
| 437 | + def record(self, level, category, msg): |
| 438 | + return logging.makeLogRecord({ |
| 439 | + 'name': 'BenchmarkDoctor.' + category, |
| 440 | + 'levelno': level, 'msg': msg}) |
| 441 | + |
| 442 | + def test_init_writes_table_header(self): |
| 443 | + self.assertEquals(self.handler.level, logging.INFO) |
| 444 | + self.assert_contains(['Benchmark Check Report\n', '---|---']) |
| 445 | + |
| 446 | + def test_close_writes_final_newlines(self): |
| 447 | + self.handler.close() |
| 448 | + self.assert_contains(['---|---\n\n']) |
| 449 | + |
| 450 | + def test_errors_and_warnings_start_new_rows_with_icons(self): |
| 451 | + self.handler.emit(self.record(logging.ERROR, '', 'Blunder')) |
| 452 | + self.handler.emit(self.record(logging.WARNING, '', 'Boo-boo')) |
| 453 | + self.assert_contains(['\n⛔️ | Blunder', |
| 454 | + '\n⚠️ | Boo-boo']) |
| 455 | + |
| 456 | + def test_category_icons(self): |
| 457 | + self.handler.emit(self.record(logging.WARNING, 'naming', 'naming')) |
| 458 | + self.handler.emit(self.record(logging.WARNING, 'runtime', 'runtime')) |
| 459 | + self.handler.emit(self.record(logging.WARNING, 'memory', 'memory')) |
| 460 | + self.assert_contains(['🔤 | naming', |
| 461 | + '⏱ | runtime', |
| 462 | + 'Ⓜ️ | memory']) |
| 463 | + |
| 464 | + def test_info_stays_in_table_cell_breaking_line_row_to_subscript(self): |
| 465 | + """Assuming Infos only follow after Errors and Warnings. |
| 466 | +
|
| 467 | + Infos don't emit category icons. |
| 468 | + """ |
| 469 | + self.handler.emit(self.record(logging.ERROR, 'naming', 'Blunder')) |
| 470 | + self.handler.emit(self.record(logging.INFO, 'naming', 'Fixit')) |
| 471 | + self.assert_contains(['Blunder <br><sub> Fixit']) |
| 472 | + |
| 473 | + def test_names_in_code_format(self): |
| 474 | + self.handler.emit(self.record(logging.WARNING, '', "'QuotedName'")) |
| 475 | + self.assert_contains(['| `QuotedName`']) |
| 476 | + |
| 477 | + |
424 | 478 | def _PTR(min=700, mem_pages=1000, setup=None):
|
425 | 479 | """Create PerformanceTestResult Stub."""
|
426 | 480 | return Stub(samples=Stub(min=min), mem_pages=mem_pages, setup=setup)
|
|
0 commit comments