diff options
Diffstat (limited to '_test/roundtrip.py')
-rw-r--r-- | _test/roundtrip.py | 154 |
1 files changed, 84 insertions, 70 deletions
diff --git a/_test/roundtrip.py b/_test/roundtrip.py index 8b87380..fa8b08a 100644 --- a/_test/roundtrip.py +++ b/_test/roundtrip.py @@ -8,10 +8,12 @@ import textwrap import io from pathlib import Path +from typing import Any, Optional, Union + unset = object() -def dedent(data): +def dedent(data: str) -> str: try: position_of_first_newline = data.index('\n') for idx in range(position_of_first_newline): @@ -24,7 +26,9 @@ def dedent(data): return textwrap.dedent(data) -def round_trip_load(inp, preserve_quotes=None, version=None): +def round_trip_load( + inp: Any, preserve_quotes: Optional[bool] = None, version: Optional[Any] = None +) -> Any: import ruamel.yaml # NOQA dinp = dedent(inp) @@ -34,7 +38,9 @@ def round_trip_load(inp, preserve_quotes=None, version=None): return yaml.load(dinp) -def round_trip_load_all(inp, preserve_quotes=None, version=None): +def round_trip_load_all( + inp: Any, preserve_quotes: Optional[bool] = None, version: Optional[Any] = None +) -> Any: import ruamel.yaml # NOQA dinp = dedent(inp) @@ -45,18 +51,18 @@ def round_trip_load_all(inp, preserve_quotes=None, version=None): def round_trip_dump( - data, - stream=None, # *, - indent=None, - block_seq_indent=None, - default_flow_style=unset, - top_level_colon_align=None, - prefix_colon=None, - explicit_start=None, - explicit_end=None, - version=None, - allow_unicode=True, -): + data: Any, + stream: Any = None, # *, + indent: Optional[int] = None, + block_seq_indent: Optional[int] = None, + default_flow_style: Any = unset, + top_level_colon_align: Any = None, + prefix_colon: Any = None, + explicit_start: Optional[bool] = None, + explicit_end: Optional[bool] = None, + version: Optional[Any] = None, + allow_unicode: bool = True, +) -> Union[str, None]: import ruamel.yaml # NOQA yaml = ruamel.yaml.YAML() @@ -71,25 +77,25 @@ def round_trip_dump( yaml.allow_unicode = allow_unicode if stream is not None: yaml.dump(data, stream=stream) - return + return None buf = io.StringIO() yaml.dump(data, stream=buf) return buf.getvalue() def round_trip_dump_all( - data, - stream=None, # *, - indent=None, - block_seq_indent=None, - default_flow_style=unset, - top_level_colon_align=None, - prefix_colon=None, - explicit_start=None, - explicit_end=None, - version=None, - allow_unicode=None, -): + data: Any, + stream: Any = None, # *, + indent: Optional[int] = None, + block_seq_indent: Optional[int] = None, + default_flow_style: Any = unset, + top_level_colon_align: Any = None, + prefix_colon: Any = None, + explicit_start: Optional[bool] = None, + explicit_end: Optional[bool] = None, + version: Optional[Any] = None, + allow_unicode: bool = True, +) -> Union[str, None]: import ruamel.yaml # NOQA yaml = ruamel.yaml.YAML() @@ -104,13 +110,13 @@ def round_trip_dump_all( yaml.allow_unicode = allow_unicode if stream is not None: yaml.dump(data, stream=stream) - return + return None buf = io.StringIO() yaml.dump_all(data, stream=buf) return buf.getvalue() -def diff(inp, outp, file_name='stdin'): +def diff(inp: str, outp: str, file_name: str = 'stdin') -> None: import difflib inl = inp.splitlines(True) # True for keepends @@ -125,20 +131,21 @@ def diff(inp, outp, file_name='stdin'): def round_trip( - inp, - outp=None, - extra=None, - intermediate=None, - indent=None, - block_seq_indent=None, - top_level_colon_align=None, - prefix_colon=None, - preserve_quotes=None, - explicit_start=None, - explicit_end=None, - version=None, - dump_data=None, -): + inp: str, + outp: Optional[str] = None, + extra: Optional[str] = None, + intermediate: Any = None, + indent: Optional[int] = None, + block_seq_indent: Optional[int] = None, + default_flow_style: Any = unset, + top_level_colon_align: Any = None, + prefix_colon: Any = None, + preserve_quotes: Any = None, + explicit_start: Optional[bool] = None, + explicit_end: Optional[bool] = None, + version: Optional[Any] = None, + dump_data: Any = None, +) -> Any: """ inp: input string to parse outp: expected output (equals input if not specified) @@ -167,6 +174,7 @@ def round_trip( explicit_end=explicit_end, version=version, ) + assert isinstance(res, str) if res != doutp: diff(doutp, res, 'input string') print('\nroundtrip data:\n', res, sep="") @@ -187,19 +195,19 @@ def round_trip( def na_round_trip( - inp, - outp=None, - extra=None, - intermediate=None, - indent=None, - top_level_colon_align=None, - prefix_colon=None, - preserve_quotes=None, - explicit_start=None, - explicit_end=None, - version=None, - dump_data=None, -): + inp: str, + outp: Optional[str] = None, + extra: Optional[str] = None, + intermediate: Any = None, + indent: Optional[int] = None, + top_level_colon_align: Any = None, + prefix_colon: Any = None, + preserve_quotes: Any = None, + explicit_start: Optional[bool] = None, + explicit_end: Optional[bool] = None, + version: Optional[Any] = None, + dump_data: Any = None, +) -> Any: """ inp: input string to parse outp: expected output (equals input if not specified) @@ -233,20 +241,20 @@ def na_round_trip( return res -def YAML(**kw): +def YAML(**kw: Any) -> Any: import ruamel.yaml # NOQA class MyYAML(ruamel.yaml.YAML): """auto dedent string parameters on load""" - def load(self, stream): + def load(self, stream: Any) -> Any: if isinstance(stream, str): if stream and stream[0] == '\n': stream = stream[1:] stream = textwrap.dedent(stream) return ruamel.yaml.YAML.load(self, stream) - def load_all(self, stream): + def load_all(self, stream: Any) -> Any: if isinstance(stream, str): if stream and stream[0] == '\n': stream = stream[1:] @@ -254,7 +262,7 @@ def YAML(**kw): for d in ruamel.yaml.YAML.load_all(self, stream): yield d - def dump(self, data, **kw): + def dump(self, data: Any, **kw: Any) -> Any: # type: ignore from ruamel.yaml.compat import StringIO, BytesIO # NOQA assert ('stream' in kw) ^ ('compare' in kw) @@ -270,11 +278,11 @@ def YAML(**kw): res = st.getvalue() print(res) if unordered_lines: - res = sorted(res.splitlines()) - expected = sorted(expected.splitlines()) + res = sorted(res.splitlines()) # type: ignore + expected = sorted(expected.splitlines()) # type: ignore assert res == expected - def round_trip(self, stream, **kw): + def round_trip(self, stream: Any, **kw: Any) -> None: from ruamel.yaml.compat import StringIO, BytesIO # NOQA assert isinstance(stream, str) @@ -291,7 +299,7 @@ def YAML(**kw): diff(outp, res, 'input string') assert res == outp - def round_trip_all(self, stream, **kw): + def round_trip_all(self, stream: Any, **kw: Any) -> None: from ruamel.yaml.compat import StringIO, BytesIO # NOQA assert isinstance(stream, str) @@ -311,7 +319,13 @@ def YAML(**kw): return MyYAML(**kw) -def save_and_run(program, base_dir=None, output=None, file_name=None, optimized=False): +def save_and_run( + program: str, + base_dir: Optional[Any] = None, + output: Optional[Any] = None, + file_name: Optional[Any] = None, + optimized: bool = False, +) -> int: """ safe and run a python program, thereby circumventing any restrictions on module level imports @@ -322,7 +336,7 @@ def save_and_run(program, base_dir=None, output=None, file_name=None, optimized= base_dir = Path(str(base_dir)) if file_name is None: file_name = 'safe_and_run_tmp.py' - file_name = base_dir / file_name + file_name = base_dir / file_name # type: ignore file_name.write_text(dedent(program)) try: @@ -335,9 +349,9 @@ def save_and_run(program, base_dir=None, output=None, file_name=None, optimized= res = check_output(cmd, stderr=STDOUT, universal_newlines=True, cwd=str(base_dir)) if output is not None: if '__pypy__' in sys.builtin_module_names: - res = res.splitlines(True) - res = [line for line in res if 'no version info' not in line] - res = ''.join(res) + res1 = res.splitlines(True) + res2 = [line for line in res1 if 'no version info' not in line] + res = ''.join(res2) print('result: ', res, end='') print('expected:', output, end='') assert res == output |