diff --git a/weakreflist/testweakreflist.py b/weakreflist/testweakreflist.py index e0cfc1a..2a53634 100644 --- a/weakreflist/testweakreflist.py +++ b/weakreflist/testweakreflist.py @@ -15,19 +15,22 @@ class objectFake(object): def setUp(self): self.wrList = WeakList() + def ref_item(self, index): + return list.__getitem__(self.wrList, index) + def test_it_is_instance_of_list(self): self.assertIsInstance(self.wrList, list) def test_it_store_a_weakref_ref(self): myFake = self.objectFake() self.wrList.append(myFake) - self.assertIsInstance(list.__getitem__(self.wrList, 0), weakref.ReferenceType) + self.assertIsInstance(self.ref_item(0), weakref.ReferenceType) def test_if_a_weakref_already_stored_it_reuse_it(self): myFake = self.objectFake() self.wrList.append(myFake) self.wrList.append(myFake) - self.assertEqual(list.__getitem__(self.wrList, 0), list.__getitem__(self.wrList, 1)) + self.assertEqual(self.ref_item(0), self.ref_item(1)) self.assertIs(self.wrList[0], self.wrList[1]) def test_it_knows_if_it_contains_an_object(self): @@ -114,7 +117,21 @@ def test_it_supports_slice_on_objects(self): myFake3 = self.objectFake() myFake4 = self.objectFake() wrList = WeakList([myFake1, myFake2, myFake3, myFake4]) - self.assertEqual([myFake2, myFake3], list(wrList[1:3])) + self.assertEqual(WeakList([myFake2, myFake3]), wrList[1:3]) + + def test_it_can_set_slice_on_int(self): + self.wrList[0:] = range(3) + self.assertEqual(self.wrList[1:], [1, 2]) + self.assertEqual(3, len(self.wrList)) + + def test_it_can_set_slice_on_objets(self): + myFake0 = self.objectFake() + myFake1 = self.objectFake() + self.wrList.append(myFake0) + self.wrList[1:2] = [myFake0, myFake1] + self.assertEqual(self.ref_item(1)(), myFake0) + self.assertEqual(self.ref_item(2)(), myFake1) + self.assertEqual(3, len(self.wrList)) diff --git a/weakreflist/weakreflist.py b/weakreflist/weakreflist.py index 5c34f72..faabb77 100644 --- a/weakreflist/weakreflist.py +++ b/weakreflist/weakreflist.py @@ -31,7 +31,11 @@ def __getslice__(self, from_index, to_index): return self.__getitem__(slice(from_index, to_index)) def __setitem__(self, index, item): - return list.__setitem__(self, index, self.make_ref(item)) + items = isinstance(index, slice) and map(self.make_ref, item) or self.make_ref(item) + return list.__setitem__(self, index, items) + + def __setslice__(self, from_index, to_index, items): + return self.__setitem__(slice(from_index, to_index), items) def __iter__(self): return iter(self[index] for index in range(len(self)))