Skip to content

Commit 5d1ffb9

Browse files
chore: expand coverage by pragmas and test changes
1 parent 3202c88 commit 5d1ffb9

File tree

9 files changed

+65
-56
lines changed

9 files changed

+65
-56
lines changed

src/pluggy/__init__.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
try:
2-
from ._version import version as __version__
3-
except ImportError:
4-
# broken installation, we don't even try
5-
# unknown only works because we do poor mans version compare
6-
__version__ = "unknown"
7-
81
__all__ = [
92
"__version__",
103
"PluginManager",
@@ -21,7 +14,6 @@
2114
"PluggyWarning",
2215
"PluggyTeardownRaisedWarning",
2316
]
24-
2517
from ._hooks import HookCaller
2618
from ._hooks import HookImpl
2719
from ._hooks import HookimplMarker
@@ -33,5 +25,6 @@
3325
from ._manager import PluginValidationError
3426
from ._result import HookCallError
3527
from ._result import Result
28+
from ._version import version as __version__
3629
from ._warnings import PluggyTeardownRaisedWarning
3730
from ._warnings import PluggyWarning

src/pluggy/_manager.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,11 @@ def parse_hookimpl_opts(self, plugin: _Plugin, name: str) -> HookimplOpts | None
188188
res: HookimplOpts | None = getattr(
189189
method, self.project_name + "_impl", None
190190
)
191-
except Exception:
192-
res = {} # type: ignore[assignment]
191+
except Exception: #pragma: no cover
192+
res = {} # type: ignore[assignment] #pragma: no cover
193193
if res is not None and not isinstance(res, dict):
194194
# false positive
195-
res = None # type:ignore[unreachable]
195+
res = None # type:ignore[unreachable] #pragma: no cover
196196
return res
197197

