public void NoExceptionIfExistingObjectDoesntAndNoBroker()
        {
            MockBuilderContext context = CreateContext();
            NamedTypeBuildKey buildKey = NamedTypeBuildKey.Make<OneEventPublisher>();
            EventBrokerInfoPolicy policy = new EventBrokerInfoPolicy();
            policy.AddPublication("paste", "Pasting");
            context.Policies.Set<IEventBrokerInfoPolicy>(policy, buildKey);

            context.ExecuteBuildUp(buildKey, null);
            // No assert needed, if we got here, we're ok            
        }
Beispiel #2
0
        /// <summary>
        ///     Called during the chain of responsibility for a build operation. The PreBuildUp
        ///     method is called when the chain is being executed in the forward direction.
        /// </summary>
        /// <remarks>   Sander.struijk, 14.05.2014. </remarks>
        /// <param name="context">  Context of the build operation. </param>
        public override void PreBuildUp(IBuilderContext context)
        {
            if (context.Policies.Get <IEventBrokerInfoPolicy>(context.BuildKey) == null)
            {
                var policy = new EventBrokerInfoPolicy();
                context.Policies.Set <IEventBrokerInfoPolicy>(policy, context.BuildKey);

                AddPublicationsToPolicy(context.BuildKey, policy);
                AddSubscriptionsToPolicy(context.BuildKey, policy);
            }
        }
        public override void PreBuildUp(IBuilderContext context)
        {
            if (context.Policies.Get<IEventBrokerInfoPolicy>(context.BuildKey) == null)
            {
                EventBrokerInfoPolicy policy = new EventBrokerInfoPolicy();
                context.Policies.Set<IEventBrokerInfoPolicy>(policy, context.BuildKey);

                AddPublicationsToPolicy(context.BuildKey, policy);
                AddSubscriptionsToPolicy(context.BuildKey, policy);
            }
        }
Beispiel #4
0
 /// <summary>   Adds the subscriptions to policy to 'policy'. </summary>
 /// <remarks>   Sander.struijk, 14.05.2014. </remarks>
 /// <param name="buildKey"> The build key. </param>
 /// <param name="policy">   The policy. </param>
 private void AddSubscriptionsToPolicy(NamedTypeBuildKey buildKey, EventBrokerInfoPolicy policy)
 {
     foreach (MethodInfo method in buildKey.Type.GetMethods())
     {
         var attrs =
             (SubscribesToAttribute[])
             method.GetCustomAttributes(typeof(SubscribesToAttribute), true);
         if (attrs.Length > 0)
         {
             policy.AddSubscription(attrs[0].EventName, method);
         }
     }
 }
 private void AddSubscriptionsToPolicy(NamedTypeBuildKey buildKey, EventBrokerInfoPolicy policy)
 {
     foreach(MethodInfo method in buildKey.Type.GetMethods())
     {
         SubscribesToAttribute[] attrs =
             (SubscribesToAttribute[])
             method.GetCustomAttributes(typeof(SubscribesToAttribute), true);
         if(attrs.Length > 0)
         {
             policy.AddSubscription(attrs[0].EventName, method);
         }
     }
 }
 private void AddPublicationsToPolicy(NamedTypeBuildKey buildKey, EventBrokerInfoPolicy policy)
 {
     Type t = buildKey.Type;
     foreach(EventInfo eventInfo in t.GetEvents())
     {
         PublishesAttribute[] attrs =
             (PublishesAttribute[])eventInfo.GetCustomAttributes(typeof(PublishesAttribute), true);
         if(attrs.Length > 0)
         {
             policy.AddPublication(attrs[0].EventName, eventInfo.Name);
         }
     }
 }
