public void TheOpenedActionIsCalledEvenWhenThereNoViewsAvailablesInTheExpectedTimeForTheCurrentViewModelButUnlockingTheInspectionThread()
            {
                var serviceLocator = ServiceLocator.Default;
                var fooViewModel   = new FooViewModel(serviceLocator);

                var dispatcherServiceMock = new Mock <IDispatcherService>();

                dispatcherServiceMock.Setup(service => service.Invoke(It.IsAny <Action>())).Callback((Action action) => action.Invoke());
                var visualizerServiceMock = new Mock <IUIVisualizerService>();

                visualizerServiceMock.Setup(service => service.Show(It.Is <FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null)).Returns(true);
                var viewManagerMock = new Mock <IViewManager>();

                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooViewModel)).Returns(new IView[] {});

                serviceLocator.RegisterInstance <IDispatcherService>(dispatcherServiceMock.Object);
                serviceLocator.RegisterInstance <IUIVisualizerService>(visualizerServiceMock.Object);
                serviceLocator.RegisterInstance <IViewManager>(viewManagerMock.Object);

                var @event = new AutoResetEvent(false);

                serviceLocator.ResolveType <IUIVisualizerService>().Show(fooViewModel, () => @event.Set());

                @event.WaitOne(20000);

                visualizerServiceMock.Verify(service => service.Show(It.Is <FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null), Times.Once());
                viewManagerMock.Verify(manager => manager.GetViewsOfViewModel(fooViewModel), Times.AtLeastOnce());
            }
            public void TheOpenedActionIsCalledWhenViewManagerHaveRegisteredAViewForTheViewModel()
            {
                var serviceLocator = IoCFactory.CreateServiceLocator();
                var fooViewModel   = new FooViewModel(serviceLocator);

                var dispatcherServiceMock = new Mock <IDispatcherService>();

                dispatcherServiceMock.Setup(service => service.Invoke(It.IsAny <Action>())).Callback((Action action) => action.Invoke());
                var visualizerServiceMock = new Mock <IUIVisualizerService>();

                visualizerServiceMock.Setup(service => service.Show(It.Is <FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null)).Returns(true);
                var viewManagerMock = new Mock <IViewManager>();

                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooViewModel)).Returns(new IView[] { new FooViewModelView(fooViewModel) });

                serviceLocator.RegisterInstance <IDispatcherService>(dispatcherServiceMock.Object);
                serviceLocator.RegisterInstance <IUIVisualizerService>(visualizerServiceMock.Object);
                serviceLocator.RegisterInstance <IViewManager>(viewManagerMock.Object);

                serviceLocator.ResolveType <IUIVisualizerService>().Show(fooViewModel, () =>
                {
                    visualizerServiceMock.Verify(service => service.Show(It.Is <FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null), Times.Once());
                    viewManagerMock.Verify(manager => manager.GetViewsOfViewModel(fooViewModel), Times.AtLeastOnce());
                    this.EnqueueTestComplete();
                });
            }
    public FooViewModel CreateFooViewModel(Foo foo)
    {
        var vm = new FooViewModel(foo);

        Container.BuildUp(vm);
        return(vm);
    }
            public void NotCallsAddOrActivateMethodsOfViewThatsBelongToTheViewModelIsAlreadyActive()
            {
                _activeViewCollection.Setup(collection => collection.Contains(It.IsAny <FooViewModelView>())).Returns(true);

                _mainRegionMock.SetupGet(region => region.ActiveViews).Returns(_activeViewCollection.Object);
                _mainRegionMock.SetupGet(region => region.Views).Returns(_viewCollection.Object);

                _regionCollectionMock.Setup(collection => collection.ContainsRegionWithName(MainRegionName)).Returns(true);
                _regionCollectionMock.SetupGet(collection => collection[MainRegionName]).Returns(_mainRegionMock.Object);

                _regionManagerMock.SetupGet(manager => manager.Regions).Returns(_regionCollectionMock.Object);

                _serviceLocator.RegisterInstance <IRegionManager>(_regionManagerMock.Object);
                var fooViewModel = new FooViewModel(_serviceLocator);

                var viewLocator      = _serviceLocator.ResolveType <IViewLocator>();
                var viewModelLocator = _serviceLocator.ResolveType <IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = _serviceLocator.ResolveType <IUIVisualizerService>();

                uiVisualizerService.Activate(fooViewModel, MainRegionName);

                _regionManagerMock.VerifyGet(collection => collection.Regions, Times.AtLeast(1));
                _regionCollectionMock.Verify(collection => collection.ContainsRegionWithName(MainRegionName), Times.Once());
                _regionCollectionMock.Verify(collection => collection[MainRegionName], Times.Once());
                _mainRegionMock.Verify(region => region.Add(It.IsAny <FooViewModelView>()), Times.Never());
                _mainRegionMock.Verify(region => region.Activate(It.IsAny <FooViewModelView>()), Times.Never());
            }
            public void AllowsTheReactivationOfADeactivatedViewModel()
            {
                SetupDefaultRegionManager();

                var fooViewModel = new FooViewModel(_serviceLocator);

                var viewLocator      = _serviceLocator.ResolveType <IViewLocator>();
                var viewModelLocator = _serviceLocator.ResolveType <IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = _serviceLocator.ResolveType <IUIVisualizerService>();

                uiVisualizerService.Activate(fooViewModel, MainRegionName);

                uiVisualizerService.Deactivate(fooViewModel);

                uiVisualizerService.Activate(fooViewModel);

                _regionManagerMock.VerifyGet(collection => collection.Regions, Times.AtLeast(1));
                _regionCollectionMock.Verify(collection => collection.ContainsRegionWithName(MainRegionName), Times.Once());
                _regionCollectionMock.Verify(collection => collection[MainRegionName], Times.Once());
                _mainRegionMock.Verify(region => region.Add(It.IsAny <FooViewModelView>()), Times.Once());
                _mainRegionMock.Verify(region => region.Deactivate(It.IsAny <FooViewModelView>()), Times.Once());
                _mainRegionMock.Verify(region => region.Activate(It.IsAny <FooViewModelView>()), Times.Exactly(2));
            }
            public void SetsTheExistingRegionManagerAndCreatesAParentChildRelationshipBetweenTheViewModelWithTheRegionAndTheInjectedOne()
            {
                this.SetupDefaultRegionManager();

                var fooViewModel       = new FooViewModel(this.serviceLocator);
                var fooParentViewModel = new FooParentViewModel(this.serviceLocator);

                var viewLocator      = this.serviceLocator.ResolveType <IViewLocator>();
                var viewModelLocator = this.serviceLocator.ResolveType <IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var viewManagerMock        = new Mock <IViewManager>();
                var fooParentViewModelView = new FooParentViewModelView(fooParentViewModel);

                fooParentViewModelView.SetRegionManager(this.regionManagerMock.Object);
                RegionManager.SetRegionName(fooParentViewModelView, MainRegionName);

                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooParentViewModel)).Returns(new IView[] { fooParentViewModelView });

                this.serviceLocator.RegisterInstance <IViewManager>(viewManagerMock.Object);
                this.serviceLocator.ResolveType <IUIVisualizerService>().Activate(fooViewModel, fooParentViewModel, MainRegionName);

                this.VerifyDefaultRegionManagerBehavior();

                Assert.AreEqual(fooParentViewModel, fooViewModel.GetParentViewModel());
                Assert.IsTrue(fooParentViewModel.GetChildViewModelsWrapper().Contains(fooViewModel));
            }
            public void MakeACallToResolveTheRegionManagerIfNotFoundInTheVisualTreeAndCreatesAParentChildRelationshipBetweenTheViewModelWithTheRegionAndTheInjectedOne()
            {
                SetupDefaultRegionManager();

                _regionManagerMock.Setup(manager => manager.CreateRegionManager()).Returns(_regionManagerMock.Object);

                var fooViewModel       = new FooViewModel(_serviceLocator);
                var fooParentViewModel = new FooParentViewModel(_serviceLocator);

                var viewLocator      = _serviceLocator.ResolveType <IViewLocator>();
                var viewModelLocator = _serviceLocator.ResolveType <IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var viewManagerMock        = new Mock <IViewManager>();
                var fooParentViewModelView = new FooParentViewModelView(fooParentViewModel);

                RegionManager.SetRegionName(fooParentViewModelView, MainRegionName);

                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooParentViewModel)).Returns(new IView[] { fooParentViewModelView });

                _serviceLocator.RegisterInstance <IViewManager>(viewManagerMock.Object);

                _serviceLocator.ResolveType <IUIVisualizerService>().Activate(fooViewModel, fooParentViewModel, MainRegionName);

                VerifyDefaultRegionManagerBehavior();

                Assert.AreEqual(fooParentViewModel, fooViewModel.GetParentViewModel());
                Assert.IsTrue(fooParentViewModel.GetChildViewModelsWrapper().Contains(fooViewModel));

                _regionManagerMock.Verify(manager => manager.CreateRegionManager(), Times.Once());
            }
