blob: 75ac8fd80168cd69abaee5fc1b328c7ab0b747e0 [file] [log] [blame]
# Copyright 2006-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import sys
from portage.tests import TestCase
from portage.dep import Atom, match_from_list, _repo_separator
from portage.versions import catpkgsplit, _pkg_str
if sys.hexversion >= 0x3000000:
# pylint: disable=W0622
basestring = str
class Package(object):
"""
Provides a minimal subset of attributes of _emerge.Package.Package
"""
def __init__(self, atom):
atom = Atom(atom, allow_repo=True)
self.cp = atom.cp
slot = atom.slot
if atom.sub_slot:
slot = "%s/%s" % (slot, atom.sub_slot)
if not slot:
slot = '0'
self.cpv = _pkg_str(atom.cpv, slot=slot, repo=atom.repo)
self.cpv_split = catpkgsplit(self.cpv)
self.slot = self.cpv.slot
self.sub_slot = self.cpv.sub_slot
self.repo = atom.repo
if atom.use:
self.use = self._use_class(atom.use.enabled)
self.iuse = self._iuse_class(atom.use.required)
else:
self.use = self._use_class([])
self.iuse = self._iuse_class([])
class _use_class(object):
def __init__(self, use):
self.enabled = frozenset(use)
class _iuse_class(object):
def __init__(self, iuse):
self.all = frozenset(iuse)
def is_valid_flag(self, flags):
if isinstance(flags, basestring):
flags = [flags]
for flag in flags:
if not flag in self.all:
return False
return True
class Test_match_from_list(TestCase):
def testMatch_from_list(self):
tests = (
("=sys-apps/portage-45*", [], []),
("=sys-apps/portage-45*", ["sys-apps/portage-045"], ["sys-apps/portage-045"]),
("!=sys-apps/portage-45*", ["sys-apps/portage-045"], ["sys-apps/portage-045"]),
("!!=sys-apps/portage-45*", ["sys-apps/portage-045"], ["sys-apps/portage-045"]),
("=sys-apps/portage-045", ["sys-apps/portage-045"], ["sys-apps/portage-045"]),
("=sys-apps/portage-045", ["sys-apps/portage-046"], []),
("~sys-apps/portage-045", ["sys-apps/portage-045-r1"], ["sys-apps/portage-045-r1"]),
("~sys-apps/portage-045", ["sys-apps/portage-046-r1"], []),
("<=sys-apps/portage-045", ["sys-apps/portage-045"], ["sys-apps/portage-045"]),
("<=sys-apps/portage-045", ["sys-apps/portage-046"], []),
("<sys-apps/portage-046", ["sys-apps/portage-045"], ["sys-apps/portage-045"]),
("<sys-apps/portage-046", ["sys-apps/portage-046"], []),
(">=sys-apps/portage-045", ["sys-apps/portage-045"], ["sys-apps/portage-045"]),
(">=sys-apps/portage-047", ["sys-apps/portage-046-r1"], []),
(">sys-apps/portage-044", ["sys-apps/portage-045"], ["sys-apps/portage-045"]),
(">sys-apps/portage-047", ["sys-apps/portage-046-r1"], []),
("sys-apps/portage:0", [Package("=sys-apps/portage-045:0")], ["sys-apps/portage-045"]),
("sys-apps/portage:0", [Package("=sys-apps/portage-045:1")], []),
("=cat/pkg-1-r1*", ["cat/pkg-1_alpha1"], []),
("=cat/pkg-1-r1*", ["cat/pkg-1-r11"], ["cat/pkg-1-r11"]),
("=cat/pkg-1-r1*", ["cat/pkg-01-r11"], ["cat/pkg-01-r11"]),
("=cat/pkg-01-r1*", ["cat/pkg-1-r11"], ["cat/pkg-1-r11"]),
("=cat/pkg-01-r1*", ["cat/pkg-001-r11"], ["cat/pkg-001-r11"]),
("=sys-fs/udev-1*", ["sys-fs/udev-123"], ["sys-fs/udev-123"]),
("=sys-fs/udev-4*", ["sys-fs/udev-456"], ["sys-fs/udev-456"]),
("*/*", ["sys-fs/udev-456"], ["sys-fs/udev-456"]),
("*/*:0", ["sys-fs/udev-456:0"], ["sys-fs/udev-456:0"]),
("*/*:1", ["sys-fs/udev-456:0"], []),
("sys-fs/*", ["sys-fs/udev-456"], ["sys-fs/udev-456"]),
("*/udev", ["sys-fs/udev-456"], ["sys-fs/udev-456"]),
("=sys-apps/portage-2*", ["sys-apps/portage-2.1"], ["sys-apps/portage-2.1"]),
("=sys-apps/portage-2.1*", ["sys-apps/portage-2.1.2"], ["sys-apps/portage-2.1.2"]),
("dev-libs/*", ["sys-apps/portage-2.1.2"], []),
("*/tar", ["sys-apps/portage-2.1.2"], []),
("*/*", ["dev-libs/A-1", "dev-libs/B-1"], ["dev-libs/A-1", "dev-libs/B-1"]),
("dev-libs/*", ["dev-libs/A-1", "sci-libs/B-1"], ["dev-libs/A-1"]),
("dev-libs/A[foo]", [Package("=dev-libs/A-1[foo]"), Package("=dev-libs/A-2[-foo]")], ["dev-libs/A-1"]),
("dev-libs/A[-foo]", [Package("=dev-libs/A-1[foo]"), Package("=dev-libs/A-2[-foo]")], ["dev-libs/A-2"]),
("dev-libs/A[-foo]", [Package("=dev-libs/A-1[foo]"), Package("=dev-libs/A-2")], []),
("dev-libs/A[foo,bar]", [Package("=dev-libs/A-1[foo]"), Package("=dev-libs/A-2[-foo]")], []),
("dev-libs/A[foo,bar]", [Package("=dev-libs/A-1[foo]"), Package("=dev-libs/A-2[-foo,bar]")], []),
("dev-libs/A[foo,bar]", [Package("=dev-libs/A-1[foo]"), Package("=dev-libs/A-2[foo,bar]")], ["dev-libs/A-2"]),
("dev-libs/A[foo,bar(+)]", [Package("=dev-libs/A-1[-foo]"), Package("=dev-libs/A-2[foo]")], ["dev-libs/A-2"]),
("dev-libs/A[foo,bar(-)]", [Package("=dev-libs/A-1[-foo]"), Package("=dev-libs/A-2[foo]")], []),
("dev-libs/A[foo,-bar(-)]", [Package("=dev-libs/A-1[-foo,bar]"), Package("=dev-libs/A-2[foo]")], ["dev-libs/A-2"]),
("dev-libs/A::repo1", [Package("=dev-libs/A-1::repo1"), Package("=dev-libs/A-1::repo2")], ["dev-libs/A-1::repo1"]),
("dev-libs/A::repo2", [Package("=dev-libs/A-1::repo1"), Package("=dev-libs/A-1::repo2")], ["dev-libs/A-1::repo2"]),
("dev-libs/A::repo2[foo]", [Package("=dev-libs/A-1::repo1[foo]"), Package("=dev-libs/A-1::repo2[-foo]")], []),
("dev-libs/A::repo2[foo]", [Package("=dev-libs/A-1::repo1[-foo]"), Package("=dev-libs/A-1::repo2[foo]")], ["dev-libs/A-1::repo2"]),
("dev-libs/A:1::repo2[foo]", [Package("=dev-libs/A-1:1::repo1"), Package("=dev-libs/A-1:2::repo2")], []),
("dev-libs/A:1::repo2[foo]", [Package("=dev-libs/A-1:2::repo1"), Package("=dev-libs/A-1:1::repo2[foo]")], ["dev-libs/A-1::repo2"]),
("virtual/ffmpeg:0/53", [Package("=virtual/ffmpeg-0.10.3:0/53")], ["virtual/ffmpeg-0.10.3"]),
("virtual/ffmpeg:0/53=", [Package("=virtual/ffmpeg-0.10.3:0/53")], ["virtual/ffmpeg-0.10.3"]),
("virtual/ffmpeg:0/52", [Package("=virtual/ffmpeg-0.10.3:0/53")], []),
("virtual/ffmpeg:=", [Package("=virtual/ffmpeg-0.10.3:0/53")], ["virtual/ffmpeg-0.10.3"]),
("virtual/ffmpeg:0=", [Package("=virtual/ffmpeg-0.10.3:0/53")], ["virtual/ffmpeg-0.10.3"]),
("virtual/ffmpeg:*", [Package("=virtual/ffmpeg-0.10.3:0/53")], ["virtual/ffmpeg-0.10.3"]),
("virtual/ffmpeg:0", [Package("=virtual/ffmpeg-0.10.3:0/53")], ["virtual/ffmpeg-0.10.3"]),
("sys-libs/db:4.8/4.8", [Package("=sys-libs/db-4.8.30:4.8")], ["sys-libs/db-4.8.30"]),
("sys-libs/db:4.8/4.8=", [Package("=sys-libs/db-4.8.30:4.8")], ["sys-libs/db-4.8.30"]),
("sys-libs/db:4.8=", [Package("=sys-libs/db-4.8.30:4.8")], ["sys-libs/db-4.8.30"]),
("sys-libs/db:*", [Package("=sys-libs/db-4.8.30:4.8")], ["sys-libs/db-4.8.30"]),
("sys-libs/db:4.8/0", [Package("=sys-libs/db-4.8.30:4.8")], []),
("sys-libs/db:4.8/0=", [Package("=sys-libs/db-4.8.30:4.8")], []),
)
for atom, cpv_list, expected_result in tests:
result = []
for pkg in match_from_list(atom, cpv_list):
if isinstance(pkg, Package):
if pkg.repo:
result.append(pkg.cpv + _repo_separator + pkg.repo)
else:
result.append(pkg.cpv)
else:
result.append(pkg)
self.assertEqual(result, expected_result)