예제 #1
0
        public void ShouldSupportsImplicitMethodsInclusion()
        {
            ServiceLocatorStub sl = CreateDefaultContainer();

            bool resumedCalled = false;
            bool startedCalled = false;
            var  convFactory   = new ConversationFactoryStub(delegate(string id)
            {
                IConversation result = new NoOpConversationStub(id);
                result.Resumed      += ((s, a) => resumedCalled = true);
                result.Started      += ((s, a) => startedCalled = true);
                return(result);
            });

            sl.AddInstance <IConversationFactory>(convFactory);

            var conversationContainer = CurrentConversationContainer;

            var presenter = new SamplePresenter();

            presenter.GetProduct(Guid.NewGuid());
            Assert.That(startedCalled, "An implicit method inclusion don't start the conversation.");
            Assert.That(conversationContainer.BindedConversationCount, Is.EqualTo(1),
                        "Should have one active conversation because the default mode is continue.");
            resumedCalled = false;
            startedCalled = false;

            presenter.GetProduct(Guid.NewGuid());
            Assert.That(resumedCalled, "An implicit method inclusion don't resume the conversation.");
            Assert.That(conversationContainer.BindedConversationCount, Is.EqualTo(1),
                        "Should have one active conversation because the default mode is continue.");
            resumedCalled = false;

            presenter.DoSomethingNoPersistent();
            Assert.That(!resumedCalled, "An explicit method exclusion resume the conversation; shouldn't");
            Assert.That(conversationContainer.BindedConversationCount, Is.EqualTo(1),
                        "Should have one active conversation because the default mode is continue.");

            string value = presenter.PropertyOutConversation;

            Assert.That(!resumedCalled, "An explicit method exclusion resume the conversation; shouldn't");
            Assert.That(conversationContainer.BindedConversationCount, Is.EqualTo(1),
                        "Should have one active conversation because the default mode is continue.");

            value = presenter.PropertyInConversation;
            Assert.That(resumedCalled, "An implicit method inclusion don't resume the conversation.");
            Assert.That(conversationContainer.BindedConversationCount, Is.EqualTo(1),
                        "Should have one active conversation because the default mode is continue.");
            resumedCalled = false;

            presenter.AcceptAll();
            Assert.That(resumedCalled, "An explicit method inclusion should resume the conversation");
            Assert.That(conversationContainer.BindedConversationCount, Is.EqualTo(0),
                        "Should have NO active conversation because the method AcceptAll end the conversation.");
        }
예제 #2
0
        public void ShouldUnbindOnEndException()
        {
            ServiceLocatorStub sl = CreateDefaultContainer();

            var convFactory = new ConversationFactoryStub(delegate(string id)
            {
                IConversation result = new ExceptionOnFlushConversationStub(id);
                result.OnException  += ((sender, args) => args.ReThrow = false);
                return(result);
            });

            sl.AddInstance <IConversationFactory>(convFactory);

            var presenter = new SamplePresenter();

            presenter.GetProduct(Guid.NewGuid());
            Assert.That(CurrentConversationContainer.BindedConversationCount, Is.EqualTo(1),
                        "One conversation should be binded.");

            presenter.AcceptAll();
            Assert.That(CurrentConversationContainer.BindedConversationCount, Is.EqualTo(0),
                        "Don't unbind the conversation with exception catch by custom event handler");
        }