Beispiel #7
0
        /// <summary>   Adds the publications to policy to 'policy'. </summary>
        /// <remarks>   Sander.struijk, 14.05.2014. </remarks>
        /// <param name="buildKey"> The build key. </param>
        /// <param name="policy">   The policy. </param>
        private void AddPublicationsToPolicy(NamedTypeBuildKey buildKey, EventBrokerInfoPolicy policy)
        {
            var t = buildKey.Type;

            foreach (EventInfo eventInfo in t.GetEvents())
            {
                var attrs =
                    (PublishesAttribute[])eventInfo.GetCustomAttributes(typeof(PublishesAttribute), true);
                if (attrs.Length > 0)
                {
                    policy.AddPublication(attrs[0].EventName, eventInfo.Name);
                }
            }
        }
        public void StrategyDoesntOverwriteAnExistingPolicy()
        {
            MockBuilderContext context = CreateContext();

            NamedTypeBuildKey buildKey = NamedTypeBuildKey.Make<object>();
            EventBrokerInfoPolicy policy = new EventBrokerInfoPolicy();
            context.Policies.Set<IEventBrokerInfoPolicy>(policy, buildKey);

            context.ExecuteBuildUp(buildKey, null);

            IEventBrokerInfoPolicy setPolicy =
                context.Policies.Get<IEventBrokerInfoPolicy>(buildKey);
            Assert.AreSame(policy, setPolicy);
        }
        public void ExceptionIfNoWireupNeededAndNoBroker()
        {
            MockBuilderContext context = CreateContext();
            NamedTypeBuildKey buildKey = NamedTypeBuildKey.Make<object>();
            EventBrokerInfoPolicy policy = new EventBrokerInfoPolicy();
            context.Policies.Set<IEventBrokerInfoPolicy>(policy, buildKey);

            try
            {
                context.ExecuteBuildUp(buildKey, new object());
            }
            catch (Exception)
            {
                // If we got here, we're ok            
                return;
            }
            Assert.Fail("No exception Occurred");
        }
        public void StrategyThrowsIfWireupIsNeededAndBrokerNotInLocator()
        {
            MockBuilderContext context = CreateContext();
            NamedTypeBuildKey buildKey = NamedTypeBuildKey.Make<OneEventPublisher>();
            EventBrokerInfoPolicy policy = new EventBrokerInfoPolicy();
            policy.AddPublication("paste", "Pasting");
            context.Policies.Set<IEventBrokerInfoPolicy>(policy, buildKey);

            try
            {
                OneEventPublisher existing = new OneEventPublisher();
                context.ExecuteBuildUp(buildKey, existing);
            }
            catch (Exception)
            {
                // If we got here, we're Ok, this is expected.
                return;
            }
            Assert.Fail("No exception occured");
        }
        public void StrategyProperlyWiresEvents()
        {
            MockBuilderContext context = CreateContext();
            NamedTypeBuildKey buildKey = NamedTypeBuildKey.Make<ClipboardManager>();

            EventBroker broker = new EventBroker();
            var brokerLifetime = new ExternallyControlledLifetimeManager();
            brokerLifetime.SetValue(broker);
            context.Policies.Set<ILifetimePolicy>(brokerLifetime, NamedTypeBuildKey.Make<EventBroker>());

            EventBrokerInfoPolicy policy = new EventBrokerInfoPolicy();
            policy.AddPublication("cut", "Cut");
            policy.AddPublication("copy", "Copy");
            policy.AddPublication("paste", "Paste");

            policy.AddSubscription("copy", typeof(ClipboardManager).GetMethod("OnCopy"));
            policy.AddSubscription("clipboard data available",
                                   typeof(ClipboardManager).GetMethod("OnClipboardDataAvailable"));

            context.Policies.Set<IEventBrokerInfoPolicy>(policy, buildKey);

            ClipboardManager existing = new ClipboardManager();

            context.ExecuteBuildUp(buildKey, existing);

            List<string> registeredEvents = new List<string>(broker.RegisteredEvents);
            registeredEvents.Sort();

            List<string> expectedEvents = new List<string>(new string[]
            {
                "cut",
                "copy",
                "paste",
                "clipboard data available"
            });
            expectedEvents.Sort();

            CollectionAssert.AreEqual(expectedEvents, registeredEvents);
        }