diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2017-06-23 18:47:39 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-23 18:47:39 (GMT) |
commit | 48fbe52ac71ea711a4701db909ad1ce2647b09fd (patch) | |
tree | ea64577a1775111edd2fe21e422641f23bdc0988 /Lib/unittest/case.py | |
parent | c38e32a10061a7c6d54e7e53ffabf7af7998f045 (diff) | |
download | cpython-48fbe52ac71ea711a4701db909ad1ce2647b09fd.zip cpython-48fbe52ac71ea711a4701db909ad1ce2647b09fd.tar.gz cpython-48fbe52ac71ea711a4701db909ad1ce2647b09fd.tar.bz2 |
bpo-30664: The description of a unittest subtest now preserves the (#2265)
order of keyword arguments of TestCase.subTest().
Diffstat (limited to 'Lib/unittest/case.py')
-rw-r--r-- | Lib/unittest/case.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index 993aaec..f19afef 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -338,6 +338,16 @@ class _AssertLogsContext(_BaseTestCaseContext): .format(logging.getLevelName(self.level), self.logger.name)) +class _OrderedChainMap(collections.ChainMap): + def __iter__(self): + seen = set() + for mapping in self.maps: + for k in mapping: + if k not in seen: + seen.add(k) + yield k + + class TestCase(object): """A class whose instances are single test cases. @@ -514,7 +524,7 @@ class TestCase(object): return parent = self._subtest if parent is None: - params_map = collections.ChainMap(params) + params_map = _OrderedChainMap(params) else: params_map = parent.params.new_child(params) self._subtest = _SubTest(self, msg, params_map) @@ -1418,7 +1428,7 @@ class _SubTest(TestCase): if self.params: params_desc = ', '.join( "{}={!r}".format(k, v) - for (k, v) in sorted(self.params.items())) + for (k, v) in self.params.items()) parts.append("({})".format(params_desc)) return " ".join(parts) or '(<subtest>)' |