示例#8
0
            public void TheOpenedActionIsCalledEvenWhenThereNoViewsAvailablesInTheExpectedTimeForTheCurrentViewModelButUnlockingTheInspectionThread()
            {
                var serviceLocator = IoCFactory.CreateServiceLocator();
                var fooViewModel   = new FooViewModel(serviceLocator);

                var dispatcherServiceMock = new Mock <IDispatcherService>();

                dispatcherServiceMock.Setup(service => service.Invoke(It.IsAny <Action>(), true)).Callback((Action action) => action.Invoke());
                var visualizerServiceMock = new Mock <IUIVisualizerService>();

                visualizerServiceMock.Setup(service => service.Show(It.Is <FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null)).Returns(new Task <bool>(() => true));
                var viewManagerMock = new Mock <IViewManager>();

                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooViewModel)).Returns(new IView[] { });

                serviceLocator.RegisterInstance <IDispatcherService>(dispatcherServiceMock.Object);
                serviceLocator.RegisterInstance <IUIVisualizerService>(visualizerServiceMock.Object);
                serviceLocator.RegisterInstance <IViewManager>(viewManagerMock.Object);

                serviceLocator.ResolveType <IUIVisualizerService>().Show(fooViewModel, () =>
                {
                    visualizerServiceMock.Verify(service => service.Show(It.Is <FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null), Times.Once());
                    viewManagerMock.Verify(manager => manager.GetViewsOfViewModel(fooViewModel), Times.AtLeastOnce());
                    this.EnqueueTestComplete();
                });
            }
            public void ThrowsInvalidOperationExceptionIfViewModelAndParentViewModelAreReferenceEquals()
            {
                var uiVisualizerService = _serviceLocator.ResolveType <IUIVisualizerService>();
                var fooViewModel        = new FooViewModel(_serviceLocator);

                ExceptionTester.CallMethodAndExpectException <InvalidOperationException>(() => uiVisualizerService.Activate(fooViewModel, fooViewModel, MainRegionName));
            }
