From abd91d5f2c841b75eb8a32b92acee2ae823a4ac6 Mon Sep 17 00:00:00 2001 From: Michael Foord Date: Sat, 20 Mar 2010 18:09:14 +0000 Subject: Issue 7832. Document changes to unittest.TestCase.assertSameElements and assertItemsEqual --- Doc/library/unittest.rst | 39 +++++++++++++++++++++++++++++---------- Doc/whatsnew/2.7.rst | 2 +- Lib/test/test_cgi.py | 2 +- Tools/scripts/reindent-rst.py | 2 +- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index 4671f8a..5ed75d5 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -785,7 +785,7 @@ Test cases will be included in the error message. This method is used by default when comparing strings with :meth:`assertEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -806,7 +806,7 @@ Test cases Tests that *first* is or is not in *second* with an explanatory error message as appropriate. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -819,12 +819,31 @@ Test cases Duplicate elements are ignored when comparing *actual* and *expected*. It is the equivalent of ``assertEqual(set(expected), set(actual))`` - but it works with sequences of unhashable objects as well. + but it works with sequences of unhashable objects as well. Because + duplicates are ignored, this method has been deprecated in favour of + :meth:`assertItemsEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 + .. deprecated:: 3.2 + + .. method:: assertItemsEqual(actual, expected, msg=None) + + Test that sequence *expected* contains the same elements as *actual*, + regardless of their order. When they don't, an error message listing the + differences between the sequences will be generated. + + Duplicate elements are *not* ignored when comparing *actual* and + *expected*. It verifies if each element has the same count in both + sequences. It is the equivalent of ``assertEqual(sorted(expected), + sorted(actual))`` but it works with sequences of unhashable objects as + well. + + If specified, *msg* will be used as the error message on failure. + + .. versionadded:: 3.2 .. method:: assertSetEqual(set1, set2, msg=None) @@ -835,7 +854,7 @@ Test cases Fails if either of *set1* or *set2* does not have a :meth:`set.difference` method. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -847,7 +866,7 @@ Test cases method will be used by default to compare dictionaries in calls to :meth:`assertEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -858,7 +877,7 @@ Test cases superset of those in *expected*. If not, an error message listing the missing keys and mismatched values is generated. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -872,7 +891,7 @@ Test cases These methods are used by default when comparing lists or tuples with :meth:`assertEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -884,7 +903,7 @@ Test cases be raised. If the sequences are different an error message is constructed that shows the difference between the two. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. This method is used to implement :meth:`assertListEqual` and :meth:`assertTupleEqual`. @@ -1225,7 +1244,7 @@ Loading and running tests :class:`TestLoader` objects have the following methods: - +a .. method:: loadTestsFromTestCase(testCaseClass) Return a suite of all tests cases contained in the :class:`TestCase`\ -derived diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst index fbc1b3e..05fe385 100644 --- a/Doc/whatsnew/2.7.rst +++ b/Doc/whatsnew/2.7.rst @@ -960,7 +960,7 @@ GvR worked on merging them into Python's version of :mod:`unittest`. * :meth:`assertIn` and :meth:`assertNotIn` tests whether *first* is or is not in *second*. -* :meth:`assertSameElements` tests whether two provided sequences +* :meth:`assertItemsEqual` tests whether two provided sequences contain the same elements. * :meth:`assertSetEqual` compares whether two sets are equal, and diff --git a/Lib/test/test_cgi.py b/Lib/test/test_cgi.py index 4fca2ed..fc84214 100644 --- a/Lib/test/test_cgi.py +++ b/Lib/test/test_cgi.py @@ -131,7 +131,7 @@ class CgiTests(unittest.TestCase): if isinstance(expect, dict): # test dict interface self.assertEqual(len(expect), len(fs)) - self.assertEqual(norm(expect.keys()), norm(fs.keys())) + self.assertItemsEqual(expect.keys(), fs.keys()) ##self.assertEqual(norm(expect.values()), norm(fs.values())) ##self.assertEqual(norm(expect.items()), norm(fs.items())) self.assertEqual(fs.getvalue("nonexistent field", "default"), "default") diff --git a/Tools/scripts/reindent-rst.py b/Tools/scripts/reindent-rst.py index 246af3e..55b99eb 100755 --- a/Tools/scripts/reindent-rst.py +++ b/Tools/scripts/reindent-rst.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python # Make a reST file compliant to our pre-commit hook. # Currently just remove trailing whitespace. -- cgit v0.12