def test_lazy_update(self): d = LazyDict() d.set_stub(4, lambda x: x) d.update(LazyDict({1: 100})) d.update(LazyDict({2: 20})) d.update({4: 5}) d.update(LazyDict({1: 1, 2: 2, 3: 3})) self.assertEqual(d, {1: 1, 2: 2, 3: 3, 4: 5}) d.update() self.assertEqual(d, {1: 1, 2: 2, 3: 3, 4: 5}) self.assertRaises((TypeError, AttributeError), d.update, None) class SimpleUserDict: def __init__(self): self.d = {1: 1, 2: 2, 3: 3} def keys(self): return self.d.keys() def __getitem__(self, i): return self.d[i] d.clear() d.update(SimpleUserDict()) self.assertEqual(d, {1: 1, 2: 2, 3: 3})
def test_lazy_clear(self): d = LazyDict({1:1, 2:2, 3:3}) d.set_stub(4, lambda x:x) d.clear() self.assertEqual(d, {}) self.assertEqual(set(d.keys()), set()) self.assertEqual(set(d.values()), set()) self.assertRaises(TypeError, d.clear, None)
def test_lazy_clear(self): d = LazyDict({1: 1, 2: 2, 3: 3}) d.set_stub(4, lambda x: x) d.clear() self.assertEqual(d, {}) self.assertEqual(set(d.keys()), set()) self.assertEqual(set(d.values()), set()) self.assertRaises(TypeError, d.clear, None)
def test_lazy_update(self): d = LazyDict() d.set_stub(4, lambda x:x) d.update(LazyDict({1:100})) d.update(LazyDict({2:20})) d.update({4:5}) d.update(LazyDict({1:1, 2:2, 3:3})) self.assertEqual(d, {1:1, 2:2, 3:3, 4:5}) d.update() self.assertEqual(d, {1:1, 2:2, 3:3, 4:5}) self.assertRaises((TypeError, AttributeError), d.update, None) class SimpleUserDict: def __init__(self): self.d = {1:1, 2:2, 3:3} def keys(self): return self.d.keys() def __getitem__(self, i): return self.d[i] d.clear() d.update(SimpleUserDict()) self.assertEqual(d, {1:1, 2:2, 3:3})
def test_update(self): d = LazyDict() d.update({1: 100}) d.update({2: 20}) d.update({1: 1, 2: 2, 3: 3}) self.assertEqual(d, {1: 1, 2: 2, 3: 3}) d.update() self.assertEqual(d, {1: 1, 2: 2, 3: 3}) self.assertRaises((TypeError, AttributeError), d.update, None) class SimpleUserDict: def __init__(self): self.d = {1: 1, 2: 2, 3: 3} def keys(self): return self.d.keys() def __getitem__(self, i): return self.d[i] d.clear() d.update(SimpleUserDict()) self.assertEqual(d, {1: 1, 2: 2, 3: 3}) class Exc(Exception): pass d.clear() class FailingUserDict: def keys(self): raise Exc self.assertRaises(Exc, d.update, FailingUserDict()) class FailingUserDict: def keys(self): class BogonIter: def __init__(self): self.i = 1 def __iter__(self): return self def __next__(self): if self.i: self.i = 0 return "a" raise Exc next = __next__ return BogonIter() def __getitem__(self, key): return key self.assertRaises(Exc, d.update, FailingUserDict()) class FailingUserDict: def keys(self): class BogonIter: def __init__(self): self.i = ord("a") def __iter__(self): return self def __next__(self): if self.i <= ord("z"): rtn = chr(self.i) self.i += 1 return rtn raise StopIteration next = __next__ return BogonIter() def __getitem__(self, key): raise Exc self.assertRaises(Exc, d.update, FailingUserDict()) class badseq: def __iter__(self): return self def __next__(self): raise Exc() next = __next__ self.assertRaises(Exc, {}.update, badseq()) self.assertRaises(ValueError, {}.update, [(1, 2, 3)])
def test_clear(self): d = LazyDict({1: 1, 2: 2, 3: 3}) d.clear() self.assertEqual(d, {}) self.assertRaises(TypeError, d.clear, None)
def test_update(self): d = LazyDict() d.update({1:100}) d.update({2:20}) d.update({1:1, 2:2, 3:3}) self.assertEqual(d, {1:1, 2:2, 3:3}) d.update() self.assertEqual(d, {1:1, 2:2, 3:3}) self.assertRaises((TypeError, AttributeError), d.update, None) class SimpleUserDict: def __init__(self): self.d = {1:1, 2:2, 3:3} def keys(self): return self.d.keys() def __getitem__(self, i): return self.d[i] d.clear() d.update(SimpleUserDict()) self.assertEqual(d, {1:1, 2:2, 3:3}) class Exc(Exception): pass d.clear() class FailingUserDict: def keys(self): raise Exc self.assertRaises(Exc, d.update, FailingUserDict()) class FailingUserDict: def keys(self): class BogonIter: def __init__(self): self.i = 1 def __iter__(self): return self def __next__(self): if self.i: self.i = 0 return 'a' raise Exc next = __next__ return BogonIter() def __getitem__(self, key): return key self.assertRaises(Exc, d.update, FailingUserDict()) class FailingUserDict: def keys(self): class BogonIter: def __init__(self): self.i = ord('a') def __iter__(self): return self def __next__(self): if self.i <= ord('z'): rtn = chr(self.i) self.i += 1 return rtn raise StopIteration next = __next__ return BogonIter() def __getitem__(self, key): raise Exc self.assertRaises(Exc, d.update, FailingUserDict()) class badseq(object): def __iter__(self): return self def __next__(self): raise Exc() next = __next__ self.assertRaises(Exc, {}.update, badseq()) self.assertRaises(ValueError, {}.update, [(1, 2, 3)])
def test_clear(self): d = LazyDict({1:1, 2:2, 3:3}) d.clear() self.assertEqual(d, {}) self.assertRaises(TypeError, d.clear, None)