示例#10
0
        protected override void Because_of()
        {
            var foo3 = new Foo {
                IsFooBarred = null
            };

            _result = Mapper.Map <Foo, FooViewModel>(foo3);
        }
示例#11
0
        public ActionResult Excel()
        {
            FooViewModel model = new FooViewModel()
            {
                Foos = new List <Foo>()
            };

            return(View(model));
        }
    public ActionResult Edit()
    {
        var viewModel = new FooViewModel
        {
            Bars = new List <BarViewModel> {
                new BarViewModel()
            }
        };

        return(View(viewModel));
    }
示例#13
0
        public Package <int> Save([FromBody] FooViewModel model)
        {
            try
            {
                var id = _manager.Save(model);

                return(new Package <int>(id, "The call filter was successfully saved."));
            }
            catch (Exception ex)
            {
                return(new Package <int>(ex));
            }
        }
            public void ThrowsNotSupportedExceptionIfTheRegionManagerIsNotAvaliable()
            {
                var fooViewModel = new FooViewModel(this.serviceLocator);

                var viewLocator      = this.serviceLocator.ResolveType <IViewLocator>();
                var viewModelLocator = this.serviceLocator.ResolveType <IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = this.serviceLocator.ResolveType <IUIVisualizerService>();

                ExceptionTester.CallMethodAndExpectException <NotSupportedException>(() => uiVisualizerService.Activate(fooViewModel, MainRegionName));
            }
            public void ThrowsInvalidOperationIfIsTheFirstActivationOfAViewModelIsRequestedWithOutRegion()
            {
                _serviceLocator.RegisterInstance(_regionManagerMock.Object);
                var fooViewModel = new FooViewModel(_serviceLocator);

                var viewLocator      = _serviceLocator.ResolveType <IViewLocator>();
                var viewModelLocator = _serviceLocator.ResolveType <IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = _serviceLocator.ResolveType <IUIVisualizerService>();

                ExceptionTester.CallMethodAndExpectException <InvalidOperationException>(() => uiVisualizerService.Activate(fooViewModel));
            }
示例#16
0
        public void NoErrorIsRaisedIfAServiceCannotBeFound()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();

            using (resolver.WithResolver()) {
                var fixture = new DefaultViewLocator();
                var vm      = new FooViewModel();

                var result = fixture.ResolveView(vm);
                Assert.Null(result);
            }
        }
            public void TriesToResolveTheViewsOfTheParentViewModelUsingTheViewManager()
            {
                var fooViewModel       = new FooViewModel(_serviceLocator);
                var fooParentViewModel = new FooParentViewModel(_serviceLocator);

                var viewManagerMock = new Mock <IViewManager>();

                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooParentViewModel)).Returns(new IView[] {});

                _serviceLocator.RegisterInstance <IViewManager>(viewManagerMock.Object);

                _serviceLocator.ResolveType <IUIVisualizerService>().Activate(fooViewModel, fooParentViewModel, MainRegionName);

                viewManagerMock.Verify(manager => manager.GetViewsOfViewModel(fooParentViewModel), Times.Once());
            }
