def testShadowingArray(self): outer = tdb._ChainedMap() inner = tdb._ChainedMap(outer) outer.set(('params', 'foo'), 'bar') inner.set(('params', 'foo'), 'baz') self.assertEquals(inner.get(('params', 'foo')), 'baz') self.assertEquals(outer.get(('params', 'foo')), 'bar') # Setting in outer is visible to inner outer.set(('params', 'yab'), 'dab') self.assertEquals(inner.get('params'), {'foo': 'baz', 'yab': 'dab'})
def testMismatchedChild(self): '''Test that any setting of an inner scope's value checks the outer scope to make sure it's a leaf.''' outer = tdb._ChainedMap() inner = tdb._ChainedMap(outer) outer.set(('params', 'foo'), 'bar') self.assertRaises(tdb.MapError, inner.set, 'params', 'baz') outer.set('xparams', 'bar') self.assertRaises(tdb.MapError, inner.set, ('xparams', 'foo'), 'baz') outer.set(('foo', 'bar', 'baz'), 'foo') self.assertRaises(tdb.MapError, inner.set, ('foo', 'bar'), 'baz') outer.set(('fee', 'bar'), 'foo') self.assertRaises(tdb.MapError, inner.set, ('fee', 'bar', 'baz'), 'baz')
def testMismatchedParent2(self): outer = tdb._ChainedMap() inner = tdb._ChainedMap(outer) inner.set(('xparams', 'foo'), 'bar') outer.set('xparams', 'baz') # see testMismatchedParent: it's a bug that this doesn't # raise tdb.MapError. But the 'get' does raise it. self.assertRaises(tdb.MapError, inner.get, 'xparams') inner.set(('yparams', 'foo', 'bar', 'baz'), 'foo') outer.set(('yparams', 'foo', 'bar'), 'foo') self.assertRaises(tdb.MapError, inner.get, 'yparams') inner.set(('zparams', 'foo', 'bar'), 'foo') outer.set(('zparams', 'foo', 'bar', 'baz'), 'foo') self.assertRaises(tdb.MapError, inner.get, 'zparams')
def testCombine(self): outer = tdb._ChainedMap() inner = tdb._ChainedMap(outer) inner.set(('params', 'doo', 'foo'), 'baz') inner.set(('params', 'doo', 'dum'), 'foo') inner.set(('params', 'dee'), 'bax') outer.set(('params', 'fip'), 'foo') self.assertEquals(inner.get('params'), {'fip': 'foo', 'doo': {'foo': 'baz', 'dum': 'foo'}, 'dee': 'bax'}) outer.set(('params', 'doo', 'foo'), 'bar') # shadowed outer.set(('params', 'doo', 'fee'), 'bar') # new self.assertEquals(inner.get('params'), {'fip': 'foo', 'doo': {'fee': 'bar', 'foo': 'baz', 'dum': 'foo'}, 'dee': 'bax'})
def testShadowing(self): '''Test that shadowing works correctly''' outer = tdb._ChainedMap() outer.set('foo', 'bar') self.assertEquals(outer.get('foo'), 'bar') inner = tdb._ChainedMap(outer) # Before inner overrides, it inherits self.assertEquals(inner.get('foo'), 'bar') # Now it's overridden inner.set('foo', 'baz') self.assertEquals(outer.get('foo'), 'bar') self.assertEquals(inner.get('foo'), 'baz') # Likewise a tree. m3 = tdb._ChainedMap(outer) m3.set('foo', 'yab') self.assertEquals(outer.get('foo'), 'bar') self.assertEquals(inner.get('foo'), 'baz') self.assertEquals(m3.get('foo'), 'yab')