def test_prompt_toolkit_version_checks( ptk_ver, ini_shell_type, exp_shell_type, warn_snip, using_vended_ptk, monkeypatch, xonsh_builtins, ): mocked_warn = "" def mock_warning(msg): nonlocal mocked_warn mocked_warn = msg return def mock_ptk_above_min_supported(): nonlocal ptk_ver return ptk_ver and (ptk_ver[:3] >= minimum_required_ptk_version) def mock_has_prompt_toolkit(): nonlocal ptk_ver return ptk_ver is not None monkeypatch.setattr( "xonsh.shell.warnings.warn", mock_warning ) # hardwon: patch the caller! monkeypatch.setattr( "xonsh.shell.ptk_above_min_supported", mock_ptk_above_min_supported ) # have to patch both callers monkeypatch.setattr( "xonsh.platform.ptk_above_min_supported", mock_ptk_above_min_supported ) monkeypatch.setattr("xonsh.platform.has_prompt_toolkit", mock_has_prompt_toolkit) old_syspath = sys.path.copy() act_shell_type = Shell.choose_shell_type(ini_shell_type, {}) if using_vended_ptk: # ensure PTK has been unloaded and the vended version added to sys.path assert len(old_syspath) < len(sys.path) else: assert len(old_syspath) == len(sys.path) sys.path = old_syspath assert act_shell_type == exp_shell_type if warn_snip: assert warn_snip in mocked_warn pass
def test_prompt_toolkit_version_checks(ptk_ver, ini_shell_type, exp_shell_type, warn_snip, monkeypatch, xonsh_builtins): mocked_warn = "" def mock_warning(msg): nonlocal mocked_warn mocked_warn = msg return def mock_ptk_above_min_supported(): nonlocal ptk_ver return ptk_ver and (ptk_ver[:2] >= minimum_required_ptk_version) def mock_has_prompt_toolkit(): nonlocal ptk_ver return ptk_ver is not None monkeypatch.setattr("xonsh.shell.warnings.warn", mock_warning) # hardwon: patch the caller! monkeypatch.setattr( "xonsh.shell.ptk_above_min_supported", mock_ptk_above_min_supported) # have to patch both callers monkeypatch.setattr("xonsh.platform.ptk_above_min_supported", mock_ptk_above_min_supported) monkeypatch.setattr("xonsh.shell.has_prompt_toolkit", mock_has_prompt_toolkit) monkeypatch.setattr("xonsh.platform.has_prompt_toolkit", mock_has_prompt_toolkit) act_shell_type = Shell.choose_shell_type(ini_shell_type, {}) assert act_shell_type == exp_shell_type if warn_snip: assert warn_snip in mocked_warn pass