123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # -*- coding: utf-8 -*-
- from ._version import __version__
- import operator
- import pytest
- orders_map = {
- 'first': 0,
- 'second': 1,
- 'third': 2,
- 'fourth': 3,
- 'fifth': 4,
- 'sixth': 5,
- 'seventh': 6,
- 'eighth': 7,
- 'last': -1,
- 'second_to_last': -2,
- 'third_to_last': -3,
- 'fourth_to_last': -4,
- 'fifth_to_last': -5,
- 'sixth_to_last': -6,
- 'seventh_to_last': -7,
- 'eighth_to_last': -8,
- }
- def pytest_configure(config):
- """Register the "run" marker."""
- config_line = (
- 'run: specify ordering information for when tests should run '
- 'in relation to one another. Provided by pytest-ordering. '
- 'See also: http://pytest-ordering.readthedocs.org/'
- )
- config.addinivalue_line('markers', config_line)
- def pytest_collection_modifyitems(session, config, items):
- grouped_items = {}
- for item in items:
- for mark_name, order in orders_map.items():
- mark = item.get_closest_marker(mark_name)
- if mark:
- item.add_marker(pytest.mark.run(order=order))
- break
- mark = item.get_closest_marker('run')
- if mark:
- order = mark.kwargs.get('order')
- else:
- order = None
- grouped_items.setdefault(order, []).append(item)
- sorted_items = []
- unordered_items = [grouped_items.pop(None, [])]
- start_list = sorted((i for i in grouped_items.items() if i[0] >= 0),
- key=operator.itemgetter(0))
- end_list = sorted((i for i in grouped_items.items() if i[0] < 0),
- key=operator.itemgetter(0))
- sorted_items.extend([i[1] for i in start_list])
- sorted_items.extend(unordered_items)
- sorted_items.extend([i[1] for i in end_list])
- items[:] = [item for sublist in sorted_items for item in sublist]
|