示例#18
0
        public void CanResolveViewFromViewModelClassUsingInterfaceRegistration()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();
            resolver.Register(() => new FooView(), typeof(IFooView));

            using (resolver.WithResolver()) {
                var          fixture = new DefaultViewLocator();
                FooViewModel vm      = new FooViewModel();

                var result = fixture.ResolveView(vm);
                Assert.IsType <FooView>(result);
            }
        }
示例#19
0
        public void ByDefaultViewModelIsReplacedWithViewWhenDeterminingTheServiceName()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();
            resolver.Register(() => new FooView(), typeof(IViewFor <FooViewModel>));

            using (resolver.WithResolver()) {
                var          fixture = new DefaultViewLocator();
                FooViewModel vm      = new FooViewModel();

                var result = fixture.ResolveView(vm);
                Assert.True(result is FooView);
            }
        }
示例#20
0
        public void AnErrorIsRaisedIfTheCreationOfTheViewFails()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();
            resolver.Register(() => new FooThatThrowsView(), typeof(IViewFor <IFooViewModel>));

            using (resolver.WithResolver()) {
                var fixture = new DefaultViewLocator();
                var vm      = new FooViewModel();

                var ex = Assert.Throws <InvalidOperationException>(() => fixture.ResolveView(vm));
                Assert.Equal("This is a test failure.", ex.Message);
            }
        }
示例#21
0
        public void NoErrorIsRaisedIfTheServiceDoesNotImplementIViewFor()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();
            resolver.Register(() => "this string does not implement IViewFor", typeof(IViewFor <IFooViewModel>));

            using (resolver.WithResolver()) {
                var fixture = new DefaultViewLocator();
                var vm      = new FooViewModel();

                var result = fixture.ResolveView(vm);
                Assert.Null(result);
            }
        }
示例#22
0
        public void CanResolveViewFromViewModelInterfaceUsingIViewForRegistration()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();
            resolver.Register(() => new FooView(), typeof(IViewFor <IFooViewModel>));

            using (resolver.WithResolver()) {
                var           fixture = new DefaultViewLocator();
                IFooViewModel vm      = new FooViewModel();

                var result = fixture.ResolveView(vm);
                Assert.True(result is FooView);
            }
        }
示例#23
0
        public void TheRuntimeTypeOfTheViewModelIsUsedToResolveTheView()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();
            resolver.Register(() => new FooView(), typeof(FooView));

            using (resolver.WithResolver()) {
                var    fixture = new DefaultViewLocator();
                object vm      = new FooViewModel();

                var result = fixture.ResolveView(vm);
                Assert.True(result is FooView);
            }
        }
        public void NoErrorIsRaisedIfATypeCannotBeFound()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();

            using (resolver.WithResolver())
            {
                var fixture = new DefaultViewLocator();
                fixture.ViewModelToViewFunc = viewModelName => "DoesNotExist, " + typeof(DefaultViewLocatorTests).Assembly.FullName;
                var vm = new FooViewModel();

                var result = fixture.ResolveView(vm);
                Assert.Null(result);
            }
        }
示例#25
0
        public void ViewModelToViewNamingConventionCanBeCustomized()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();
            resolver.Register(() => new FooWithWeirdConvention(), typeof(FooWithWeirdConvention));

            using (resolver.WithResolver()) {
                var fixture = new DefaultViewLocator();
                fixture.ViewModelToViewFunc = viewModelName => viewModelName.Replace("ViewModel", "WithWeirdConvention");
                FooViewModel vm = new FooViewModel();

                var result = fixture.ResolveView(vm);
                Assert.True(result is FooWithWeirdConvention);
            }
        }
            public void CallsAddAndActivateMethodsOfAnExistingRegionWithTheViewThatsBelongToTheViewModel()
            {
                SetupDefaultRegionManager();

                var fooViewModel = new FooViewModel(_serviceLocator);

                var viewLocator      = _serviceLocator.ResolveType <IViewLocator>();
                var viewModelLocator = _serviceLocator.ResolveType <IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = _serviceLocator.ResolveType <IUIVisualizerService>();

                uiVisualizerService.Activate(fooViewModel, MainRegionName);

                VerifyDefaultRegionManagerBehavior();
            }
