Пример #1
0
        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);
        }
Пример #2
0
        public void ReflectingOverObjectWithoutSubscriptionResultsInEmptyPolicy()
        {
            MockBuilderContext context  = CreateContext();
            NamedTypeBuildKey  buildKey = NamedTypeBuildKey.Make <object>();

            context.ExecuteBuildUp(buildKey, null);

            IEventBrokerInfoPolicy policy = context.Policies.Get <IEventBrokerInfoPolicy>(buildKey);

            Assert.IsNotNull(policy);

            List <PublicationInfo>  publications  = new List <PublicationInfo>(policy.Publications);
            List <SubscriptionInfo> subscriptions = new List <SubscriptionInfo>(policy.Subscriptions);

            Assert.AreEqual(0, publications.Count);
            Assert.AreEqual(0, subscriptions.Count);
        }
Пример #3
0
        public void ReflectingOverSubscribingTypeResultsInCorrectPolicy()
        {
            MockBuilderContext context  = CreateContext();
            NamedTypeBuildKey  buildKey = NamedTypeBuildKey.Make <OneEventSubscriber>();

            context.ExecuteBuildUp(buildKey, null);

            IEventBrokerInfoPolicy policy = context.Policies.Get <IEventBrokerInfoPolicy>(buildKey);

            Assert.IsNotNull(policy);

            List <PublicationInfo>  publications  = new List <PublicationInfo>(policy.Publications);
            List <SubscriptionInfo> subscriptions = new List <SubscriptionInfo>(policy.Subscriptions);

            Assert.AreEqual(0, publications.Count);

            CollectionAssert.AreEqual(new SubscriptionInfo[] { new SubscriptionInfo("copy", typeof(OneEventSubscriber).GetMethod("OnCopy")) }, subscriptions);
        }
Пример #4
0
        public void ReflectingOverPublishingTypeResultsInCorrectPolicy()
        {
            MockBuilderContext context  = CreateContext();
            NamedTypeBuildKey  buildKey = NamedTypeBuildKey.Make <OneEventPublisher>();

            context.ExecuteBuildUp(buildKey, null);

            IEventBrokerInfoPolicy policy = context.Policies.Get <IEventBrokerInfoPolicy>(buildKey);

            Assert.IsNotNull(policy);

            List <PublicationInfo>  publications  = new List <PublicationInfo>(policy.Publications);
            List <SubscriptionInfo> subscriptions = new List <SubscriptionInfo>(policy.Subscriptions);

            Assert.AreEqual(0, subscriptions.Count);

            CollectionAssert.AreEqual(new PublicationInfo[] { new PublicationInfo("paste", "Pasting") }, publications);
        }
Пример #5
0
        public void OneTypeCanPublishAndSubscribeMultipleTimes()
        {
            MockBuilderContext context  = CreateContext();
            NamedTypeBuildKey  buildKey = NamedTypeBuildKey.Make <ClipboardManager>();

            context.ExecuteBuildUp(buildKey, null);

            IEventBrokerInfoPolicy policy = context.Policies.Get <IEventBrokerInfoPolicy>(buildKey);

            Assert.IsNotNull(policy);

            List <PublicationInfo>  publications  = new List <PublicationInfo>(policy.Publications);
            List <SubscriptionInfo> subscriptions = new List <SubscriptionInfo>(policy.Subscriptions);

            publications.Sort(
                delegate(PublicationInfo a, PublicationInfo b)
            {
                return(a.PublishedEventName.CompareTo(b.PublishedEventName));
            });

            subscriptions.Sort(
                delegate(SubscriptionInfo a, SubscriptionInfo b)
            {
                return(a.PublishedEventName.CompareTo(b.PublishedEventName));
            });

            CollectionAssert.AreEqual(
                new PublicationInfo[]
            {
                new PublicationInfo("copy", "Copy"),
                new PublicationInfo("cut", "Cut"),
                new PublicationInfo("paste", "Paste"),
            },
                publications);

            CollectionAssert.AreEqual(
                new SubscriptionInfo[]
            {
                new SubscriptionInfo("clipboard data available", typeof(ClipboardManager).GetMethod("OnClipboardDataAvailable")),
                new SubscriptionInfo("copy", typeof(ClipboardManager).GetMethod("OnCopy")),
            },
                subscriptions);
        }
 public override void PreBuildUp(IBuilderContext context)
 {
     if (context.Existing != null)
     {
         IEventBrokerInfoPolicy policy =
             context.Policies.Get <IEventBrokerInfoPolicy>(context.BuildKey);
         if (policy != null)
         {
             EventBroker broker = GetBroker(context);
             foreach (PublicationInfo pub in policy.Publications)
             {
                 broker.RegisterPublisher(pub.PublishedEventName, context.Existing, pub.EventName);
             }
             foreach (SubscriptionInfo sub in policy.Subscriptions)
             {
                 broker.RegisterSubscriber(sub.PublishedEventName,
                                           (EventHandler)Delegate.CreateDelegate(
                                               typeof(EventHandler),
                                               context.Existing,
                                               sub.Subscriber));
             }
         }
     }
 }