示例#1
0
        public void EmptyNestGetter()
        {
            var nest = new Nest();

            nest.GetNested <Egg>();
            nest.Remove <Egg>();
        }
示例#2
0
        public void SetNest(Nest nest)
        {
            NestEggEventType type;
            var lastNest = Nest;

            Nest = nest;
            if (lastNest != null && nest != null)
            {
                type = NestEggEventType.Moved;
            }
            else if (lastNest == null && nest != null)
            {
                type = NestEggEventType.Added;
            }
            else if (lastNest != null && nest == null)
            {
                type = NestEggEventType.Removed;
            }
            else
            {
                return;
            }

            InvokeKnock(new NestEggEventArgs {
                Self = this, Type = type, From = lastNest, To = nest, Bubble = true
            });
        }
示例#3
0
        public void NestDoubleAddError()
        {
            var egg  = new TestEgg();
            var nest = new Nest();

            nest.Add(egg);
            Assert.Throws <ContainNestException>(() => nest.Add(egg));
        }
示例#4
0
        public void EggAddEvent()
        {
            var nest = new Nest();
            var egg  = new TestEgg();
            var flag = false;

            egg.Knock += args => flag = args.Type == NestEggEventType.Added;
            nest.Add(egg);
            Assert.True(flag);
        }
示例#5
0
        public void EggBubleEvent()
        {
            var nest = new Nest();
            var egg  = new TestEgg();
            var flag = false;

            nest.Knock += args => flag = args.Type == NestEggEventType.Custom && args.Self == egg;
            nest.Add(egg);
            egg.InvokeTest();
            Assert.True(flag);
        }
示例#6
0
        public void EggMoveEvent()
        {
            var nest  = new Nest();
            var nest2 = new Nest();
            var egg   = new TestEgg();
            var flag  = false;

            egg.Knock += args => flag = args.Type == NestEggEventType.Moved && args.From == nest && args.To == nest2;
            nest.Add(egg);
            nest.MoveTo(egg, nest2);
            Assert.True(flag);
            Assert.IsNotNull(nest2.GetNested <TestEgg>());
        }
示例#7
0
        public void MoveTo(Egg egg, Nest nest)
        {
            if (egg == null)
            {
                throw new NullRefNestException(string.Format("Nest {0} got empty egg", GetName()));
            }

            if (nest == null)
            {
                throw new NullRefNestException(string.Format("Nest {0} got empty nest", GetName()));
            }

            if (!_eggs.Contains(egg))
            {
                throw new ContainNestException(string.Format("Nest {0} does not contains egg {1}", GetName(), egg.GetFullName()));
            }

            _eggs.Remove(egg);
            nest._eggs.Add(egg);
            egg.Knock -= EggOnKnock;
            egg.Knock += nest.EggOnKnock;
            egg.SetNest(nest);
        }
示例#8
0
        public void EmptyNestRemoveError2()
        {
            var nest = new Nest();

            Assert.Throws <NullRefNestException>(() => nest.Remove(null));
        }
示例#9
0
        public void EmptyNestRemoveError()
        {
            var nest = new Nest();

            Assert.Throws <ContainNestException>(() => nest.Remove(new Egg()));
        }
示例#10
0
        public void NestNullAddError()
        {
            var nest = new Nest();

            Assert.Throws <NullRefNestException>(() => nest.Add(null));
        }