]> granicus.if.org Git - python/commitdiff
Add __bool__ method. Add tests. Fix-up broken test.
authorRaymond Hettinger <python@rcn.com>
Sat, 26 Feb 2011 06:53:58 +0000 (06:53 +0000)
committerRaymond Hettinger <python@rcn.com>
Sat, 26 Feb 2011 06:53:58 +0000 (06:53 +0000)
Lib/collections/__init__.py
Lib/test/test_collections.py

index aab5aeece01050213bb11318ee11453ba60243f5..922bba28d15bbcb3cc668cdc79057fae374023a1 100644 (file)
@@ -679,6 +679,9 @@ class ChainMap(MutableMapping):
     def __contains__(self, key):
         return any(key in m for m in self.maps)
 
+    def __bool__(self):
+        return any(self.maps)
+
     @_recursive_repr()
     def __repr__(self):
         return '{0.__class__.__name__}({1})'.format(
index 5c73d7816bcea7ca4b2c6daa89ba55e54ef0815a..bb1150084efa13cfd416a55acce5e564e02a79fc 100644 (file)
@@ -72,17 +72,23 @@ class TestChainMap(unittest.TestCase):
             for m1, m2 in zip(d.maps, e.maps):
                 self.assertIsNot(m1, m2, e)
 
-        d.new_child()
-        d['b'] = 5
-        self.assertEqual(d.maps, [{'b': 5}, {'c':30}, {'a':1, 'b':2}])
-        self.assertEqual(d.parents.maps, [{'c':30}, {'a':1, 'b':2}])   # check parents
-        self.assertEqual(d['b'], 5)                                    # find first in chain
-        self.assertEqual(d.parents['b'], 2)                            # look beyond maps[0]
+        f = d.new_child()
+        f['b'] = 5
+        self.assertEqual(f.maps, [{'b': 5}, {'c':30}, {'a':1, 'b':2}])
+        self.assertEqual(f.parents.maps, [{'c':30}, {'a':1, 'b':2}])   # check parents
+        self.assertEqual(f['b'], 5)                                    # find first in chain
+        self.assertEqual(f.parents['b'], 2)                            # look beyond maps[0]
 
     def test_contructor(self):
-        self.assertEqual(ChainedContext().maps, [{}])                  # no-args --> one new dict
+        self.assertEqual(ChainMap().maps, [{}])                        # no-args --> one new dict
         self.assertEqual(ChainMap({1:2}).maps, [{1:2}])                # 1 arg --> list
 
+    def test_bool(self):
+        self.assertFalse(ChainMap())
+        self.assertFalse(ChainMap({}, {}))
+        self.assertTrue(ChainMap({1:2}, {}))
+        self.assertTrue(ChainMap({}, {1:2}))
+
     def test_missing(self):
         class DefaultChainMap(ChainMap):
             def __missing__(self, key):
@@ -1182,7 +1188,7 @@ import doctest, collections
 def test_main(verbose=None):
     NamedTupleDocs = doctest.DocTestSuite(module=collections)
     test_classes = [TestNamedTuple, NamedTupleDocs, TestOneTrickPonyABCs,
-                    TestCollectionABCs, TestCounter,
+                    TestCollectionABCs, TestCounter, TestChainMap,
                     TestOrderedDict, GeneralMappingTests, SubclassMappingTests]
     support.run_unittest(*test_classes)
     support.run_doctest(collections, verbose)