commit:     7cc9af07e5fb84e9a12ac4090c6819512b77af21
Author:     Eli Schwartz <eschwartz <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 20 00:54:07 2025 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Jan  4 02:21:26 2026 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7cc9af07

add testcase for "usepkg satisfiable by slot downgrade of dep"

Bug: https://bugs.gentoo.org/964705
Signed-off-by: Eli Schwartz <eschwartz <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/tests/resolver/meson.build             |   1 +
 .../test_binpackage_downgrades_slot_dep.py         | 115 +++++++++++++++++++++
 2 files changed, 116 insertions(+)

diff --git a/lib/portage/tests/resolver/meson.build 
b/lib/portage/tests/resolver/meson.build
index df7944259b..bab474cf0d 100644
--- a/lib/portage/tests/resolver/meson.build
+++ b/lib/portage/tests/resolver/meson.build
@@ -14,6 +14,7 @@ py.install_sources(
         'test_backtracking.py',
         'test_bdeps.py',
         'test_binary_pkg_ebuild_visibility.py',
+        'test_binpackage_downgrades_slot_dep.py',
         'test_blocker.py',
         'test_broken_deps.py',
         'test_bootstrap_deps.py',

diff --git a/lib/portage/tests/resolver/test_binpackage_downgrades_slot_dep.py 
b/lib/portage/tests/resolver/test_binpackage_downgrades_slot_dep.py
new file mode 100644
index 0000000000..ef434168dd
--- /dev/null
+++ b/lib/portage/tests/resolver/test_binpackage_downgrades_slot_dep.py
@@ -0,0 +1,115 @@
+# Copyright 2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+import pytest
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (
+    ResolverPlayground,
+    ResolverPlaygroundTestCase,
+)
+
+
+class BinpackageDowngradesSlotDepTestCase(TestCase):
+    @pytest.mark.xfail()
+    def testBinpackageDowngradesSlotDep(self):
+        python_use = "python_targets_python3_12 +python_targets_python3_13"
+        python_usedep = 
"python_targets_python3_12(-)?,python_targets_python3_13(-)?"
+        common_metadata = {
+            "EAPI": "8",
+            "REQUIRED_USE": """
+                python? (
+                    || (
+                        python_targets_python3_12
+                        python_targets_python3_13
+                    )
+                )
+            """,
+        }
+
+        ebuilds = {
+            "dev-libs/libxml2-2.13.9": {
+                "IUSE": f"+python {python_use}",
+                "SLOT": "2",
+                **common_metadata,
+            },
+            "dev-libs/libxml2-2.14.6": {
+                "IUSE": f"+python {python_use}",
+                "SLOT": "2/16",
+                **common_metadata,
+            },
+            "dev-libs/libxslt-1.1.43-r1": {
+                "IUSE": f"python {python_use}",
+                "RDEPEND": f"""
+                    >=dev-libs/libxml2-2.13:2=
+                    python? (
+                        >=dev-libs/libxml2-2.13:2=[python,{python_usedep}]
+                    )
+                """,
+                **common_metadata,
+            },
+        }
+
+        binpkgs = {
+            "dev-libs/libxslt-1.1.43-r1": {
+                "IUSE": f"python {python_use}",
+                "RDEPEND": f"""
+                    >=dev-libs/libxml2-2.13:2/2=
+                    python? (
+                        >=dev-libs/libxml2-2.13:2/2=[python,{python_usedep}]
+                    )
+                """,
+                **common_metadata,
+            },
+        }
+
+        installed = {
+            "dev-libs/libxml2-2.14.6": {
+                "IUSE": f"+python {python_use}",
+                "USE": f"python python_targets_python3_13",
+                "SLOT": "2/16",
+                **common_metadata,
+            },
+            "dev-libs/libxslt-1.1.43-r1": {
+                "IUSE": f"python {python_use}",
+                "USE": "python_targets_python3_13",
+                "RDEPEND": f"""
+                    >=dev-libs/libxml2-2.13:2/16=
+                    python? (
+                        >=dev-libs/libxml2-2.13:2/16=[python,{python_usedep}]
+                    )
+                """,
+                **common_metadata,
+            },
+        }
+
+        world = []
+        user_config = {"package.use": ["*/* -python_targets_python3_13"]}
+
+        playground = ResolverPlayground(
+            ebuilds=ebuilds,
+            installed=installed,
+            binpkgs=binpkgs,
+            world=world,
+            user_config=user_config,
+            debug=True,
+        )
+
+        settings = playground.settings
+        profile_path = settings.profile_path
+
+        test_cases = (
+            ResolverPlaygroundTestCase(
+                ["dev-libs/libxslt"],
+                success=True,
+                options={"--usepkg": True},
+                mergelist=["dev-libs/libxslt-1.1.43-r1"],
+            ),
+        )
+
+        try:
+            for test_case in test_cases:
+                playground.run_TestCase(test_case)
+                self.assertEqual(test_case.test_success, True, 
test_case.fail_msg)
+        finally:
+            playground.cleanup()

Reply via email to