]> www.average.org Git - loctrkd.git/commitdiff
test: more robust version check for tools (black)
authorEugene Crosser <crosser@average.org>
Mon, 11 Jul 2022 10:10:31 +0000 (12:10 +0200)
committerEugene Crosser <crosser@average.org>
Thu, 14 Jul 2022 20:39:57 +0000 (22:39 +0200)
test/__init__.py
test/test_black.py

index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b4ddd2ef7a79ad3ad2d8a11ddbc5f5e4285456a4 100644 (file)
@@ -0,0 +1,25 @@
+from typing import Callable, Tuple
+
+
+__all__ = ("no_less_than",)
+
+
+def no_less_than(base: str) -> Callable[[str], bool]:
+    def _no_less_than(base: str, what: str) -> bool:
+        bl, wl = (
+            tuple((int(el) for el in s.split("."))) for s in (base, what)
+        )
+
+        def __no_less_than(bl: Tuple[int, ...], wl: Tuple[int, ...]) -> bool:
+            if len(bl) == 0 and len(wl) == 0:
+                return True
+            if (len(bl) == 0) != (len(wl) == 0):
+                return len(bl) < len(wl)
+            # At this point both lists are non-empty
+            if bl[0] == wl[0]:
+                return __no_less_than(bl[1:], wl[1:])
+            return bl[0] < wl[0]
+
+        return __no_less_than(bl, wl)
+
+    return lambda arg: _no_less_than(base, arg)
index 49227493b21877d57881a963dcc8ec2c8b67ef8b..76275af47918482a706ffdebd64edf9dc8a1c0ff 100644 (file)
@@ -5,17 +5,24 @@ from subprocess import run
 from shutil import which
 from unittest import main, TestCase, skipUnless
 
-black_version = 0.0
+from . import no_less_than
+
+is_acceptable_verison = no_less_than("21.1")
+
+black_version = "0.0"
 try:
     vermatch = match("[\.\d]*", get_distribution("black").version)
     if vermatch is not None:
-        black_version = float(vermatch.group())
+        black_version = vermatch.group()
 except DistributionNotFound:
     pass
 
 
 class BlackFormatter(TestCase):
-    @skipUnless(black_version >= 21.1, "Do not trust earlier black versions")
+    @skipUnless(
+        is_acceptable_verison(black_version),
+        "Do not trust earlier black versions",
+    )
     def test_black(self) -> None:
         if not which("black"):
             self.fail(f"black not installed.")