@@ -26,16 +26,22 @@ def pytest_collection_modifyitems(session, config, items):
26
26
items [:] = list (_order_tests (items ))
27
27
28
28
29
- def orderable (marker ):
30
- match = re .match ('^order(\d+)$' , marker )
31
- return bool (match ) or marker in replacements
29
+ def orderable (marker_name , marker_info ):
30
+ if not hasattr (marker_info , 'kwargs' ):
31
+ return False
32
+ if 'order' in marker_info .kwargs :
33
+ return True
34
+ match = re .match ('^order(\d+)$' , marker_name )
35
+ return bool (match ) or marker_name in replacements
32
36
33
37
34
- def get_index (marker ):
35
- match = re .match ('^order(\d+)$' , marker )
38
+ def get_index (marker_name , marker_info ):
39
+ match = re .match ('^order(\d+)$' , marker_name )
36
40
if match :
37
41
return int (match .group (1 )) - 1
38
- return replacements [marker ]
42
+ if marker_name in replacements :
43
+ return replacements [marker_name ]
44
+ return marker_info .kwargs ['order' ]
39
45
40
46
41
47
def split (dictionary ):
@@ -54,10 +60,11 @@ def _order_tests(tests):
54
60
for test in tests :
55
61
# There has got to be an API for this. :-/
56
62
markers = test .keywords .__dict__ ['_markers' ]
57
- orderable_markers = [m for m in markers if orderable (m )]
63
+ orderable_markers = [(k , v ) for (k , v ) in markers .items ()
64
+ if orderable (k , v )]
58
65
if len (orderable_markers ) == 1 :
59
- [ orderable_marker ] = orderable_markers
60
- ordered_tests [get_index (orderable_marker )] = test
66
+ marker_name , marker_info = orderable_markers [ 0 ]
67
+ ordered_tests [get_index (marker_name , marker_info )] = test
61
68
else :
62
69
remaining_tests .append (test )
63
70
from_beginning , from_end = split (ordered_tests )
0 commit comments