File switch-to-pytest.patch of Package python-preggy

From 740cd9f947b2785367d517a0f97dec4240e32b63 Mon Sep 17 00:00:00 2001
From: Steve Kowalik <steven@wedontsleep.org>
Date: Fri, 22 Aug 2025 13:51:20 +1000
Subject: [PATCH] Switch from nose to pytest

nose has been unmaintained for quite some time, and pytest no longer
supports yield tests, which are a nose feature. Switch tox to calling
pytest, and convert all yield tests to using pytest's paramertize
functionality.
---
 .gitignore                   |   1 -
 Makefile                     |  10 ---
 requirements.txt             |   4 +-
 setup.py                     |   2 +-
 tests/test_comparison.py     |  86 ++++++++++-------------
 tests/test_emptiness.py      |  14 ++--
 tests/test_equality.py       |  10 +--
 tests/test_inclusion.py      |  14 ++--
 tests/test_length.py         |  14 ++--
 tests/test_like.py           | 131 ++++++++++++-----------------------
 tests/types/test_boolean.py  |  26 +++----
 tests/types/test_classes.py  |  14 ++--
 tests/types/test_file.py     |  14 ++--
 tests/types/test_function.py |   8 ++-
 tests/types/test_numeric.py  |   8 ++-
 tox.ini                      |   9 ++-
 16 files changed, 160 insertions(+), 205 deletions(-)


diff --git a/setup.py b/setup.py
index d36add0..7ff02f7 100755
--- a/setup.py
+++ b/setup.py
@@ -17,7 +17,7 @@
 REQUIREMENTS = {
     'install': ['six', 'unidecode'],
     'extras': {
-        'tests':['nose', 'yanc', 'coverage', 'tox',]
+        'tests':['pytest', 'pytest-cov', 'tox',]
     }
 }
 
diff --git a/tests/test_comparison.py b/tests/test_comparison.py
index ec81f9d..5797790 100644
--- a/tests/test_comparison.py
+++ b/tests/test_comparison.py
@@ -9,6 +9,8 @@
 
 from preggy import expect
 
