mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Issue #22609: Constructors and update methods of mapping classes in the
collections module now accept the self keyword argument.
This commit is contained in:
parent
4847035458
commit
ae5cb214d2
4 changed files with 121 additions and 28 deletions
|
@ -1084,6 +1084,28 @@ class TestCounter(unittest.TestCase):
|
|||
self.assertEqual(c.setdefault('e', 5), 5)
|
||||
self.assertEqual(c['e'], 5)
|
||||
|
||||
def test_init(self):
|
||||
self.assertEqual(list(Counter(self=42).items()), [('self', 42)])
|
||||
self.assertEqual(list(Counter(iterable=42).items()), [('iterable', 42)])
|
||||
self.assertEqual(list(Counter(iterable=None).items()), [('iterable', None)])
|
||||
self.assertRaises(TypeError, Counter, 42)
|
||||
self.assertRaises(TypeError, Counter, (), ())
|
||||
self.assertRaises(TypeError, Counter.__init__)
|
||||
|
||||
def test_update(self):
|
||||
c = Counter()
|
||||
c.update(self=42)
|
||||
self.assertEqual(list(c.items()), [('self', 42)])
|
||||
c = Counter()
|
||||
c.update(iterable=42)
|
||||
self.assertEqual(list(c.items()), [('iterable', 42)])
|
||||
c = Counter()
|
||||
c.update(iterable=None)
|
||||
self.assertEqual(list(c.items()), [('iterable', None)])
|
||||
self.assertRaises(TypeError, Counter().update, 42)
|
||||
self.assertRaises(TypeError, Counter().update, {}, {})
|
||||
self.assertRaises(TypeError, Counter.update)
|
||||
|
||||
def test_copying(self):
|
||||
# Check that counters are copyable, deepcopyable, picklable, and
|
||||
#have a repr/eval round-trip
|
||||
|
@ -1205,6 +1227,16 @@ class TestCounter(unittest.TestCase):
|
|||
c.subtract('aaaabbcce')
|
||||
self.assertEqual(c, Counter(a=-1, b=0, c=-1, d=1, e=-1))
|
||||
|
||||
c = Counter()
|
||||
c.subtract(self=42)
|
||||
self.assertEqual(list(c.items()), [('self', -42)])
|
||||
c = Counter()
|
||||
c.subtract(iterable=42)
|
||||
self.assertEqual(list(c.items()), [('iterable', -42)])
|
||||
self.assertRaises(TypeError, Counter().subtract, 42)
|
||||
self.assertRaises(TypeError, Counter().subtract, {}, {})
|
||||
self.assertRaises(TypeError, Counter.subtract)
|
||||
|
||||
def test_unary(self):
|
||||
c = Counter(a=-5, b=0, c=5, d=10, e=15,g=40)
|
||||
self.assertEqual(dict(+c), dict(c=5, d=10, e=15, g=40))
|
||||
|
@ -1255,8 +1287,11 @@ class TestOrderedDict(unittest.TestCase):
|
|||
c=3, e=5).items()), pairs) # mixed input
|
||||
|
||||
# make sure no positional args conflict with possible kwdargs
|
||||
self.assertEqual(inspect.getargspec(OrderedDict.__dict__['__init__']).args,
|
||||
['self'])
|
||||
self.assertEqual(list(OrderedDict(self=42).items()), [('self', 42)])
|
||||
self.assertEqual(list(OrderedDict(other=42).items()), [('other', 42)])
|
||||
self.assertRaises(TypeError, OrderedDict, 42)
|
||||
self.assertRaises(TypeError, OrderedDict, (), ())
|
||||
self.assertRaises(TypeError, OrderedDict.__init__)
|
||||
|
||||
# Make sure that direct calls to __init__ do not clear previous contents
|
||||
d = OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 44), ('e', 55)])
|
||||
|
@ -1301,6 +1336,10 @@ class TestOrderedDict(unittest.TestCase):
|
|||
self.assertEqual(list(d.items()),
|
||||
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5), ('f', 6), ('g', 7)])
|
||||
|
||||
self.assertRaises(TypeError, OrderedDict().update, 42)
|
||||
self.assertRaises(TypeError, OrderedDict().update, (), ())
|
||||
self.assertRaises(TypeError, OrderedDict.update)
|
||||
|
||||
def test_abc(self):
|
||||
self.assertIsInstance(OrderedDict(), MutableMapping)
|
||||
self.assertTrue(issubclass(OrderedDict, MutableMapping))
|
||||
|
@ -1532,6 +1571,24 @@ class SubclassMappingTests(mapping_tests.BasicTestMappingProtocol):
|
|||
d = self._empty_mapping()
|
||||
self.assertRaises(KeyError, d.popitem)
|
||||
|
||||
class TestUserDict(unittest.TestCase):
|
||||
|
||||
def test_init(self):
|
||||
self.assertEqual(list(UserDict(self=42).items()), [('self', 42)])
|
||||
self.assertEqual(list(UserDict(dict=42).items()), [('dict', 42)])
|
||||
self.assertEqual(list(UserDict(dict=None).items()), [('dict', None)])
|
||||
self.assertRaises(TypeError, UserDict, 42)
|
||||
self.assertRaises(TypeError, UserDict, (), ())
|
||||
self.assertRaises(TypeError, UserDict.__init__)
|
||||
|
||||
def test_update(self):
|
||||
d = UserDict()
|
||||
d.update(self=42)
|
||||
self.assertEqual(list(d.items()), [('self', 42)])
|
||||
self.assertRaises(TypeError, UserDict().update, 42)
|
||||
self.assertRaises(TypeError, UserDict().update, {}, {})
|
||||
self.assertRaises(TypeError, UserDict.update)
|
||||
|
||||
|
||||
################################################################################
|
||||
### Run tests
|
||||
|
@ -1543,7 +1600,8 @@ def test_main(verbose=None):
|
|||
NamedTupleDocs = doctest.DocTestSuite(module=collections)
|
||||
test_classes = [TestNamedTuple, NamedTupleDocs, TestOneTrickPonyABCs,
|
||||
TestCollectionABCs, TestCounter, TestChainMap,
|
||||
TestOrderedDict, GeneralMappingTests, SubclassMappingTests]
|
||||
TestOrderedDict, GeneralMappingTests, SubclassMappingTests,
|
||||
TestUserDict,]
|
||||
support.run_unittest(*test_classes)
|
||||
support.run_doctest(collections, verbose)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue