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 }
/// <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); } }
/// <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); } } }
/// <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); }