public void LifetimeStrategyDefaultsToTransient() { MockBuilderContext context = CreateContext(); var key = new NamedTypeBuildKey <object>(); object result = context.ExecuteBuildUp(key, null); object result2 = context.ExecuteBuildUp(key, null); Assert.NotNull(result); Assert.NotNull(result2); Assert.NotSame(result, result2); }
public void SingletonPolicyAffectsLifetime() { MockBuilderContext context = CreateContext(); var key = new NamedTypeBuildKey <object>(); context.Policies.Set(key.Type, key.Name, typeof(ILifetimePolicy), new ContainerControlledLifetimeManager()); object result = context.ExecuteBuildUp(key, null); object result2 = context.ExecuteBuildUp(key, null); Assert.IsNotNull(result); Assert.AreSame(result, result2); }
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 }
public void BuildIgnoresClassWithoutInterface() { var strategy = new BuilderAwareStrategy(); var context = new MockBuilderContext(); var obj = new Ignorant(); context.Strategies.Add(strategy); context.ExecuteBuildUp(new NamedTypeBuildKey <Ignorant>(), obj); Assert.False(obj.OnBuiltUpWasCalled); Assert.False(obj.OnTearingDownWasCalled); }
public void BuildChecksConcreteTypeAndNotRequestedType() { var strategy = new BuilderAwareStrategy(); var context = new MockBuilderContext(); var obj = new Aware(); context.Strategies.Add(strategy); context.ExecuteBuildUp(new NamedTypeBuildKey <Aware>(), obj); Assert.True(obj.OnBuiltUpWasCalled); Assert.False(obj.OnTearingDownWasCalled); }
public void LifetimeStrategyUsesFactoryToGetLifetimePolicyForGenericType() { MockBuilderContext context = CreateContext(); var openKey = new NamedTypeBuildKey(typeof(YetAnotherDummyInterfaceImplementation <>)); context.PersistentPolicies.Set <ILifetimeFactoryPolicy>( new LifetimeFactoryPolicy <RecoverableLifetime>(), openKey); context.ExecuteBuildUp(new NamedTypeBuildKey <YetAnotherDummyInterfaceImplementation <string> >(), null); context.ExecuteBuildUp(new NamedTypeBuildKey <YetAnotherDummyInterfaceImplementation <int> >(), null); ILifetimePolicy stringLifetime = context.Policies.GetNoDefault <ILifetimePolicy>(new NamedTypeBuildKey(typeof(YetAnotherDummyInterfaceImplementation <string>)), false); ILifetimePolicy intLifetime = context.Policies.GetNoDefault <ILifetimePolicy>(new NamedTypeBuildKey(typeof(YetAnotherDummyInterfaceImplementation <int>)), false); Assert.NotNull(stringLifetime); Assert.NotNull(intLifetime); AssertExtensions.IsInstanceOfType(stringLifetime, typeof(RecoverableLifetime)); AssertExtensions.IsInstanceOfType(intLifetime, typeof(RecoverableLifetime)); Assert.NotSame(stringLifetime, intLifetime); }
public void BuildCallsClassWithInterface() { var strategy = new BuilderAwareStrategy(); var context = new MockBuilderContext(); var obj = new Aware(); context.Strategies.Add(strategy); context.ExecuteBuildUp(new NamedTypeBuildKey <Aware>(), obj); Assert.True(obj.OnBuiltUpWasCalled); Assert.False(obj.OnTearingDownWasCalled); Assert.Equal(new NamedTypeBuildKey <Aware>(), obj.OnBuiltUpBuildKey); }
public void StrategyGetsBuildPlanFromPolicySet() { MockBuilderContext context = new MockBuilderContext(); context.Strategies.Add(new BuildPlanStrategy()); object instance = new object(); ReturnInstanceBuildPlan plan = new ReturnInstanceBuildPlan(instance); context.Policies.Set(typeof(object), null, typeof(IBuildPlanPolicy), plan); object result = context.ExecuteBuildUp(new NamedTypeBuildKey <object>(), null); Assert.IsTrue(plan.BuildUpCalled); Assert.AreSame(instance, result); }
public void LifetimeStrategyAddsRecoveriesToContext() { MockBuilderContext context = CreateContext(); var key = new NamedTypeBuildKey <object>(); RecoverableLifetime recovery = new RecoverableLifetime(); context.PersistentPolicies.Set <ILifetimePolicy>(recovery, key); context.ExecuteBuildUp(key, null); Assert.Equal(1, context.RecoveryStack.Count); context.RecoveryStack.ExecuteRecovery(); Assert.True(recovery.WasRecovered); }
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 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); }
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); }
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); }
public void StrategyCreatesBuildPlanWhenItDoesntExist() { MockBuilderContext context = new MockBuilderContext(); context.Strategies.Add(new BuildPlanStrategy()); MockBuildPlanCreatorPolicy policy = new MockBuildPlanCreatorPolicy(); context.Policies.Set(null, null, typeof(IBuildPlanCreatorPolicy), policy); object result = context.ExecuteBuildUp(new NamedTypeBuildKey <object>(), null); Assert.IsNotNull(result); Assert.IsTrue(policy.PolicyWasCreated); var plan = context.Policies.GetOrDefault(typeof(IBuildPlanPolicy), new NamedTypeBuildKey(typeof(object)), out _); Assert.IsNotNull(plan); }
public void RecoveryIsExecutedOnException() { var recovery = new RecoveryObject(); MockBuilderContext context = GetContext(); context.RecoveryStack.Add(recovery); try { context.ExecuteBuildUp(new NamedTypeBuildKey <object>(), null); } catch (Exception) { // This is supposed to happen. } Assert.True(recovery.WasRecovered); }
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 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); }
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"); }