Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
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);
        }
Esempio n. 11
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);
        }
Esempio n. 12
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);
        }
Esempio n. 13
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);
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
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 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");
        }