198198
def unregister(

testing/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def he_pm(request, pm: PluginManager) -> PluginManager:
1414
class Hooks:
1515
@hookspec
1616
def he_method1(self, arg: int) -> int:
17-
return arg + 1
17+
return arg + 1 # pragma: no cover
1818

1919
pm.add_hookspecs(request.param(Hooks))
2020
return pm

testing/test_details.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from importlib.metadata import distribution
2+
13
import pytest
24

35
from pluggy import HookimplMarker
@@ -20,7 +22,7 @@ def parse_hookimpl_opts(self, module_or_class, name):
2022

2123
class Plugin:
2224
def x1meth(self):
23-
pass
25+
pass # pragma: no cover
2426

2527
@hookimpl(hookwrapper=True, tryfirst=True)
2628
def x1meth2(self):
@@ -33,15 +35,15 @@ def x1meth3(self):
3335
class Spec:
3436
@hookspec
3537
def x1meth(self):
36-
pass
38+
pass # pragma: no cover
3739

3840
@hookspec
3941
def x1meth2(self):
40-
pass
42+
pass # pragma: no cover
4143

4244
@hookspec
4345
def x1meth3(self):
44-
pass
46+
pass # pragma: no cover
4547

4648
pm = MyPluginManager(hookspec.project_name)
4749
pm.register(Plugin())
@@ -75,12 +77,12 @@ def test_warn_when_deprecated_specified(recwarn) -> None:
7577
class Spec:
7678
@hookspec(warn_on_impl=warning)
7779
def foo(self):
78-
pass
80+
pass # pragma: no cover
7981

8082
class Plugin:
8183
@hookimpl
8284
def foo(self):
83-
pass
85+
pass # pragma: no cover
8486

8587
pm = PluginManager(hookspec.project_name)
8688
pm.add_hookspecs(Spec)
@@ -136,10 +138,12 @@ def __getattr__(self, x):
136138
raise Exception("can't touch me")
137139

138140
class Module:
139-
pass
141+
x: DontTouchMe
140142

141143
module = Module()
142-
module.x = DontTouchMe() # type: ignore[attr-defined]
144+
module.x = DontTouchMe()
145+
with pytest.raises(Exception, match="touch me"):
146+
module.x.broken
143147

144148
pm = PluginManager(hookspec.project_name)
145149
# register() would raise an error
@@ -154,11 +158,11 @@ def test_not_all_arguments_are_provided_issues_a_warning(pm: PluginManager) -> N
154158
class Spec:
155159
@hookspec
156160
def hello(self, arg1, arg2):
157-
pass
161+
pass # pragma: no cover
158162

159163
@hookspec(historic=True)
160164
def herstory(self, arg1, arg2):
161-
pass
165+
pass # pragma: no cover
162166

163167
pm.add_hookspecs(Spec)
164168

@@ -189,3 +193,12 @@ def myhook(self):
189193
assert repr(pm.hook.myhook.get_hookimpls()[0]) == (
190194
f"<HookImpl plugin_name={pname!r}, plugin={plugin!r}>"
191195
)
196+
197+
198+
def test_dist_facade_list_attributes() -> None:
199+
from pluggy._manager import DistFacade
200+
201+
fc = DistFacade(distribution("pluggy"))
202+
res = dir(fc)
203+
assert res == sorted(res)
204+
assert set(res) - set(dir(fc._dist)) == {"_dist", "project_name"}

testing/test_helpers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010

1111
def test_varnames() -> None:
1212
def f(x) -> None:
13-
i = 3 # noqa
13+
i = 3 # noqa #pragma: no cover
1414

1515
class A:
1616
def f(self, y) -> None:
17-
pass
17+
pass # pragma: no cover
1818

1919
class B:
2020
def __call__(self, z) -> None:
21-
pass
21+
pass # pragma: no cover
2222

2323
assert varnames(f) == (("x",), ())
2424
assert varnames(A().f) == (("y",), ())
@@ -96,7 +96,7 @@ def test_varnames_decorator() -> None:
9696
def my_decorator(func: F) -> F:
9797
@wraps(func)
9898
def wrapper(*args, **kwargs):
99-
return func(*args, **kwargs)
99+
return func(*args, **kwargs) # pragma: no cover
100100

101101
return cast(F, wrapper)
102102

testing/test_hookcaller.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -158,23 +158,23 @@ def he_method1_b() -> None:
158158
def test_adding_wrappers_ordering(hc: HookCaller, addmeth: AddMeth) -> None:
159159
@addmeth(hookwrapper=True)
160160
def he_method1():
161-
yield
161+
yield # pragma: no cover
162162

163163
@addmeth(wrapper=True)
164164
def he_method1_fun():
165-
yield
165+
yield # pragma: no cover
166166

167167
@addmeth()
168168
def he_method1_middle():
169-
return
169+
return # pragma: no cover
170170

171171
@addmeth(hookwrapper=True)
172172
def he_method3_fun():
173-
yield
173+
yield # pragma: no cover
174174

175175
@addmeth(hookwrapper=True)
176176
def he_method3():
177-
yield
177+
yield # pragma: no cover
178178

179179
assert funcs(hc.get_hookimpls()) == [
180180
he_method1_middle,
@@ -188,15 +188,15 @@ def he_method3():
188188
def test_adding_wrappers_ordering_tryfirst(hc: HookCaller, addmeth: AddMeth) -> None:
189189
@addmeth(hookwrapper=True, tryfirst=True)
190190
def he_method1():
191-
yield
191+
yield # pragma: no cover
192192

193193
@addmeth(hookwrapper=True)
194194
def he_method2():
195-
yield
195+
yield # pragma: no cover
196196

197197
@addmeth(wrapper=True, tryfirst=True)
198198
def he_method3():
199-
yield
199+
yield # pragma: no cover
200200

201201
assert funcs(hc.get_hookimpls()) == [he_method2, he_method1, he_method3]
202202

@@ -206,7 +206,7 @@ def test_adding_wrappers_complex(hc: HookCaller, addmeth: AddMeth) -> None:
206206

207207
@addmeth(hookwrapper=True, trylast=True)
208208
def m1():
209-
yield
209+
yield # pragma: no cover
210210

211211
assert funcs(hc.get_hookimpls()) == [m1]
212212

@@ -227,7 +227,7 @@ def m4() -> None: ...
227227

228228
@addmeth(wrapper=True, tryfirst=True)
229229
def m5():
230-
yield
230+
yield # pragma: no cover
231231

232232
assert funcs(hc.get_hookimpls()) == [m3, m2, m1, m4, m5]
233233

@@ -243,7 +243,7 @@ def m7() -> None: ...
243243

244244
@addmeth(wrapper=True)
245245
def m8():
246-
yield
246+
yield # pragma: no cover
247247

248248
assert funcs(hc.get_hookimpls()) == [m3, m2, m7, m6, m1, m4, m8, m5]
249249

@@ -264,7 +264,7 @@ def m11() -> None: ...
264264

265265
@addmeth(wrapper=True)
266266
def m12():
267-
yield
267+
yield # pragma: no cover
268268

269269
assert funcs(hc.get_hookimpls()) == [
270270
m9,
@@ -405,7 +405,7 @@ def hello(self, arg: object) -> None:
405405
class Plugin:
406406
@hookimpl(specname="hello")
407407
def foo(self, arg: int, too, many, args) -> int:
408-
return arg + 1
408+
return arg + 1 # pragma: no cover
409409

410410
with pytest.raises(PluginValidationError):
411411
pm.register(Plugin())
@@ -415,7 +415,7 @@ def foo(self, arg: int, too, many, args) -> int:
415415
class Plugin2:
416416
@hookimpl(specname="bar")
417417
def hello(self, arg: int) -> int:
418-
return arg + 1
418+
return arg + 1 # pragma: no cover
419419

420420
pm.register(Plugin2())
421421
with pytest.raises(PluginValidationError):

testing/test_invocations.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def hello(self, arg):
133133
class Plugin1:
134134
@hookimpl
135135
def hello(self, arg):
136-
return arg + 1
136+
return arg + 1 # pragma: no cover
137137

138138
class Plugin2:
139139
@hookimpl

testing/test_multicall.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def f(x, z=1):
5555
def test_tags_call_error() -> None:
5656
@hookimpl
5757
def f(x):
58-
return x
58+
return x # pragma: no cover
5959

6060
with pytest.raises(HookCallError):
6161
MC([f], {})
@@ -331,7 +331,7 @@ def m1():
331331
raise
332332
finally:
333333
out.append("m1 finish")
334-
return result
334+
return result # pragma: no cover
335335

336336
@hookimpl
337337
def m2():
@@ -358,7 +358,7 @@ def m2():
358358
@hookimpl(wrapper=True)
359359
def m3():
360360
yield
361-
return 10
361+
return 10 # pragma: no cover
362362

363363
@hookimpl(wrapper=True)
364364
def m4():
@@ -384,7 +384,7 @@ def m1():
384384
out.append("m1 init")
385385
try:
386386
yield
387-
out.append("m1 unreachable")
387+
out.append("m1 unreachable") # pragma: no cover
388388
except BaseException:
389389
out.append("m1 teardown")
390390
raise
@@ -459,7 +459,7 @@ def m2():
459459
out.append("m2 init")
460460
try:
461461
yield
462-
out.append("m2 unreachable")
462+
out.append("m2 unreachable") # pragma: no cover
463463
except ValueError:
464464
out.append("m2 suppress")
465465
return 22

0 commit comments

Comments
 (0)