Coverage for /usr/local/lib/python3.7/site-packages/pytest_ordering/__init__.py : 68%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
2from ._version import __version__
4import operator
6import pytest
8orders_map = {
9 'first': 0,
10 'second': 1,
11 'third': 2,
12 'fourth': 3,
13 'fifth': 4,
14 'sixth': 5,
15 'seventh': 6,
16 'eighth': 7,
17 'last': -1,
18 'second_to_last': -2,
19 'third_to_last': -3,
20 'fourth_to_last': -4,
21 'fifth_to_last': -5,
22 'sixth_to_last': -6,
23 'seventh_to_last': -7,
24 'eighth_to_last': -8,
25}
28def pytest_configure(config):
29 """Register the "run" marker."""
31 config_line = (
32 'run: specify ordering information for when tests should run '
33 'in relation to one another. Provided by pytest-ordering. '
34 'See also: http://pytest-ordering.readthedocs.org/'
35 )
36 config.addinivalue_line('markers', config_line)
39def pytest_collection_modifyitems(session, config, items):
40 grouped_items = {}
42 for item in items:
44 for mark_name, order in orders_map.items():
45 mark = item.get_closest_marker(mark_name)
47 if mark:
48 item.add_marker(pytest.mark.run(order=order))
49 break
51 mark = item.get_closest_marker('run')
53 if mark:
54 order = mark.kwargs.get('order')
55 else:
56 order = None
58 grouped_items.setdefault(order, []).append(item)
60 sorted_items = []
61 unordered_items = [grouped_items.pop(None, [])]
63 start_list = sorted((i for i in grouped_items.items() if i[0] >= 0),
64 key=operator.itemgetter(0))
65 end_list = sorted((i for i in grouped_items.items() if i[0] < 0),
66 key=operator.itemgetter(0))
68 sorted_items.extend([i[1] for i in start_list])
69 sorted_items.extend(unordered_items)
70 sorted_items.extend([i[1] for i in end_list])
72 items[:] = [item for sublist in sorted_items for item in sublist]