1
1
import sys
2
2
import types
3
- from _pytest .python import PyCollector
3
+ import pytest
4
+
5
+
6
+ PYTEST_GTE_7_0 = (
7
+ hasattr (pytest , 'version_tuple' ) and pytest .version_tuple >= (7 , 0 )
8
+ )
9
+ PYTEST_GTE_5_4 = hasattr (pytest .Collector , 'from_parent' )
4
10
5
11
6
12
def trace_function (funcobj , * args , ** kwargs ):
@@ -55,19 +61,24 @@ def evaluate_shared_behavior(funcobj):
55
61
return funcobj ._shared_functions
56
62
57
63
58
- class DescribeBlock (PyCollector ):
64
+ class DescribeBlock (pytest . Module ):
59
65
"""Module-like object representing the scope of a describe block"""
60
66
61
67
@classmethod
62
68
def from_parent (cls , parent , obj ):
63
- name = obj .__name__
64
- try :
65
- from_parent_super = super ().from_parent
66
- except AttributeError : # PyTest < 5.4
67
- self = cls (name , parent )
69
+ name = getattr (obj , '_mangled_name' , obj .__name__ )
70
+ nodeid = parent .nodeid + '::' + name
71
+ if PYTEST_GTE_7_0 :
72
+ self = super ().from_parent (
73
+ parent = parent , path = parent .path , nodeid = nodeid ,
74
+ )
75
+ elif PYTEST_GTE_5_4 :
76
+ self = super ().from_parent (
77
+ parent = parent , fspath = parent .fspath , nodeid = nodeid ,
78
+ )
68
79
else :
69
- self = from_parent_super (parent , name = name )
70
- self ._name = getattr ( obj , '_mangled_name' , name )
80
+ self = cls (parent = parent , fspath = parent . fspath , nodeid = nodeid )
81
+ self .name = name
71
82
self .funcobj = obj
72
83
return self
73
84
@@ -78,10 +89,6 @@ def collect(self):
78
89
def _getobj (self ):
79
90
return self ._importtestmodule ()
80
91
81
- def _makeid (self ):
82
- """Magic that makes fixtures local to each scope"""
83
- return f'{ self .parent .nodeid } ::{ self ._name } '
84
-
85
92
def _importtestmodule (self ):
86
93
"""Import a describe block as if it was a module"""
87
94
module = make_module_from_function (self .funcobj )
@@ -100,7 +107,7 @@ def classnamefilter(self, name):
100
107
return False
101
108
102
109
def __repr__ (self ):
103
- return f"<{ self .__class__ .__name__ } { self ._name !r} >"
110
+ return f"<{ self .__class__ .__name__ } { self .name !r} >"
104
111
105
112
106
113
def pytest_pycollect_makeitem (collector , name , obj ):
0 commit comments