+import pytest
+
 #-----------------------------------------------------------------------------
 
 TEST_DATA = (
@@ -152,65 +154,53 @@ def is_not_lesser_or_equal_to(topic):
 #-----------------------------------------------------------------------------
 
 
-def test_greater_than():
-    for index, item in enumerate(TEST_DATA):
-        expected = GREATER_THAN_DATA[index]
-        yield is_greater_than, (item, expected)
-
-
-def test_not_greater_than():
-    for index, item in enumerate(TEST_DATA):
-        expected = GREATER_THAN_DATA[index]
-        yield is_not_greater_than, (expected, item)
-
-
-def test_lesser_than():
-    for index, item in enumerate(TEST_DATA):
-        expected = LESSER_THAN_DATA[index]
-        yield is_lesser_than, (item, expected)
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_greater_than(index, item):
+    is_greater_than((item, GREATER_THAN_DATA[index]))
 
 
-def test_not_lesser_than():
-    for index, item in enumerate(TEST_DATA):
-        expected = LESSER_THAN_DATA[index]
-        yield is_not_lesser_than, (expected, item)
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_not_greater_than(index, item):
+    is_not_greater_than((GREATER_THAN_DATA[index], item))
 
 
-def test_greater_or_equal_to():
-    for index, item in enumerate(TEST_DATA):
-        expected = GREATER_OR_EQUAL_TO_DATA[index]
-        yield is_greater_or_equal_to, (item, expected)
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_lesser_than(index, item):
+    is_lesser_than((item, LESSER_THAN_DATA[index]))
 
-    for index, item in enumerate(TEST_DATA):
-        expected = GREATER_OR_EQUAL_TO_DATA_2[index]
-        yield is_greater_or_equal_to, (item, expected)
 
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_not_lesser_than(index, item):
+    is_not_lesser_than((LESSER_THAN_DATA[index], item))
 
-def test_not_greater_or_equal_to():
-    for index, item in enumerate(TEST_DATA):
-        expected = NOT_GREATER_OR_EQUAL_TO_DATA[index]
-        yield is_not_greater_or_equal_to, (expected, item)
 
-    for index, item in enumerate(TEST_DATA):
-        expected = GREATER_OR_EQUAL_TO_DATA_2[index]
-        yield is_not_greater_or_equal_to, (expected, item)
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_greater_or_equal_to(index, item):
+    expected = GREATER_OR_EQUAL_TO_DATA[index]
+    is_greater_or_equal_to((item, expected))
+    expected = GREATER_OR_EQUAL_TO_DATA_2[index]
+    is_greater_or_equal_to((item, expected))
 
 
-def test_lesser_or_equal_to():
-    for index, item in enumerate(TEST_DATA):
-        expected = LESSER_OR_EQUAL_TO_DATA[index]
-        yield is_lesser_or_equal_to, (item, expected)
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_not_greater_or_equal_to(index, item):
+    expected = NOT_GREATER_OR_EQUAL_TO_DATA[index]
+    is_not_greater_or_equal_to((expected, item))
+    expected = GREATER_OR_EQUAL_TO_DATA_2[index]
+    is_not_greater_or_equal_to((expected, item))
 
-    for index, item in enumerate(TEST_DATA):
-        expected = LESSER_OR_EQUAL_TO_DATA_2[index]
-        yield is_lesser_or_equal_to, (item, expected)
 
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_lesser_or_equal_to(index, item):
+    expected = LESSER_OR_EQUAL_TO_DATA[index]
+    is_lesser_or_equal_to((item, expected))
+    expected = LESSER_OR_EQUAL_TO_DATA_2[index]
+    is_lesser_or_equal_to((item, expected))
 
-def test_not_lesser_or_equal_to():
-    for index, item in enumerate(TEST_DATA):
-        expected = NOT_LESSER_OR_EQUAL_TO_DATA[index]
-        yield is_not_lesser_or_equal_to, (expected, item)
 
-    for index, item in enumerate(TEST_DATA):
-        expected = LESSER_OR_EQUAL_TO_DATA_2[index]
-        yield is_not_lesser_or_equal_to, (expected, item)
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_not_lesser_or_equal_to(index, item):
+    expected = NOT_LESSER_OR_EQUAL_TO_DATA[index]
+    is_not_lesser_or_equal_to((expected, item))
+    expected = LESSER_OR_EQUAL_TO_DATA_2[index]
+    is_not_lesser_or_equal_to((expected, item))
diff --git a/tests/test_emptiness.py b/tests/test_emptiness.py
index 1098eb4..b843cb8 100644
--- a/tests/test_emptiness.py
+++ b/tests/test_emptiness.py
@@ -9,6 +9,8 @@
 
 from preggy import expect
 
+import pytest
+
 #-----------------------------------------------------------------------------
 
 EMPTY_DATA = (
@@ -37,11 +39,11 @@ def is_not_empty(item):
 
 #-----------------------------------------------------------------------------
 
-def test_emptiness_assertion_works():
-    for empty_item in EMPTY_DATA:
-        yield is_empty, empty_item
+@pytest.mark.parametrize("item", EMPTY_DATA)
+def test_emptiness_assertion_works(item):
+    is_empty(item)
 
 
-def test_not_emptiness_assertion_works():
-    for not_empty_item in NOT_EMPTY_DATA:
-        yield is_not_empty, not_empty_item
+@pytest.mark.parametrize("item", NOT_EMPTY_DATA)
+def test_not_emptiness_assertion_works(item):
+    is_not_empty(item)
diff --git a/tests/test_equality.py b/tests/test_equality.py
index a0a92cc..62ea033 100644
--- a/tests/test_equality.py
+++ b/tests/test_equality.py
@@ -9,6 +9,8 @@
 
 from preggy import expect
 
+import pytest
+
 from tests import Comparable, AnotherComparable
 
 #-----------------------------------------------------------------------------
@@ -58,12 +60,12 @@ def test_unicode_equal():
     is_equal((UNICODE_TEST_DATA[0], UNICODE_TEST_DATA[1]))
 
 
-def test_equal():
-    for item in TEST_DATA:
-        yield is_equal, (item, item)
+@pytest.mark.parametrize("item", TEST_DATA)
+def test_equal(item):
+    is_equal((item, item))
 
 
 def test_not_equal():
     for item in TEST_DATA:
         for unequal in UNEQUAL_DATA:
-            yield is_not_equal, (item, unequal)
+            is_not_equal((item, unequal))
diff --git a/tests/test_inclusion.py b/tests/test_inclusion.py
index bf2d001..e5b6a3c 100644
--- a/tests/test_inclusion.py
+++ b/tests/test_inclusion.py
@@ -9,6 +9,8 @@
 
 from preggy import expect
 
+import pytest
+
 from tests import Comparable
 
 #-----------------------------------------------------------------------------
@@ -57,11 +59,11 @@ def is_not_included(item, expected):
 #-----------------------------------------------------------------------------
 
 
-def test_includes():
-    for index, item in enumerate(TEST_DATA):
-        yield is_included, item, INCLUDED_DATA[index]
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_includes(index, item):
+    is_included(item, INCLUDED_DATA[index])
 
 
-def test_not_includes():
-    for index, item in enumerate(TEST_DATA):
-        yield is_not_included, item, NOT_INCLUDED_DATA[index]
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_not_includes(index, item):
+    is_not_included(item, NOT_INCLUDED_DATA[index])
diff --git a/tests/test_length.py b/tests/test_length.py
index f523a99..19f9601 100644
--- a/tests/test_length.py
+++ b/tests/test_length.py
@@ -13,6 +13,8 @@
 except ImportError:
     from queue import LifoQueue
 
+import pytest
+
 from preggy import expect
 
 #-----------------------------------------------------------------------------
@@ -69,14 +71,14 @@ def is_not_expected(item, expected):
 
 #-----------------------------------------------------------------------------
 
-def test_length():
-    for index, item in enumerate(TEST_DATA):
-        yield is_expected, item, EXPECTED_DATA[index]
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_length(index, item):
+    is_expected(item, EXPECTED_DATA[index])
 
 
-def test_not_includes():
-    for index, item in enumerate(TEST_DATA):
-        yield is_not_expected, item, NOT_EXPECTED_DATA[index]
+@pytest.mark.parametrize("index,item", enumerate(TEST_DATA))
+def test_not_includes(index, item):
+    is_not_expected(item, NOT_EXPECTED_DATA[index])
 
 
 def test_unable_to_identify_length():
diff --git a/tests/test_like.py b/tests/test_like.py
index 9faecdf..cb6a8ab 100644
--- a/tests/test_like.py
+++ b/tests/test_like.py
@@ -11,6 +11,8 @@
 from datetime import datetime
 from uuid import uuid4
 
+import pytest
+
 from preggy import expect
 
 from tests import Comparable, AnotherComparable
@@ -173,106 +175,63 @@ def is_not_expected(item, expected):
 #-----------------------------------------------------------------------------
 
 
-def test_likeness():
-    yield is_expected, None, None
-
-    for expected_item in EXPECTED_STRING_TEST_DATA:
-        yield is_expected, STRING_TEST_DATA, expected_item
-
-    for expected_item in EXPECTED_LIST_TEST_DATA:
-        yield is_expected, LIST_TEST_DATA, expected_item
-
-    for expected_item in EXPECTED_CMP_LIST_TEST_DATA:
-        yield is_expected, CMP_LIST_TEST_DATA, expected_item
-
-    for expected_item in EXPECTED_TUPLE_TEST_DATA:
-        yield is_expected, TUPLE_TEST_DATA, expected_item
-
-    for expected_item in EXPECTED_SET_TEST_DATA:
-        yield is_expected, SET_TEST_DATA, expected_item
+def pytest_generate_tests(metafunc):
+    if 'expected' in metafunc.fixturenames:
+        if 'item' in metafunc.fixturenames:
+            parameter = "item, expected"
+            data_list = (
+                (STRING_TEST_DATA, EXPECTED_STRING_TEST_DATA),
+                (LIST_TEST_DATA, EXPECTED_LIST_TEST_DATA),
+                (CMP_LIST_TEST_DATA, EXPECTED_CMP_LIST_TEST_DATA),
+                (TUPLE_TEST_DATA, EXPECTED_TUPLE_TEST_DATA),
+                (SET_TEST_DATA, EXPECTED_SET_TEST_DATA),
+                (DICT_TEST_DATA, EXPECTED_DICT_TEST_DATA),
+                (CMP_DICT_TEST_DATA, EXPECTED_CMP_DICT_TEST_DATA),
+                (DATETIME_TEST_DATA, EXPECTED_DATETIME_TEST_DATA),
+                (UUID_TEST_DATA, EXPECTED_UUID_TEST_DATA),
+                (CMPCLASS_TEST_DATA, EXPECTED_CMPCLASS_TEST_DATA))
+        elif 'not_item' in metafunc.fixturenames:
+            parameter = "not_item, expected"
+            data_list = (
+                (STRING_TEST_DATA, NOT_EXPECTED_STRING_TEST_DATA),
+                (LIST_TEST_DATA, NOT_EXPECTED_LIST_TEST_DATA),
+                (CMP_LIST_TEST_DATA, NOT_EXPECTED_CMP_LIST_TEST_DATA),
+                (TUPLE_TEST_DATA, NOT_EXPECTED_TUPLE_TEST_DATA),
+                (SET_TEST_DATA, NOT_EXPECTED_SET_TEST_DATA),
+                (DICT_TEST_DATA, NOT_EXPECTED_DICT_TEST_DATA),
+                (CMP_DICT_TEST_DATA, NOT_EXPECTED_CMP_DICT_TEST_DATA),
+                (DATETIME_TEST_DATA, NOT_EXPECTED_DATETIME_TEST_DATA),
+                (UUID_TEST_DATA, NOT_EXPECTED_UUID_TEST_DATA),
+                (CMPCLASS_TEST_DATA, NOT_EXPECTED_CMPCLASS_TEST_DATA))
+        data = []
+        for expected, items in data_list:
+            for item in items:
+                data.append((item, expected))
+        metafunc.parametrize(parameter, data)
 
-    for expected_item in EXPECTED_DICT_TEST_DATA:
-        yield is_expected, DICT_TEST_DATA, expected_item
 
-    for expected_item in EXPECTED_CMP_DICT_TEST_DATA:
-        yield is_expected, CMP_DICT_TEST_DATA, expected_item
-
-    for expected_item in EXPECTED_DATETIME_TEST_DATA:
-        yield is_expected, DATETIME_TEST_DATA, expected_item
+def test_likeness():
+    is_expected(None, None)
 
-    for expected_item in EXPECTED_UUID_TEST_DATA:
-        yield is_expected, UUID_TEST_DATA, expected_item
 
-    for expected_item in EXPECTED_CMPCLASS_TEST_DATA:
-        yield is_expected, CMPCLASS_TEST_DATA, expected_item
+def test_likeness_data(item, expected):
+    is_expected(item, expected)
 
 
 def test_likeness_fails():
-    yield is_expected, None, None
-
-    for expected_item in NOT_EXPECTED_STRING_TEST_DATA:
-        yield is_expected_to_fail, STRING_TEST_DATA, expected_item
-
-    for expected_item in NOT_EXPECTED_LIST_TEST_DATA:
-        yield is_expected_to_fail, LIST_TEST_DATA, expected_item
-
-    for expected_item in NOT_EXPECTED_CMP_LIST_TEST_DATA:
-        yield is_expected_to_fail, CMP_LIST_TEST_DATA, expected_item
-
-    for expected_item in NOT_EXPECTED_TUPLE_TEST_DATA:
-        yield is_expected_to_fail, TUPLE_TEST_DATA, expected_item
+    is_expected_to_fail(None, 1)
 
-    for expected_item in NOT_EXPECTED_SET_TEST_DATA:
-        yield is_expected_to_fail, SET_TEST_DATA, expected_item
 
-    for expected_item in NOT_EXPECTED_DICT_TEST_DATA:
-        yield is_expected_to_fail, DICT_TEST_DATA, expected_item
-
-    for expected_item in NOT_EXPECTED_CMP_DICT_TEST_DATA:
-        yield is_expected_to_fail, CMP_DICT_TEST_DATA, expected_item
-
-    for expected_item in NOT_EXPECTED_DATETIME_TEST_DATA:
-        yield is_expected_to_fail, DATETIME_TEST_DATA, expected_item
-
-    for expected_item in NOT_EXPECTED_UUID_TEST_DATA:
-        yield is_expected_to_fail, UUID_TEST_DATA, expected_item
-
-    for expected_item in NOT_EXPECTED_CMPCLASS_TEST_DATA:
-        yield is_expected_to_fail, CMPCLASS_TEST_DATA, expected_item
+def test_likeness_fails_data(not_item, expected):
+    is_expected_to_fail(not_item, expected)
 
 
 def test_not_likeness():
-    yield is_not_expected, None, 1
-
-    for not_expected_item in NOT_EXPECTED_STRING_TEST_DATA:
-        yield is_not_expected, STRING_TEST_DATA, not_expected_item
-
-    for not_expected_item in NOT_EXPECTED_LIST_TEST_DATA:
-        yield is_not_expected, LIST_TEST_DATA, not_expected_item
-
-    for not_expected_item in NOT_EXPECTED_CMP_LIST_TEST_DATA:
-        yield is_not_expected, CMP_LIST_TEST_DATA, not_expected_item
-
-    for not_expected_item in NOT_EXPECTED_TUPLE_TEST_DATA:
-        yield is_not_expected, TUPLE_TEST_DATA, not_expected_item
-
-    for not_expected_item in NOT_EXPECTED_SET_TEST_DATA:
-        yield is_not_expected, SET_TEST_DATA, not_expected_item
-
-    for not_expected_item in NOT_EXPECTED_DICT_TEST_DATA:
-        yield is_not_expected, DICT_TEST_DATA, not_expected_item
-
-    for not_expected_item in NOT_EXPECTED_CMP_DICT_TEST_DATA:
-        yield is_not_expected, CMP_DICT_TEST_DATA, not_expected_item
-
-    for expected_item in NOT_EXPECTED_DATETIME_TEST_DATA:
-        yield is_not_expected, DATETIME_TEST_DATA, expected_item
+    is_not_expected(None, 1)
 
-    for expected_item in NOT_EXPECTED_UUID_TEST_DATA:
-        yield is_not_expected, UUID_TEST_DATA, expected_item
 
-    for expected_item in NOT_EXPECTED_CMPCLASS_TEST_DATA:
-        yield is_not_expected, CMPCLASS_TEST_DATA, expected_item
+def test_not_likeness_test_data(not_item, expected):
+    is_not_expected(not_item, expected)
 
 
 def test_likeness_of_objects():
diff --git a/tests/types/test_boolean.py b/tests/types/test_boolean.py
index 63337e6..c0d6911 100644
--- a/tests/types/test_boolean.py
+++ b/tests/types/test_boolean.py
@@ -7,6 +7,8 @@
 # http://www.opensource.org/licenses/mit-license
 # Copyright (c) 2013 Bernardo Heynemann heynemann@gmail.com
 
+import pytest
+
 from preggy import expect
 
 #-----------------------------------------------------------------------------
@@ -72,21 +74,21 @@ def is_not_false(item):
 
 #-----------------------------------------------------------------------------
 
-def test_to_be_true():
-    for item in EXPECTED_TEST_DATA:
-        yield is_true, item
+@pytest.mark.parametrize("item", EXPECTED_TEST_DATA)
+def test_to_be_true(item):
+    is_true(item)
 
 
-def test_not_to_be_true():
-    for item in NOT_EXPECTED_TEST_DATA:
-        yield is_not_true, item
+@pytest.mark.parametrize("item", NOT_EXPECTED_TEST_DATA)
+def test_not_to_be_true(item):
+    is_not_true(item)
 
 
-def test_to_be_false():
-    for item in NOT_EXPECTED_TEST_DATA:
-        yield is_false, item
+@pytest.mark.parametrize("item", NOT_EXPECTED_TEST_DATA)
+def test_to_be_false(item):
+    is_false(item)
 
 
-def test_not_to_be_false():
-    for item in EXPECTED_TEST_DATA:
-        yield is_not_false, item
+@pytest.mark.parametrize("item", EXPECTED_TEST_DATA)
+def test_not_to_be_false(item):
+    is_not_false(item)
diff --git a/tests/types/test_classes.py b/tests/types/test_classes.py
index 3e8fe9f..bed65ae 100644
--- a/tests/types/test_classes.py
+++ b/tests/types/test_classes.py
@@ -7,6 +7,8 @@
 # http://www.opensource.org/licenses/mit-license
 # Copyright (c) 2013 Bernardo Heynemann heynemann@gmail.com
 
+import pytest
+
 from preggy import expect
 
 from tests import Comparable
@@ -49,11 +51,11 @@ def is_not_expected(item):
 
 #-----------------------------------------------------------------------------
 
-def test_to_be_instance_of():
-    for item in TEST_DATA:
-        yield is_expected, item
+@pytest.mark.parametrize("item", TEST_DATA)
+def test_to_be_instance_of(item):
+    is_expected(item)
 
 
-def test_not_to_be_instance_of():
-    for item in TEST_DATA:
-        yield is_not_expected, item
+@pytest.mark.parametrize("item", TEST_DATA)
+def test_not_to_be_instance_of(item):
+    is_not_expected(item)
diff --git a/tests/types/test_file.py b/tests/types/test_file.py
index 257cf88..48a8bb7 100644
--- a/tests/types/test_file.py
+++ b/tests/types/test_file.py
@@ -7,6 +7,8 @@
 # http://www.opensource.org/licenses/mit-license
 # Copyright (c) 2013 Bernardo Heynemann heynemann@gmail.com
 
+import pytest
+
 from preggy import expect
 
 #-----------------------------------------------------------------------------
@@ -47,14 +49,14 @@ def is_not_expected(item):
 
 #-----------------------------------------------------------------------------
 
-def test_to_be_a_file():
-    for item in TEST_DATA:
-        yield is_expected, item
+@pytest.mark.parametrize("item", TEST_DATA)
+def test_to_be_a_file(item):
+    is_expected(item)
 
 
-def test_not_to_be_a_file():
-    for item in FAIL_DATA:
-        yield is_not_expected, item
+@pytest.mark.parametrize("item", FAIL_DATA)
+def test_not_to_be_a_file(item):
+    is_not_expected(item)
 
 
 def test_is_not_file_obj():
diff --git a/tests/types/test_function.py b/tests/types/test_function.py
index bf2d39c..c0145bd 100644
--- a/tests/types/test_function.py
+++ b/tests/types/test_function.py
@@ -7,6 +7,8 @@
 # http://www.opensource.org/licenses/mit-license
 # Copyright (c) 2013 Bernardo Heynemann heynemann@gmail.com
 
+import pytest
+
 from preggy import expect
 
 #-----------------------------------------------------------------------------
@@ -46,9 +48,9 @@ def is_not_expected(item):
 
 #-----------------------------------------------------------------------------
 
-def test_to_be_a_function():
-    for item in TEST_DATA:
-        yield is_expected, item
+@pytest.mark.parametrize("item", TEST_DATA)
+def test_to_be_a_function(item):
+    is_expected(item)
 
 
 def test_not_to_be_a_function():
diff --git a/tests/types/test_numeric.py b/tests/types/test_numeric.py
index 02e77e2..f9c92f2 100644
--- a/tests/types/test_numeric.py
+++ b/tests/types/test_numeric.py
@@ -7,6 +7,8 @@
 # http://www.opensource.org/licenses/mit-license
 # Copyright (c) 2013 Bernardo Heynemann heynemann@gmail.com
 
+import pytest
+
 from preggy import expect
 
 #-----------------------------------------------------------------------------
@@ -25,6 +27,6 @@ def is_expected(item):
 
 #-----------------------------------------------------------------------------
 
-def test_to_be_numeric():
-    for item in TEST_DATA:
-        yield is_expected, item
+@pytest.mark.parametrize("item", TEST_DATA)
+def test_to_be_numeric(item):
+    is_expected(item)
openSUSE Build Service is sponsored by