public void ConventionBasedPresenterDiscoveryStrategy_GetBindings_DoesNotThrowExceptionWhenNoPresenterTypeFound()
        {
            TestHelper.Isolate(TestContext, () => {

                // Arrange
                var buildManager = MockRepository.GenerateStub<IBuildManager>();
                buildManager.Stub(b => b.GetType(Arg<string>.Is.Anything, Arg<bool>.Is.Equal(false)))
                    .Return(null);
                var hosts = new[] { new object() };
                var views = new List<IView> { MockRepository.GenerateStub<IView>() };
                var strategy = new ConventionBasedPresenterDiscoveryStrategy(buildManager);

                // Act
                strategy.GetBindings(hosts, views);

            });
        }
        public void ConventionBasedPresenterDiscoveryStrategy_GetBindings_ShouldGuardNullViewInstances()
        {
            // Arrange
            var buildManager = MockRepository.GenerateStub<IBuildManager>();
            var strategy = new ConventionBasedPresenterDiscoveryStrategy(buildManager);

            try
            {
                // Act
                strategy.GetBindings(new object[0], null);

                // Assert
                Assert.Fail("Expected exception not thrown");
            }
            catch (ArgumentNullException ex)
            {
                // Assert
                Assert.AreEqual("viewInstances", ex.ParamName);
            }
        }
        public void ConventionBasedPresenterDiscoveryStrategy_GetBindings_FindsPresenterTypeFromBuildManager()
        {
            TestHelper.Isolate(TestContext, () =>
            {

                // Arrange
                var presenter = MockRepository.GenerateStub<IPresenter<IView>>();
                var buildManager = MockRepository.GenerateStub<IBuildManager>();
                buildManager.Stub(b => b.GetType(Arg<string>.Is.Anything, Arg<bool>.Is.Equal(false)))
                    .Return(presenter.GetType());
                var hosts = new[] { new object() };
                var views = new List<IView> { MockRepository.GenerateStub<IView>() };
                var strategy = new ConventionBasedPresenterDiscoveryStrategy(buildManager);

                // Act
                var result = strategy.GetBindings(hosts, views);

                // Assert
                Assert.AreEqual(presenter.GetType(), result.First().Bindings.First().PresenterType);

            });
        }
        public void ConventionBasedPresenterDiscoveryStrategy_GetBindings_ReturnsAsSoonAsPresenterTypeIsFound()
        {
            TestHelper.Isolate(TestContext, () => {

                // Arrange
                var presenter = MockRepository.GenerateStub<IPresenter<IView>>();
                var buildManager = MockRepository.GenerateStub<IBuildManager>();
                var callCount = 0;
                buildManager.Stub(b => b.GetType(Arg<string>.Is.Anything, Arg<bool>.Is.Equal(false)))
                    .WhenCalled(mi => {
                        callCount++;
                        mi.ReturnValue = presenter.GetType(); // Find on the first one
                    })
                    .Return(presenter.GetType());
                var hosts = new[] { new object() };
                var views = new List<IView> { MockRepository.GenerateStub<IView>() };
                var strategy = new ConventionBasedPresenterDiscoveryStrategy(buildManager);

                // Act
                strategy.GetBindings(hosts, views);

                // Assert
                Assert.IsTrue(strategy.CandidatePresenterTypeFullNameFormats.Count() > 1);
                Assert.AreEqual(1, callCount);

            });
        }