public void ChildCommunicatorAddressCreated()
        {
            var communicatorParent = new MockParentEventCommunicator();
            var communicatorChild = new MockChildEventCommunicator(communicatorParent);

            var addressChild = new EventCommunicatorAddress(communicatorChild);

            Assert.False(string.IsNullOrEmpty(addressChild.AddressString));
        }
        public void GetRelationshipBetweenChildAndChild()
        {
            var communicatorParent = new MockParentEventCommunicator();
            var communicatorChild1 = new MockChildEventCommunicator(communicatorParent);
            var communicatorChild2 = new MockChildEventCommunicator(communicatorParent);

            var addressChild1 = new EventCommunicatorAddress(communicatorChild1);
            var addressChild2 = new EventCommunicatorAddress(communicatorChild2);

            var relationshipChild2ToChild1 = addressChild1.RecognizeRelationship(addressChild2);
            var relationshipChild1ToChild2 = addressChild2.RecognizeRelationship(addressChild1);

            Assert.Equal(EventCommunicatorsRelationship.Sibling, relationshipChild2ToChild1);
            Assert.Equal(EventCommunicatorsRelationship.Sibling, relationshipChild1ToChild2);
        }
        public void GetRelationshipBetweenChildAndThreeLevelChildSiblingBranch()
        {
            var communicatorParent = new MockParentEventCommunicator();
            var communicatorChild1 = new MockChildEventCommunicator(communicatorParent);
            var communicatorChild2 = new MockChildEventCommunicator(communicatorParent);
            var communicatorChild2Child = new MockChildEventCommunicator(communicatorChild2);
            var communicatorChild2ChildChild = new MockChildEventCommunicator(communicatorChild2Child);

            var addressChild1 = new EventCommunicatorAddress(communicatorChild1);
            var addressChild2 = new EventCommunicatorAddress(communicatorChild2ChildChild);

            var relationshipChild2ToChild1 = addressChild1.RecognizeRelationship(addressChild2);
            var relationshipChild1ToChild2 = addressChild2.RecognizeRelationship(addressChild1);

            Assert.Equal(EventCommunicatorsRelationship.SiblingChild, relationshipChild2ToChild1);
            Assert.Equal(EventCommunicatorsRelationship.Other, relationshipChild1ToChild2);
        }
        public void RemoveLastOrNothingChild()
        {
            var communicatorParent = new MockParentEventCommunicator();
            var communicatorChild = new MockChildEventCommunicator(communicatorParent);

            var addressChild = new EventCommunicatorAddress(communicatorChild);

            var countBefore = addressChild.Count;
            addressChild.RemoveLastOrNothing();
            var countAfter = addressChild.Count;

            Assert.Equal(2, countBefore);
            Assert.Equal(1, countAfter);
        }
        public void RemoveLast()
        {
            var communicator = new MockParentEventCommunicator();
            var child = new MockChildEventCommunicator(communicator);

            var address = new EventCommunicatorAddress(child);

            var addrString = address.AddressString;
            address.RemoveLast();

            Assert.NotEqual(addrString, address.AddressString);
        }
        public void GoodPerformance()
        {
            var communicatorParent = new MockParentEventCommunicator();
            var communicatorChild2 = new MockChildEventCommunicator(communicatorParent);
            var communicatorChild2Child = new MockChildEventCommunicator(communicatorChild2);
            var communicatorChild2ChildChild = new MockChildEventCommunicator(communicatorChild2Child);

            var rootAddr = new EventCommunicatorAddress(communicatorParent);

            var sw = Stopwatch.StartNew();
            for (int i = 0; i < 10000; i++)
            {
                var addr = new EventCommunicatorAddress(communicatorChild2ChildChild);
                var relToRoot = addr.RecognizeRelationship(rootAddr);
                var relFromRoot = rootAddr.RecognizeRelationship(addr);
            }
            sw.Stop();
            Assert.True(sw.ElapsedMilliseconds < 150);
        }
        public void GetRelationshipBetweenParentAndChildClosest()
        {
            var communicatorParent = new MockParentEventCommunicator();
            var communicatorChild = new MockChildEventCommunicator(communicatorParent);

            var addressParent = new EventCommunicatorAddress(communicatorParent);
            var addressChild = new EventCommunicatorAddress(communicatorChild);

            var relationshipChildToParent = addressParent.RecognizeRelationship(addressChild);
            var relationshipParentToChild = addressChild.RecognizeRelationship(addressParent);

            Assert.Equal(EventCommunicatorsRelationship.ClosestChild | EventCommunicatorsRelationship.Child, relationshipChildToParent);
            Assert.Equal(EventCommunicatorsRelationship.Parent | EventCommunicatorsRelationship.ClosestParent, relationshipParentToChild);
        }
        public void GetRelationshipBetweenChildAndTwoLevelChildSameBranch()
        {
            var communicatorParent = new MockParentEventCommunicator();
            var communicatorChild1 = new MockChildEventCommunicator(communicatorParent);
            var communicatorChild2 = new MockChildEventCommunicator(communicatorParent);
            var communicatorChild2Child = new MockChildEventCommunicator(communicatorChild2);

            var addressChild1 = new EventCommunicatorAddress(communicatorChild2);
            var addressChild2 = new EventCommunicatorAddress(communicatorChild2Child);

            var relationshipChild2ToChild1 = addressChild1.RecognizeRelationship(addressChild2);
            var relationshipChild1ToChild2 = addressChild2.RecognizeRelationship(addressChild1);

            Assert.Equal(EventCommunicatorsRelationship.Child | EventCommunicatorsRelationship.ClosestChild, relationshipChild2ToChild1);
            Assert.Equal(EventCommunicatorsRelationship.Parent | EventCommunicatorsRelationship.ClosestParent, relationshipChild1ToChild2);
        }