mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-09 03:31:28 +00:00
40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
from typing import Any, Callable, Generic, Tuple
|
|
|
|
from approvaltests import verify_all
|
|
from approvaltests.core.options import Options
|
|
from approvaltests.inline.types import NT1, NT2, NT3, T1, T2, T3
|
|
|
|
|
|
class Parse3(Generic[T1, T2, T3]):
|
|
def __init__(
|
|
self,
|
|
text: str,
|
|
transformer: Callable[[str], Tuple[T1, T2, T3]],
|
|
options: Options,
|
|
) -> None:
|
|
self.text = text
|
|
self._transformer = transformer
|
|
self.options = options
|
|
|
|
def verify_all(self, transform: Callable[[T1, T2, T3], Any]) -> None:
|
|
from approvaltests.inline.parse import Parse
|
|
|
|
verify_all(
|
|
"",
|
|
Parse.parse_inputs(self.text, self._transformer),
|
|
lambda s: f"{s[0]}, {s[1]}, {s[2]} -> {transform(s[0], s[1], s[2])}",
|
|
options=self.options.inline(),
|
|
)
|
|
|
|
def transform3(
|
|
self,
|
|
transform1: Callable[[T1], NT1],
|
|
transform2: Callable[[T2], NT2],
|
|
transform3: Callable[[T3], NT3],
|
|
) -> "Parse3[NT1, NT2, NT3]":
|
|
def transformer(s: str) -> Tuple[NT1, NT2, NT3]:
|
|
t1, t2, t3 = self._transformer(s)
|
|
return (transform1(t1), transform2(t2), transform3(t3))
|
|
|
|
return Parse3(self.text, transformer, self.options)
|