示例#1
0
        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"]);
        }
示例#2
0
        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"]);
        }