Skip to content

Commit fb6a456

Browse files
jacebrowningdavehunt
authored andcommitted
Disable sort on environment table when metadata is ordered
1 parent 35a6100 commit fb6a456

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

README.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ via the :code:`pytest_configure` hook:
9696
def pytest_configure(config):
9797
config._metadata['foo'] = 'bar'
9898
99+
The generated table will be sorted alphabetically unless the metadata is a
100+
:code:`collections.OrderedDict`.
101+
99102
Additional summary information
100103
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
101104

pytest_html/plugin.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from __future__ import absolute_import
66

77
from base64 import b64encode, b64decode
8+
from collections import OrderedDict
89
from os.path import isfile
910
import datetime
1011
import json
@@ -465,7 +466,11 @@ def _generate_environment(self, config):
465466
environment = [html.h2('Environment')]
466467
rows = []
467468

468-
for key in [k for k in sorted(metadata.keys()) if metadata[k]]:
469+
keys = [k for k in metadata.keys() if metadata[k]]
470+
if not isinstance(metadata, OrderedDict):
471+
keys.sort()
472+
473+
for key in keys:
469474
value = metadata[key]
470475
if isinstance(value, basestring) and value.startswith('http'):
471476
value = html.a(value, href=value, target='_blank')

testing/test_pytest_html.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,18 @@ def pytest_configure(config):
545545
assert 'Environment' in html
546546
assert len(re.findall(expected_html_re, html)) == 1
547547

548+
def test_environment_ordered(self, testdir):
549+
testdir.makeconftest("""
550+
from collections import OrderedDict
551+
def pytest_configure(config):
552+
config._metadata = OrderedDict([('ZZZ', 1), ('AAA', 2)])
553+
""")
554+
testdir.makepyfile('def test_pass(): pass')
555+
result, html = run(testdir)
556+
assert result.ret == 0
557+
assert 'Environment' in html
558+
assert len(re.findall('ZZZ.+AAA', html, re.DOTALL)) == 1
559+
548560
@pytest.mark.xfail(
549561
sys.version_info < (3, 2) and
550562
LooseVersion(pytest.__version__) >= LooseVersion('2.8.0'),

0 commit comments

Comments
 (0)