Skip to content

Commit 3f3e630

Browse files
committed
dep: support UseDep objects for dependency types __contains__()
1 parent c8be787 commit 3f3e630

3 files changed

Lines changed: 39 additions & 8 deletions

File tree

src/pkgcraft/C.pxd

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,12 @@ cdef extern from "pkgcraft.h":
821821
# The arguments must be valid pointers.
822822
bool pkgcraft_dependency_contains_str(Dependency *d, const char *s)
823823

824+
# Determine if a Dependency contains a given UseDep.
825+
#
826+
# # Safety
827+
# The arguments must be valid pointers.
828+
bool pkgcraft_dependency_contains_use_dep(Dependency *d, UseDep *u)
829+
824830
# Evaluate a Dependency.
825831
#
826832
# # Safety
@@ -920,6 +926,12 @@ cdef extern from "pkgcraft.h":
920926
# The arguments must be valid pointers.
921927
bool pkgcraft_dependency_set_contains_str(DependencySet *d, const char *s)
922928

929+
# Determine if a DependencySet contains a given UseDep.
930+
#
931+
# # Safety
932+
# The arguments must be valid pointers.
933+
bool pkgcraft_dependency_set_contains_use_dep(DependencySet *d, UseDep *u)
934+
923935
# Determine if two DependencySets are equal.
924936
#
925937
# # Safety

src/pkgcraft/dep/base.pyx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ cdef class Dependency:
147147
return C.pkgcraft_dependency_contains_dependency(self.ptr, (<Dependency>obj).ptr)
148148
elif isinstance(obj, str):
149149
return C.pkgcraft_dependency_contains_str(self.ptr, obj.encode())
150+
elif isinstance(obj, UseDep):
151+
return C.pkgcraft_dependency_contains_use_dep(self.ptr, (<UseDep>obj).ptr)
150152
return False
151153

152154
def __iter__(self):
@@ -401,6 +403,8 @@ cdef class DependencySet:
401403
return C.pkgcraft_dependency_set_contains_dependency(self.ptr, (<Dependency>obj).ptr)
402404
elif isinstance(obj, str):
403405
return C.pkgcraft_dependency_set_contains_str(self.ptr, obj.encode())
406+
elif isinstance(obj, UseDep):
407+
return C.pkgcraft_dependency_set_contains_use_dep(self.ptr, (<UseDep>obj).ptr)
404408
return False
405409

406410
def __iter__(self):

tests/dep/test_base.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,20 @@ def test_eq_and_hash(self):
150150
assert len({d1, d2}) == 2
151151

152152
def test_contains(self):
153-
# Dependency objects
154153
d = Dependency.required_use("!u1? ( a u2? ( b ) )")
154+
155+
# Dependency objects
155156
assert d in d
156157
assert Dependency.required_use("a") in d
157158
assert Dependency.required_use("u2? ( b )") in d
158159
assert Dependency.required_use("b") in d
159160

161+
# UseDep objects
162+
assert UseDep("!u1?") in d
163+
assert UseDep("u2?") in d
164+
assert UseDep("u1") not in d
165+
assert UseDep("u") not in d
166+
160167
# substrings
161168
assert "u2?" in d
162169
assert "b ) )" in d
@@ -414,18 +421,26 @@ def test_evaluate(self):
414421
assert not d1.evaluate(False)
415422

416423
def test_contains(self):
424+
d = self.cls("!u1? ( a/b u2? ( b/c ) ) c/d")
425+
417426
# Dependency objects
418-
assert Dependency("a/b") in self.cls("a/b")
419-
assert Dependency("a/b") in self.cls("u? ( a/b )")
427+
assert Dependency("c/d") in d
428+
assert Dependency("u2? ( b/c )") in d
429+
430+
# UseDep objects
431+
assert UseDep("!u1?") in d
432+
assert UseDep("u2?") in d
433+
assert UseDep("u1") not in d
434+
assert UseDep("u") not in d
420435

421436
# substrings
422-
assert "a/b" in self.cls("a/b")
423-
assert "u? ( c/d )" in self.cls("a/b u? ( c/d )")
424-
assert "u?" in self.cls("a/b u? ( c/d )")
425-
assert " ( " in self.cls("a/b u? ( c/d )")
437+
assert "a/b" in d
438+
assert "u2? ( b/c )" in d
439+
assert "u2?" in d
440+
assert " ( " in d
426441

427442
# all other object types return False
428-
assert None not in self.cls("a/b")
443+
assert None not in d
429444

430445
def test_eq_and_hash(self):
431446
# ordering that doesn't matter for equivalence and hashing

0 commit comments

Comments
 (0)