(self, docname: str, doctree: Node)
| 426 | return should_skip |
| 427 | |
| 428 | def test_doc(self, docname: str, doctree: Node) -> bool: |
| 429 | groups: dict[str, TestGroup] = {} |
| 430 | add_to_all_groups = [] |
| 431 | self.setup_runner = SphinxDocTestRunner(verbose=False, optionflags=self.opt) |
| 432 | self.test_runner = SphinxDocTestRunner(verbose=False, optionflags=self.opt) |
| 433 | self.cleanup_runner = SphinxDocTestRunner(verbose=False, optionflags=self.opt) |
| 434 | |
| 435 | self.test_runner._fakeout = self.setup_runner._fakeout # type: ignore[attr-defined] |
| 436 | self.cleanup_runner._fakeout = self.setup_runner._fakeout # type: ignore[attr-defined] |
| 437 | |
| 438 | if self.config.doctest_test_doctest_blocks: |
| 439 | condition = _condition_with_doctest |
| 440 | else: |
| 441 | condition = _condition_default |
| 442 | for node in doctree.findall(condition): |
| 443 | if self.skipped(node): # type: ignore[arg-type] |
| 444 | continue |
| 445 | |
| 446 | source = node['test'] if 'test' in node else node.astext() # type: ignore[index, operator] |
| 447 | filename = self.get_filename_for_node(node, docname) |
| 448 | line_number = self.get_line_number(node) |
| 449 | if not source: |
| 450 | logger.warning( |
| 451 | __('no code/output in %s block at %s:%s'), |
| 452 | node.get('testnodetype', 'doctest'), # type: ignore[attr-defined] |
| 453 | filename, |
| 454 | line_number, |
| 455 | ) |
| 456 | code = TestCode( |
| 457 | source, |
| 458 | type=node.get('testnodetype', 'doctest'), # type: ignore[attr-defined] |
| 459 | filename=filename, |
| 460 | lineno=line_number, # type: ignore[arg-type] |
| 461 | options=node.get('options'), # type: ignore[attr-defined] |
| 462 | ) |
| 463 | node_groups = node.get('groups', [self.config.doctest_test_doctest_blocks]) # type: ignore[attr-defined] |
| 464 | if '*' in node_groups: |
| 465 | add_to_all_groups.append(code) |
| 466 | continue |
| 467 | for groupname in node_groups: |
| 468 | if groupname not in groups: |
| 469 | groups[groupname] = TestGroup(groupname) |
| 470 | groups[groupname].add_code(code) |
| 471 | for code in add_to_all_groups: |
| 472 | for group in groups.values(): |
| 473 | group.add_code(code) |
| 474 | if self.config.doctest_global_setup: |
| 475 | code = TestCode( |
| 476 | self.config.doctest_global_setup, |
| 477 | 'testsetup', |
| 478 | filename='<global_setup>', |
| 479 | lineno=0, |
| 480 | ) |
| 481 | for group in groups.values(): |
| 482 | group.add_code(code, prepend=True) |
| 483 | if self.config.doctest_global_cleanup: |
| 484 | code = TestCode( |
| 485 | self.config.doctest_global_cleanup, |
no test coverage detected