示例#27
0
        public async Task <IActionResult> PostFoo([FromBody] FooViewModel foo)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            Foo nfoo = new Foo()
            {
                FooId      = 1,
                DateJoined = DateTime.Now,
                Name       = foo.Name,
                Bars       = new List <Bar>()
            };

            _context.Foos.Add(nfoo);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetFoo", new { id = nfoo.FooId }, foo));
        }
            public void IsCalledIsTheMethodIsCloseAndRemoveMethodOfTheRegionIsCalled()
            {
                SetupRegionManagerBehaviorRelatedWithMainRegion();

                var fooViewModel = new FooViewModel(_serviceLocator);

                var viewLocator      = _serviceLocator.ResolveType <IViewLocator>();
                var viewModelLocator = _serviceLocator.ResolveType <IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = _serviceLocator.ResolveType <IUIVisualizerService>();

                uiVisualizerService.Activate(fooViewModel, MainRegionName);

                fooViewModel.CloseViewModel(true);

                _mainRegionMock.Verify(region => region.Remove(It.IsAny <FooViewModelView>()), Times.Once());
            }
        /// <summary>
        /// Page_Load hadler.
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            try // try to handle Page_Load
            {
                _ajaxManager = null;

                if ((_ajaxManager = RadAjaxManager.GetCurrent(Page)) == null)
                {
                    _ajaxManager = new RadAjaxManager()
                    {
                        ID = "amMain", EnableAJAX = true
                    };
                    {
                        phAjaxManager.Controls.Add(_ajaxManager);
                    }
                }

                var apMainSetting = new AjaxSetting("apMain");
                {
                    apMainSetting.UpdatedControls.Add(new AjaxUpdatedControl("apMain", "alpMain"));
                    {
                        _ajaxManager.AjaxSettings.Add(apMainSetting);
                    }
                }

                if (IsPostBack)
                {
                    return;
                }
                {
                    _model = new FooViewModel()
                    {
                        Foos = UnitOfWork.Foos.GetAll()
                    };
                }
            }
            catch (Exception ex) // catch exceptions
            {
                Exceptions.ProcessModuleLoadException(this, ex);
            }
        }
