14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Check every path through every method of UserDict 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support, mapping_tests 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport UserDict 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaod0 = {} 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaod1 = {"one": 1} 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaod2 = {"one": 1, "two": 2} 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaod3 = {"one": 1, "two": 3, "three": 5} 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaod4 = {"one": None, "two": None} 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaod5 = {"one": 1, "two": 1} 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass UserDictTest(mapping_tests.TestHashMappingProtocol): 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type2test = UserDict.IterableUserDict 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_all(self): 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test constructors 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = UserDict.UserDict() 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u0 = UserDict.UserDict(d0) 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u1 = UserDict.UserDict(d1) 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u2 = UserDict.IterableUserDict(d2) 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao uu = UserDict.UserDict(u) 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao uu0 = UserDict.UserDict(u0) 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao uu1 = UserDict.UserDict(u1) 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao uu2 = UserDict.UserDict(u2) 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # keyword arg constructor 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(UserDict.UserDict(one=1, two=2), d2) 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # item sequence constructor 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(UserDict.UserDict([('one',1), ('two',2)]), d2) 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(UserDict.UserDict(dict=[('one',1), ('two',2)]), d2) 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # both together 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(UserDict.UserDict([('one',1), ('two',2)], two=3, three=5), d3) 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # alternate constructor 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(UserDict.UserDict.fromkeys('one two'.split()), d4) 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(UserDict.UserDict().fromkeys('one two'.split()), d4) 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(UserDict.UserDict.fromkeys('one two'.split(), 1), d5) 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(UserDict.UserDict().fromkeys('one two'.split(), 1), d5) 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(u1.fromkeys('one two'.split()) is not u1) 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsInstance(u1.fromkeys('one two'.split()), UserDict.UserDict) 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsInstance(u2.fromkeys('one two'.split()), UserDict.IterableUserDict) 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test __repr__ 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(str(u0), str(d0)) 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(repr(u1), repr(d1)) 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(repr(u2), repr(d2)) 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test __cmp__ and __len__ 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao all = [d0, d1, d2, u, u0, u1, u2, uu, uu0, uu1, uu2] 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for a in all: 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for b in all: 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(cmp(a, b), cmp(len(a), len(b))) 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test __getitem__ 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2["one"], 1) 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(KeyError, u1.__getitem__, "two") 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test __setitem__ 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u3 = UserDict.UserDict(u2) 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u3["two"] = 2 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u3["three"] = 3 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test __delitem__ 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del u3["three"] 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(KeyError, u3.__delitem__, "three") 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test clear 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u3.clear() 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u3, {}) 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test copy() 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u2a = u2.copy() 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2a, u2) 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u2b = UserDict.UserDict(x=42, y=23) 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u2c = u2b.copy() # making a copy of a UserDict is special cased 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2b, u2c) 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class MyUserDict(UserDict.UserDict): 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def display(self): print self 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m2 = MyUserDict(u2) 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m2a = m2.copy() 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(m2a, m2) 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # SF bug #476616 -- copy() of UserDict subclass shared data 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m2['foo'] = 'bar' 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(m2a, m2) 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test keys, items, values 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2.keys(), d2.keys()) 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2.items(), d2.items()) 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2.values(), d2.values()) 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test has_key and "in". 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in u2.keys(): 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(i, u2) 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(i in u1, i in d1) 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(i in u0, i in d0) 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with test_support.check_py3k_warnings(): 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(u2.has_key(i)) 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u1.has_key(i), d1.has_key(i)) 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u0.has_key(i), d0.has_key(i)) 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test update 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t = UserDict.UserDict() 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t.update(u2) 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(t, u2) 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class Items: 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def items(self): 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return (("x", 42), ("y", 23)) 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t = UserDict.UserDict() 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t.update(Items()) 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(t, {"x": 42, "y": 23}) 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test get 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in u2.keys(): 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2.get(i), u2[i]) 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u1.get(i), d1.get(i)) 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u0.get(i), d0.get(i)) 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test "in" iteration. 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in xrange(20): 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u2[i] = str(i) 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ikeys = [] 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for k in u2: 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ikeys.append(k) 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao keys = u2.keys() 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(set(ikeys), set(keys)) 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test setdefault 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t = UserDict.UserDict() 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(t.setdefault("x", 42), 42) 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(t.has_key("x")) 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(t.setdefault("x", 23), 42) 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test pop 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t = UserDict.UserDict(x=42) 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(t.pop("x"), 42) 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(KeyError, t.pop, "x") 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(t.pop("x", 1), 1) 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t["x"] = 42 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(t.pop("x", 1), 42) 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test popitem 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t = UserDict.UserDict(x=42) 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(t.popitem(), ("x", 42)) 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(KeyError, t.popitem) 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_missing(self): 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Make sure UserDict doesn't have a __missing__ method 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(hasattr(UserDict, "__missing__"), False) 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test several cases: 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # (D) subclass defines __missing__ method returning a value 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # (E) subclass defines __missing__ method raising RuntimeError 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # (F) subclass sets __missing__ instance variable (no effect) 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # (G) subclass doesn't define __missing__ at a all 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class D(UserDict.UserDict): 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __missing__(self, key): 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 42 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d = D({1: 2, 3: 4}) 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(d[1], 2) 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(d[3], 4) 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(2, d) 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(2, d.keys()) 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(d[2], 42) 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class E(UserDict.UserDict): 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __missing__(self, key): 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise RuntimeError(key) 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao e = E() 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao e[42] 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except RuntimeError, err: 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(err.args, (42,)) 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("e[42] didn't raise RuntimeError") 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class F(UserDict.UserDict): 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self): 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # An instance variable __missing__ should have no effect 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.__missing__ = lambda key: None 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao UserDict.UserDict.__init__(self) 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f = F() 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f[42] 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except KeyError, err: 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(err.args, (42,)) 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("f[42] didn't raise KeyError") 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class G(UserDict.UserDict): 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao g = G() 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao g[42] 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except KeyError, err: 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(err.args, (42,)) 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("g[42] didn't raise KeyError") 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao########################## 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Test Dict Mixin 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass SeqDict(UserDict.DictMixin): 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Dictionary lookalike implemented with lists. 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Used to test and demonstrate DictMixin 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """ 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, other=None, **kwargs): 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.keylist = [] 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.valuelist = [] 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if other is not None: 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for (key, value) in other: 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self[key] = value 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for (key, value) in kwargs.iteritems(): 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self[key] = value 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getitem__(self, key): 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao i = self.keylist.index(key) 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise KeyError 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self.valuelist[i] 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __setitem__(self, key, value): 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao i = self.keylist.index(key) 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.valuelist[i] = value 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.keylist.append(key) 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.valuelist.append(value) 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __delitem__(self, key): 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao i = self.keylist.index(key) 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise KeyError 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.keylist.pop(i) 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.valuelist.pop(i) 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def keys(self): 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return list(self.keylist) 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def copy(self): 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d = self.__class__() 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for key, value in self.iteritems(): 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d[key] = value 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return d 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @classmethod 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def fromkeys(cls, keys, value=None): 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d = cls() 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for key in keys: 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d[key] = value 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return d 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass UserDictMixinTest(mapping_tests.TestMappingProtocol): 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type2test = SeqDict 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_all(self): 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ## Setup test and verify working of the test class 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # check init 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = SeqDict() 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # exercise setitem 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s[10] = 'ten' 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s[20] = 'twenty' 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s[30] = 'thirty' 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # exercise delitem 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del s[20] 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # check getitem and setitem 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s[10], 'ten') 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # check keys() and delitem 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.keys(), [10, 30]) 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ## Now, test the DictMixin methods one by one 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # has_key 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(s.has_key(10)) 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(not s.has_key(20)) 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # __contains__ 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(10, s) 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(20, s) 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # __iter__ 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual([k for k in s], [10, 30]) 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # __len__ 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(s), 2) 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # iteritems 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(list(s.iteritems()), [(10,'ten'), (30, 'thirty')]) 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # iterkeys 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(list(s.iterkeys()), [10, 30]) 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # itervalues 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(list(s.itervalues()), ['ten', 'thirty']) 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # values 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.values(), ['ten', 'thirty']) 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # items 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.items(), [(10,'ten'), (30, 'thirty')]) 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # get 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.get(10), 'ten') 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.get(15,'fifteen'), 'fifteen') 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.get(15), None) 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # setdefault 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.setdefault(40, 'forty'), 'forty') 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.setdefault(10, 'null'), 'ten') 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del s[40] 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pop 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.pop(10), 'ten') 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(10, s) 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s[10] = 'ten' 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.pop("x", 1), 1) 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s["x"] = 42 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.pop("x", 1), 42) 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # popitem 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k, v = s.popitem() 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(k, s) 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s[k] = v 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # clear 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.clear() 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(s), 0) 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # empty popitem 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(KeyError, s.popitem) 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # update 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.update({10: 'ten', 20:'twenty'}) 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s[10], 'ten') 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s[20], 'twenty') 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # cmp 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s, {10: 'ten', 20:'twenty'}) 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t = SeqDict() 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t[20] = 'twenty' 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t[10] = 'ten' 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s, t) 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(): 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.run_unittest( 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao UserDictTest, 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao UserDictMixinTest 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__": 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_main() 351