Skip to content

Commit

Permalink
Remove test dependency on sumtypes library
Browse files Browse the repository at this point in the history
  • Loading branch information
EliahKagan committed Jan 11, 2024
1 parent fd29dfd commit a5414bf
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 20 deletions.
1 change: 0 additions & 1 deletion test-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,3 @@ pytest-cov
pytest-instafail
pytest-mock
pytest-sugar
sumtypes
52 changes: 33 additions & 19 deletions test/test_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# 3-Clause BSD License: https://opensource.org/license/bsd-3-clause/

import contextlib
from dataclasses import dataclass
from io import BytesIO
import logging
import os
Expand All @@ -12,12 +13,11 @@
import re
import shutil
from stat import S_ISLNK, ST_MODE
import subprocess
from subprocess import CompletedProcess, run
import tempfile

import ddt
import pytest
from sumtypes import constructor, sumtype

from git import (
BlobFilter,
Expand Down Expand Up @@ -66,34 +66,48 @@ def _get_windows_ansi_encoding():
return f"cp{value}"


@sumtype
class WinBashStatus:
"""Status of bash.exe for native Windows. Affects which commit hook tests can pass.
"""Namespace of native-Windows bash.exe statuses. Affects what hook tests can pass.
Call check() to check the status. (CheckError and WinError should not typically be
used to trigger skip or xfail, because they represent unexpected situations.)
"""

Inapplicable = constructor()
"""This system is not native Windows: either not Windows at all, or Cygwin."""
@dataclass
class Inapplicable:
"""This system is not native Windows: either not Windows at all, or Cygwin."""

Absent = constructor()
"""No command for bash.exe is found on the system."""
@dataclass
class Absent:
"""No command for bash.exe is found on the system."""

Native = constructor()
"""Running bash.exe operates outside any WSL distribution (as with Git Bash)."""
@dataclass
class Native:
"""Running bash.exe operates outside any WSL distribution (as with Git Bash)."""

Wsl = constructor()
"""Running bash.exe calls bash in a WSL distribution."""
@dataclass
class Wsl:
"""Running bash.exe calls bash in a WSL distribution."""

WslNoDistro = constructor("process", "message")
"""Running bash.exe tries to run bash on a WSL distribution, but none exists."""
@dataclass
class WslNoDistro:
"""Running bash.exe tries to run bash on a WSL distribution, but none exists."""

CheckError = constructor("process", "message")
"""Running bash.exe fails in an unexpected error or gives unexpected output."""
process: CompletedProcess[bytes]
message: str

WinError = constructor("exception")
"""bash.exe may exist but can't run. CreateProcessW fails unexpectedly."""
@dataclass
class CheckError:
"""Running bash.exe fails in an unexpected error or gives unexpected output."""

process: CompletedProcess[bytes]
message: str

@dataclass
class WinError:
"""bash.exe may exist but can't run. CreateProcessW fails unexpectedly."""

exception: OSError

@classmethod
def check(cls):
Expand All @@ -119,7 +133,7 @@ def check(cls):
# information on ways to check for WSL, see https://superuser.com/a/1749811.
script = 'test -e /proc/sys/fs/binfmt_misc/WSLInterop; echo "$?"'
command = ["bash.exe", "-c", script]
process = subprocess.run(command, capture_output=True)
process = run(command, capture_output=True)
except FileNotFoundError:
return cls.Absent()
except OSError as error:
Expand Down

0 comments on commit a5414bf

Please sign in to comment.