public void TargetType()
        {
            MockRepository   mocks  = new MockRepository();
            SideEffectObject target = new SideEffectObject();

            IObjectFactory factory = mocks.CreateMock <IObjectFactory>();

            using (mocks.Record())
            {
                Expect.Call(factory.IsPrototype(null)).Return(true);
                Expect.Call(factory.GetType(null)).Return(typeof(SideEffectObject));
            }

            using (mocks.Playback())
            {
                PrototypeTargetSource source = new PrototypeTargetSource();
                source.ObjectFactory = factory;
                Assert.AreEqual(target.GetType(), source.TargetType, "Wrong TargetType being returned.");
            }
        }
        public void WithNonSingletonTargetObject()
        {
            MockRepository mocks = new MockRepository();

            IObjectFactory factory    = mocks.CreateMock <IObjectFactory>();
            const string   objectName = "Foo";

            using (mocks.Record())
            {
                Expect.Call(factory.IsPrototype(objectName)).Return(false);
            }

            using (mocks.Playback())
            {
                PrototypeTargetSource source = new PrototypeTargetSource();
                source.TargetObjectName = objectName;

                Assert.Throws <ObjectDefinitionStoreException>(delegate { source.ObjectFactory = factory; });
            }
        }
        public void GetTarget()
        {
            MockRepository mocks = new MockRepository();

            IObjectFactory   factory = mocks.CreateMock <IObjectFactory>();
            SideEffectObject target  = new SideEffectObject();

            using (mocks.Record())
            {
                Expect.Call(factory.IsPrototype("foo")).Return(true);
                Expect.Call(factory.GetObject("foo")).Return(target);
                Expect.Call(factory.GetType("foo")).Return(typeof(string));
            }

            using (mocks.Playback())
            {
                PrototypeTargetSource source = new PrototypeTargetSource();
                source.TargetObjectName = "foo";
                source.ObjectFactory    = factory;
                Assert.IsTrue(object.ReferenceEquals(source.GetTarget(), target),
                              "Initial target source reference not being returned by GetTarget().");
            }
        }
        public void AfterPropertiesSetWithoutTargetObjectNameBeingSet()
        {
            PrototypeTargetSource source = new PrototypeTargetSource();

            Assert.Throws <ArgumentNullException>(() => source.AfterPropertiesSet());
        }
        public void IsStatic()
        {
            PrototypeTargetSource source = new PrototypeTargetSource();

            Assert.IsFalse(source.IsStatic, "Must not be static.");
        }