Skip to content

Commit

Permalink
More doctest fixes.
Browse files Browse the repository at this point in the history
This is incomplete but I'm going to try to deal with the following:

1) each line in a black example is after #308 it's own line, so try to
   collapse subsequent code blocks.

2) It seem that we get a number of report_failure, but failure is just
   when the output does not match, though when we have a block with
   multiple >>> in sequence and we ignore output on purpose they now are
   seen as failure.

It's not super great and will need a buch of workaround
  • Loading branch information
Carreau committed Jan 11, 2024
1 parent 0befe71 commit 3cc308a
Showing 1 changed file with 64 additions and 2 deletions.
66 changes: 64 additions & 2 deletions papyri/gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,17 @@
from itertools import count
from pathlib import Path
from types import FunctionType, ModuleType
from typing import Any, Dict, FrozenSet, List, MutableMapping, Optional, Sequence, Tuple
from typing import (
Any,
Dict,
FrozenSet,
List,
MutableMapping,
Optional,
Sequence,
Tuple,
Union,
)
import io

import jedi
Expand Down Expand Up @@ -1134,16 +1144,64 @@ def report_unexpected_exception(self, out, test, example, exc_info):
)

def report_failure(self, out, test, example, got):
out("Got test", repr(got), repr(test))
tok_entries = self._get_tok_entries(example)
self._example_section_data.append(
Code(tok_entries, got, ExecutionStatus.failure)
)

def get_example_section_data(self):
def get_example_section_data(self) -> Section:
example_section_data = self._example_section_data
self._example_section_data = Section([], None)
return example_section_data

# TODO:

def _compact(self, example_section_data) -> Section:
acc: List[Union[MText, Code]] = []
current_code: Optional[
Code
] = None # a code item which never have am out, or None

# class GenToken(Node):
# value: str
# qa: Optional[str]
# pygmentclass: str

# class Code(Node):
# entries: List[GenToken]
# out: str
# ce_status: str

for item in example_section_data:
if not isinstance(item, Code):
if current_code is not None:
acc.append(current_code)
acc.append(MText(str(current_code.out)))
acc.append(MText(str(current_code.ce_status)))
current_code = None
acc.append(item)
else:
if current_code is None:
assert item is not None
current_code = item
continue

if current_code.ce_status == item.ce_status:
current_code = Code(
current_code.entries + item.entries, item.out, item.ce_status
)
else:
acc.append(current_code)
acc.append(MText(str(current_code.out)))
acc.append(MText(str(current_code.ce_status)))
assert item is not None
current_code = item

if current_code:
acc.append(current_code)
return Section(acc, None)


class Gen:
"""
Expand Down Expand Up @@ -1347,6 +1405,10 @@ def debugprint(*args):
elif block:
example_section_data.append(MText(block))

example_section_data = doctest_runner._compact(example_section_data)

# TODO: compact codeblocks here, if we have multiple codebalc

# TODO fix this if plt.close not called and still a lingering figure.
fig_managers = _pylab_helpers.Gcf.get_all_fig_managers()
if len(fig_managers) != 0:
Expand Down

0 comments on commit 3cc308a

Please sign in to comment.