2
2
import os
3
3
import re
4
4
import sys
5
+ from warnings import warn
5
6
6
7
import pytest
7
8
28
29
29
30
30
31
def pytest_configure (config ):
31
- """Register the "run " marker and configure the plugin depending on the CLI
32
- options"""
32
+ """Register the "order " marker and configure the plugin depending
33
+ on the CLI options"""
33
34
34
35
provided_by_pytest_ordering = (
35
36
'Provided by pytest-ordering2. '
36
37
'See also: http://pytest-ordering.readthedocs.org/'
37
38
)
38
39
39
40
config_line = (
40
- 'run : specify ordering information for when tests should run '
41
+ 'order : specify ordering information for when tests should run '
41
42
'in relation to one another. ' + provided_by_pytest_ordering
42
43
)
43
44
config .addinivalue_line ('markers' , config_line )
@@ -70,9 +71,9 @@ def pytest_addoption(parser):
70
71
group = parser .getgroup ('ordering' )
71
72
group .addoption ('--indulgent-ordering' , action = 'store_true' ,
72
73
dest = 'indulgent-ordering' , help =
73
- ''' Request that the sort \
74
- order provided by pytest-ordering be applied before other sorting, \
75
- allowing the other sorting to have priority'' ' )
74
+ 'Request that the sort order provided by pytest-order '
75
+ ' be applied before other sorting, allowing the '
76
+ ' other sorting to have priority' )
76
77
77
78
78
79
class OrderingPlugin (object ):
@@ -98,17 +99,24 @@ def mark_binning(item, keys, start, end, before, after, unordered):
98
99
order = int (find_order .group (1 ))
99
100
start .setdefault (order , []).append (item )
100
101
return True
101
- elif "run " in keys :
102
- mark = item .get_closest_marker ('run ' )
103
- order = mark .kwargs . get ( 'order' )
102
+ elif "order " in keys :
103
+ mark = item .get_closest_marker ('order ' )
104
+ order = mark .args [ 0 ] if mark . args else None
104
105
before_mark = mark .kwargs .get ('before' )
105
106
after_mark = mark .kwargs .get ('after' )
106
107
if order is not None :
107
- order = int (order )
108
- if order < 0 :
109
- end .setdefault (order , []).append (item )
108
+ if isinstance (order , int ):
109
+ order = int (order )
110
+ elif order in orders_map :
111
+ order = orders_map [order ]
110
112
else :
111
- start .setdefault (order , []).append (item )
113
+ warn ("Unknown order attribute:'{}'" .format (order ))
114
+ order = None
115
+ if order is not None :
116
+ if order < 0 :
117
+ end .setdefault (order , []).append (item )
118
+ else :
119
+ start .setdefault (order , []).append (item )
112
120
elif before_mark :
113
121
if "." not in before_mark :
114
122
prefix = get_filename (item )
@@ -120,24 +128,7 @@ def mark_binning(item, keys, start, end, before, after, unordered):
120
128
after_mark = prefix + "." + after_mark
121
129
122
130
after .setdefault (after_mark , []).append (item )
123
- else :
124
- for ordinal , position in orders_map .items ():
125
- if ordinal in mark .args :
126
- if position < 0 :
127
- end .setdefault (position , []).append (item )
128
- else :
129
- start .setdefault (position , []).append (item )
130
- break
131
131
return True
132
- for mark_name , order in orders_map .items ():
133
- mark = item .get_closest_marker (mark_name )
134
- if mark :
135
- order = int (order )
136
- if order < 0 :
137
- end .setdefault (order , []).append (item )
138
- else :
139
- start .setdefault (order , []).append (item )
140
- return True
141
132
unordered .append (item )
142
133
return False
143
134
0 commit comments