public void KeyedItemListAssignKeepsReferences() { var three = new MyKeyedInt("a", 3); var four = new MyKeyedInt("b", 4); var newFive = new MyKeyedInt("c", 5); KeyedItemList <MyKeyedInt> kil = new KeyedItemList <MyKeyedInt> { three, four }; KeyedItemList <MyKeyedInt> kil2 = new KeyedItemList <MyKeyedInt> { new MyKeyedInt("a", 3), four, newFive }; kil.Assign(kil2); Assert.Same(three, kil["a"]); Assert.Same(four, kil["b"]); Assert.Same(newFive, kil["c"]); }
public void KeyedItemListEventsAreCalled() { MyKeyedInt three = new MyKeyedInt("a", 3); MyKeyedInt four = new MyKeyedInt("b", 4); MyKeyedInt five = new MyKeyedInt("c", 5); MyKeyedInt ftwo = new MyKeyedInt("b", 42); KeyedItemList <MyKeyedInt> kil = new KeyedItemList <MyKeyedInt> { three, four }; KeyedItemList <MyKeyedInt> kil2 = new KeyedItemList <MyKeyedInt> { ftwo, five }; bool threeDeleted = false; bool othersDeleted = false; void deleteHandler(object sender, KeyedItemList <MyKeyedInt> .ItemDeletedArgs args) { Assert.Same(kil, sender); Assert.False(threeDeleted); Assert.False(othersDeleted); if (args.Key == "a" && object.ReferenceEquals(args.OldItem, three)) { threeDeleted = true; } else { othersDeleted = true; } } kil.ItemDeleted += deleteHandler; bool fiveAdded = false; bool othersAdded = false; void addHandler(object sender, KeyedItemList <MyKeyedInt> .ItemAddedArgs args) { Assert.Same(kil, sender); Assert.False(fiveAdded); Assert.False(othersAdded); if (args.Key == "c" && object.ReferenceEquals(args.NewItem, five)) { fiveAdded = true; } else { othersAdded = true; } } kil.ItemAdded += addHandler; bool fourUpdated = false; bool othersUpdated = false; void updateHandler(object sender, KeyedItemList <MyKeyedInt> .ItemUpdatedArgs args) { Assert.Same(kil, sender); Assert.False(fourUpdated); Assert.False(othersUpdated); if (args.Key == "b" && object.ReferenceEquals(args.Item, four)) { fourUpdated = true; } else { othersUpdated = true; } } kil.ItemUpdated += updateHandler; bool fourObjectUpdated = false; void fourUpdateHandler(object sender, MyKeyedInt.UpdatedArgs args) { Assert.False(fourObjectUpdated); fourObjectUpdated = true; } kil["b"].Updated += fourUpdateHandler; kil.Assign(kil2); Assert.True(threeDeleted); Assert.False(othersDeleted); Assert.True(fiveAdded); Assert.False(othersAdded); Assert.True(fourUpdated); Assert.False(othersUpdated); Assert.True(fourObjectUpdated); Assert.Equal(four, kil["b"]); Assert.Equal(new MyKeyedInt(42), four); Assert.Equal(five, kil["c"]); }