from git.cmd import Git


class _DummyProc:
    """Minimal stand-in for subprocess.Popen used to exercise AutoInterrupt.

    We deliberately raise AttributeError from terminate() to simulate interpreter
    shutdown on Windows where subprocess internals (e.g. subprocess._winapi) may
    already be torn down.
    """

    stdin = None
    stdout = None
    stderr = None

    def poll(self):
        return None

    def terminate(self):
        raise AttributeError("TerminateProcess")

    def wait(self):  # pragma: no cover - should not be reached in this test
        raise AssertionError("wait() should not be called if terminate() fails")


def test_autointerrupt_terminate_ignores_attributeerror():
    ai = Git.AutoInterrupt(_DummyProc(), args=["git", "rev-list"])

    # Should not raise, even if terminate() triggers AttributeError.
    ai._terminate()

    # Ensure the reference is cleared to avoid repeated attempts.
    assert ai.proc is None