示例#30
0
        public void ContractIsUsedWhenResolvingView()
        {
            var resolver = new ModernDependencyResolver();

            resolver.InitializeSplat();
            resolver.InitializeReactiveUI();
            resolver.Register(() => new FooView(), typeof(IViewFor <IFooViewModel>), "first");
            resolver.Register(() => new FooWithWeirdConvention(), typeof(IViewFor <IFooViewModel>), "second");

            using (resolver.WithResolver()) {
                var fixture = new DefaultViewLocator();
                var vm      = new FooViewModel();

                var result = fixture.ResolveView(vm);
                Assert.Null(result);

                result = fixture.ResolveView(vm, "first");
                Assert.True(result is FooView);

                result = fixture.ResolveView(vm, "second");
                Assert.True(result is FooWithWeirdConvention);
            }
        }
            public void IsCalledIsTheMethodIsCloseAndRemoveMethodOfTheRegionIsCalled()
            {
                this.SetupRegionManagerBehaviorRelatedWithMainRegion();

                var fooViewModel = new FooViewModel(this.serviceLocator);

                var viewLocator = this.serviceLocator.ResolveType<IViewLocator>();
                var viewModelLocator = this.serviceLocator.ResolveType<IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = this.serviceLocator.ResolveType<IUIVisualizerService>();
                uiVisualizerService.Activate(fooViewModel, MainRegionName);

                fooViewModel.CloseViewModel(true);

                this.mainRegionMock.Verify(region => region.Remove(It.IsAny<FooViewModelView>()), Times.Once());
            }
 public void ThrowsInvalidOperationExceptionIfViewModelAndParentViewModelAreReferenceEquals()
 {
     var uiVisualizerService = this.serviceLocator.ResolveType<IUIVisualizerService>();
     var fooViewModel = new FooViewModel(this.serviceLocator);
     ExceptionTester.CallMethodAndExpectException<InvalidOperationException>(() => uiVisualizerService.Activate(fooViewModel, fooViewModel, MainRegionName));
 }
            public void MakeACallToResolveTheRegionManagerIfNotFoundInTheVisualTreeAndCreatesAParentChildRelationshipBetweenTheViewModelWithTheRegionAndTheInjectedOne()
            {
                this.SetupDefaultRegionManager();

                this.regionManagerMock.Setup(manager => manager.CreateRegionManager()).Returns(this.regionManagerMock.Object);

                var fooViewModel = new FooViewModel(this.serviceLocator);
                var fooParentViewModel = new FooParentViewModel(this.serviceLocator);

                var viewLocator = this.serviceLocator.ResolveType<IViewLocator>();
                var viewModelLocator = this.serviceLocator.ResolveType<IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var viewManagerMock = new Mock<IViewManager>();
                var fooParentViewModelView = new FooParentViewModelView(fooParentViewModel);

                RegionManager.SetRegionName(fooParentViewModelView, MainRegionName);

                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooParentViewModel)).Returns(new IView[] { fooParentViewModelView });

                this.serviceLocator.RegisterInstance<IViewManager>(viewManagerMock.Object);

                this.serviceLocator.ResolveType<IUIVisualizerService>().Activate(fooViewModel, fooParentViewModel, MainRegionName);

                this.VerifyDefaultRegionManagerBehavior();

                Assert.AreEqual(fooParentViewModel, fooViewModel.GetParentViewModel());
                Assert.IsTrue(fooParentViewModel.GetChildViewModelsWrapper().Contains(fooViewModel));

                this.regionManagerMock.Verify(manager => manager.CreateRegionManager(), Times.Once());
            }           
            public void TriesToResolveTheViewsOfTheParentViewModelUsingTheViewManager()
            {
                var fooViewModel = new FooViewModel(this.serviceLocator);
                var fooParentViewModel = new FooParentViewModel(this.serviceLocator);

                var viewManagerMock = new Mock<IViewManager>();
                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooParentViewModel)).Returns(new IView[] { });

                this.serviceLocator.RegisterInstance<IViewManager>(viewManagerMock.Object);

                this.serviceLocator.ResolveType<IUIVisualizerService>().Activate(fooViewModel, fooParentViewModel, MainRegionName);

                viewManagerMock.Verify(manager => manager.GetViewsOfViewModel(fooParentViewModel), Times.Once());
            }
            public void NotCallsAddOrActivateMethodsOfViewThatsBelongToTheViewModelIsAlreadyActive()
            {
                this.activeViewCollection.Setup(collection => collection.Contains(It.IsAny<FooViewModelView>())).Returns(true);

                this.mainRegionMock.SetupGet(region => region.ActiveViews).Returns(this.activeViewCollection.Object);
                this.mainRegionMock.SetupGet(region => region.Views).Returns(this.viewCollection.Object);

                this.regionCollectionMock.Setup(collection => collection.ContainsRegionWithName(MainRegionName)).Returns(true);
                this.regionCollectionMock.SetupGet(collection => collection[MainRegionName]).Returns(this.mainRegionMock.Object);

                this.regionManagerMock.SetupGet(manager => manager.Regions).Returns(this.regionCollectionMock.Object);

                this.serviceLocator.RegisterInstance<IRegionManager>(this.regionManagerMock.Object);
                var fooViewModel = new FooViewModel(this.serviceLocator);

                var viewLocator = this.serviceLocator.ResolveType<IViewLocator>();
                var viewModelLocator = this.serviceLocator.ResolveType<IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = this.serviceLocator.ResolveType<IUIVisualizerService>();
                uiVisualizerService.Activate(fooViewModel, MainRegionName);

                this.regionManagerMock.VerifyGet(collection => collection.Regions, Times.AtLeast(1));
                this.regionCollectionMock.Verify(collection => collection.ContainsRegionWithName(MainRegionName), Times.Once());
                this.regionCollectionMock.Verify(collection => collection[MainRegionName], Times.Once());
                this.mainRegionMock.Verify(region => region.Add(It.IsAny<FooViewModelView>()), Times.Never());
                this.mainRegionMock.Verify(region => region.Activate(It.IsAny<FooViewModelView>()), Times.Never());
            }
            public void AllowsTheReactivationOfADeactivatedViewModel()
            {
                this.SetupDefaultRegionManager();

                var fooViewModel = new FooViewModel(this.serviceLocator);

                var viewLocator = this.serviceLocator.ResolveType<IViewLocator>();
                var viewModelLocator = this.serviceLocator.ResolveType<IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = this.serviceLocator.ResolveType<IUIVisualizerService>();
                uiVisualizerService.Activate(fooViewModel, MainRegionName);

                uiVisualizerService.Deactivate(fooViewModel);

                uiVisualizerService.Activate(fooViewModel);

                this.regionManagerMock.VerifyGet(collection => collection.Regions, Times.AtLeast(1));
                this.regionCollectionMock.Verify(collection => collection.ContainsRegionWithName(MainRegionName), Times.Once());
                this.regionCollectionMock.Verify(collection => collection[MainRegionName], Times.Once());
                this.mainRegionMock.Verify(region => region.Add(It.IsAny<FooViewModelView>()), Times.Once());
                this.mainRegionMock.Verify(region => region.Deactivate(It.IsAny<FooViewModelView>()), Times.Once());
                this.mainRegionMock.Verify(region => region.Activate(It.IsAny<FooViewModelView>()), Times.Exactly(2));
            }
            public void ThrowsInvalidOperationIfIsTheFirstActivationOfAViewModelIsRequestedWithOutRegion()
            {
                this.serviceLocator.RegisterInstance(this.regionManagerMock.Object);
                var fooViewModel = new FooViewModel(this.serviceLocator);

                var viewLocator = this.serviceLocator.ResolveType<IViewLocator>();
                var viewModelLocator = this.serviceLocator.ResolveType<IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = this.serviceLocator.ResolveType<IUIVisualizerService>();
                ExceptionTester.CallMethodAndExpectException<InvalidOperationException>(() => uiVisualizerService.Activate(fooViewModel));
            }
            public void ThrowsNotSupportedExceptionIfTheRegionManagerIsNotAvaliable()
            {
                var fooViewModel = new FooViewModel(this.serviceLocator);

                var viewLocator = this.serviceLocator.ResolveType<IViewLocator>();
                var viewModelLocator = this.serviceLocator.ResolveType<IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = this.serviceLocator.ResolveType<IUIVisualizerService>();
                ExceptionTester.CallMethodAndExpectException<NotSupportedException>(() => uiVisualizerService.Activate(fooViewModel, MainRegionName));
            }
 public FooView(FooViewModel viewModel)
 {
     DataContext = viewModel;
     InitializeComponent();
 }
            public async Task IsCalledIsTheMethodIsCloseAndRemoveMethodOfTheRegionIsCalled()
            {
                SetupRegionManagerBehaviorRelatedWithMainRegion();

                var fooViewModel = new FooViewModel(_serviceLocator);

                var viewLocator = _serviceLocator.ResolveType<IViewLocator>();
                var viewModelLocator = _serviceLocator.ResolveType<IViewModelLocator>();

                viewModelLocator.Register(typeof (FooViewModelView), typeof (FooViewModel));
                viewLocator.Register(typeof (FooViewModel), typeof (FooViewModelView));

                var uiCompositionService = _serviceLocator.ResolveType<IUICompositionService>();
                uiCompositionService.Activate(fooViewModel, MainRegionName);

                await fooViewModel.CloseViewModelAsync(true);

                _mainRegionMock.Verify(region => region.Remove(It.IsAny<FooViewModelView>()), Times.Once());
            }
            public void SetsTheExistingRegionManagerAndCreatesAParentChildRelationshipBetweenTheViewModelWithTheRegionAndTheInjectedOne()
            {
                SetupDefaultRegionManager();

                var fooViewModel = new FooViewModel(_serviceLocator);
                var fooParentViewModel = new FooParentViewModel(_serviceLocator);

                var viewLocator = _serviceLocator.ResolveType<IViewLocator>();
                var viewModelLocator = _serviceLocator.ResolveType<IViewModelLocator>();

                viewModelLocator.Register(typeof (FooViewModelView), typeof (FooViewModel));
                viewLocator.Register(typeof (FooViewModel), typeof (FooViewModelView));

                var viewManagerMock = new Mock<IViewManager>();
                var fooParentViewModelView = new FooParentViewModelView(fooParentViewModel);
                fooParentViewModelView.SetRegionManager(_regionManagerMock.Object);
                RegionManager.SetRegionName(fooParentViewModelView, MainRegionName);

                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooParentViewModel)).Returns(new IView[] {fooParentViewModelView});

                _serviceLocator.RegisterInstance<IViewManager>(viewManagerMock.Object);
                _serviceLocator.ResolveType<IUIVisualizerService>().Activate(fooViewModel, fooParentViewModel, MainRegionName);

                VerifyDefaultRegionManagerBehavior();

                Assert.AreEqual(fooParentViewModel, fooViewModel.GetParentViewModel());
                Assert.IsTrue(fooParentViewModel.GetChildViewModelsWrapper().Contains(fooViewModel));
            }
            public void TheOpenedActionIsCalledWhenViewManagerHaveRegisteredAViewForTheViewModel()
            {
                 var serviceLocator = new ServiceLocator();
                var fooViewModel = new FooViewModel(serviceLocator);

                var dispatcherServiceMock = new Mock<IDispatcherService>();
                dispatcherServiceMock.Setup(service => service.Invoke(It.IsAny<Action>())).Callback((Action action) => action.Invoke());
                var visualizerServiceMock = new Mock<IUIVisualizerService>();
                visualizerServiceMock.Setup(service => service.Show(It.Is<FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null)).Returns(true);
                var viewManagerMock = new Mock<IViewManager>();
                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooViewModel)).Returns(new IView[] { new FooViewModelView(fooViewModel) });
                
                serviceLocator.RegisterInstance<IDispatcherService>(dispatcherServiceMock.Object);
            	serviceLocator.RegisterInstance<IUIVisualizerService>(visualizerServiceMock.Object);
            	serviceLocator.RegisterInstance<IViewManager>(viewManagerMock.Object);
            
                serviceLocator.ResolveType<IUIVisualizerService>().Show(fooViewModel, () =>
                    {
                        visualizerServiceMock.Verify(service => service.Show(It.Is<FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null), Times.Once());
                        viewManagerMock.Verify(manager => manager.GetViewsOfViewModel(fooViewModel), Times.AtLeastOnce());  
                        this.EnqueueTestComplete();
                    });
            }
            public void CallsAddAndActivateMethodsOfAnExistingRegionWithTheViewThatsBelongToTheViewModel()
            {
                this.SetupDefaultRegionManager();

                var fooViewModel = new FooViewModel(this.serviceLocator);

                var viewLocator = this.serviceLocator.ResolveType<IViewLocator>();
                var viewModelLocator = this.serviceLocator.ResolveType<IViewModelLocator>();

                viewModelLocator.Register(typeof(FooViewModelView), typeof(FooViewModel));
                viewLocator.Register(typeof(FooViewModel), typeof(FooViewModelView));

                var uiVisualizerService = this.serviceLocator.ResolveType<IUIVisualizerService>();
                uiVisualizerService.Activate(fooViewModel, MainRegionName);

                this.VerifyDefaultRegionManagerBehavior();
            }
            public void TheOpenedActionIsCalledEvenWhenThereNoViewsAvailablesInTheExpectedTimeForTheCurrentViewModelButUnlockingTheInspectionThread()
            {
                var serviceLocator = new ServiceLocator();
                var fooViewModel = new FooViewModel(serviceLocator);

                var dispatcherServiceMock = new Mock<IDispatcherService>();
                dispatcherServiceMock.Setup(service => service.Invoke(It.IsAny<Action>())).Callback((Action action) => action.Invoke());
                var visualizerServiceMock = new Mock<IUIVisualizerService>();
                visualizerServiceMock.Setup(service => service.Show(It.Is<FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null)).Returns(true);
                var viewManagerMock = new Mock<IViewManager>();
                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooViewModel)).Returns(new IView[] { });

                serviceLocator.RegisterInstance<IDispatcherService>(dispatcherServiceMock.Object);
                serviceLocator.RegisterInstance<IUIVisualizerService>(visualizerServiceMock.Object);
                serviceLocator.RegisterInstance<IViewManager>(viewManagerMock.Object);

                var @event = new AutoResetEvent(false);

                serviceLocator.ResolveType<IUIVisualizerService>().Show(fooViewModel, () => @event.Set());

                @event.WaitOne(20000);

                visualizerServiceMock.Verify(service => service.Show(It.Is<FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null), Times.Once());
                viewManagerMock.Verify(manager => manager.GetViewsOfViewModel(fooViewModel), Times.AtLeastOnce());
            }
            public void TheOpenedActionIsCalledEvenWhenThereNoViewsAvailablesInTheExpectedTimeForTheCurrentViewModelButUnlockingTheInspectionThread()
            {
                var serviceLocator = IoCFactory.CreateServiceLocator();
                var fooViewModel = new FooViewModel(serviceLocator);

                var dispatcherServiceMock = new Mock<IDispatcherService>();
                dispatcherServiceMock.Setup(service => service.Invoke(It.IsAny<Action>())).Callback((Action action) => action.Invoke());
                var visualizerServiceMock = new Mock<IUIVisualizerService>();
                visualizerServiceMock.Setup(service => service.Show(It.Is<FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null)).Returns(new Task<bool>(() => true));
                var viewManagerMock = new Mock<IViewManager>();
                viewManagerMock.Setup(manager => manager.GetViewsOfViewModel(fooViewModel)).Returns(new IView[] { });

                serviceLocator.RegisterInstance<IDispatcherService>(dispatcherServiceMock.Object);
                serviceLocator.RegisterInstance<IUIVisualizerService>(visualizerServiceMock.Object);
                serviceLocator.RegisterInstance<IViewManager>(viewManagerMock.Object);

                serviceLocator.ResolveType<IUIVisualizerService>().Show(fooViewModel, () =>
                    {
                        visualizerServiceMock.Verify(service => service.Show(It.Is<FooViewModel>(model => ReferenceEquals(model, fooViewModel)), null), Times.Once());
                        viewManagerMock.Verify(manager => manager.GetViewsOfViewModel(fooViewModel), Times.AtLeastOnce());
                        this.EnqueueTestComplete();
                    });
            }