| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | import pathlibimport shutilimport subprocessimport unittest.mockimport tooncherdef test_start_engine():    process = tooncher.start_engine(        engine_path=pathlib.Path(shutil.which("printenv")),        gameserver="gameserver",        playcookie="cookie",        stdout=subprocess.PIPE,        stderr=subprocess.PIPE,    )    assert isinstance(process, subprocess.Popen)    stdout, stderr = process.communicate()    assert not stderr    env = stdout.strip().split(b"\n")    assert b"TTR_GAMESERVER=gameserver" in env    assert b"TTR_PLAYCOOKIE=cookie" in env@unittest.mock.patch("os.environ", {"SOME": "VAR", "OTHER": "VALUE"})def test_start_engine_mac():    app_support_path = "/Users/me/Library/Application Support"    engine_path = pathlib.Path(app_support_path).joinpath(        "Toontown Rewritten", "Toontown Rewritten"    )    with unittest.mock.patch("subprocess.Popen") as popen_mock:        with unittest.mock.patch("sys.platform", "darwin"):            # python3.5's pathlib.Path.resolve raises FileNotFoundError            with unittest.mock.patch(                "pathlib.Path.resolve",                new=lambda p: p.with_suffix(".resolved"),            ):                tooncher.start_engine(                    engine_path=engine_path,                    gameserver="gameserver",                    playcookie="cookie",                    check=True,                )    popen_mock.assert_called_once_with(        args=[str(engine_path) + ".resolved"],        check=True,        cwd=str(engine_path.parent),        env={            "SOME": "VAR",            "OTHER": "VALUE",            "TTR_GAMESERVER": "gameserver",            "TTR_PLAYCOOKIE": "cookie",            "DYLD_LIBRARY_PATH": app_support_path            + "/Toontown Rewritten/Libraries.bundle",            "DYLD_FRAMEWORK_PATH": app_support_path + "/Toontown Rewritten/Frameworks",        },    )def test_start_engine_xorg():    with unittest.mock.patch("subprocess.Popen") as popen_mock:        with unittest.mock.patch("os.environ", {"XAUTHORITY": "/home/me/.Xauthority"}):            with unittest.mock.patch("sys.platform", "linux"):                with unittest.mock.patch(  # python3.5                    "pathlib.Path.resolve",                    new=lambda p: p.with_suffix(".resolved"),                ):                    tooncher.start_engine(                        engine_path=pathlib.PosixPath(                            "/opt/toontown-rewritter/TTREngine"                        ),                        gameserver="gameserver.tld",                        playcookie="cookie123",                        check=False,                    )    popen_mock.assert_called_once_with(        args=["/opt/toontown-rewritter/TTREngine.resolved"],        check=False,        cwd="/opt/toontown-rewritter",        env={            "TTR_GAMESERVER": "gameserver.tld",            "TTR_PLAYCOOKIE": "cookie123",            "XAUTHORITY": "/home/me/.Xauthority",        },    )
 |