def test_no_output(self): with file_utils.Tempdir() as d: inpath = d.create_file("in.pytd", "def f(x) -> str: ...") # Not specifying an output is fine; the tool simply checks that the input # file is parseable. sys.argv = ["main.py", inpath] pytd_tool.main()
def test_parse_error(self): with file_utils.Tempdir() as d: inpath = d.create_file("in.pytd", "def f(x): str") # malformed pytd sys.argv = ["main.py", inpath] with self.assertRaises(SystemExit): pytd_tool.main()
def test_output(self): with file_utils.Tempdir() as d: src = textwrap.dedent(""" @overload def f(x: int) -> str: ... @overload def f(x: str) -> str: ... """).strip() inpath = d.create_file("in.pytd", src) outpath = os.path.join(d.path, "out.pytd") sys.argv = ["main.py", inpath, outpath] pytd_tool.main() with open(outpath, "r") as f: self.assertMultiLineEqual(f.read(), src)
def test_optimize(self): with file_utils.Tempdir() as d: inpath = d.create_file( "in.pytd", """ @overload def f(x: int) -> str: ... @overload def f(x: str) -> str: ... """) outpath = os.path.join(d.path, "out.pytd") sys.argv = ["main.py", "--optimize", inpath, outpath] pytd_tool.main() with open(outpath, "r") as f: self.assertMultiLineEqual( f.read(), textwrap.dedent(""" from typing import Union def f(x: Union[int, str]) -> str: ... """).strip())
def test_missing_input(self): sys.argv = ["main.py"] with self.assertRaises(SystemExit): pytd_tool.main()
def test_version_error(self): sys.argv = ["main.py", "--python_version=4.0"] with self.assertRaises(SystemExit): pytd_tool.main()