public void WhenViewHasBeenRemovedAndRegionManagerPropertyCleared_ThenItCanBeAddedAgainToARegion() { var regionManagerMock = new Mock <IRegionManager>(); regionManagerMock.Setup(x => x.CreateRegionManager()) .Returns(Mock.Of <IRegionManager>()); IRegion region = new Region { RegionManager = regionManagerMock.Object }; var view = new ContentView(); var scopedRegionManager = region.Add(view, null, true); Assert.Equal(view, region.Views.First()); region.Remove(view); view.ClearValue(Prism.Regions.Xaml.RegionManager.RegionManagerProperty); Assert.Empty(region.Views); var newScopedRegion = region.Add(view, null, true); Assert.Equal(view, region.Views.First()); Assert.Same(newScopedRegion, view.GetValue(Prism.Regions.Xaml.RegionManager.RegionManagerProperty)); }
public void WhenRegionHasMultipleViews_ThenViewsWithMatchingFullTypeNameAreConsidered() { // Arrange var serviceLocatorMock = new Mock<IServiceLocator>(); var region = new Region(); var view1 = new TestView(); var view2 = "view"; region.Add(view1); region.Add(view2); var navigationContext = new NavigationContext(null, new Uri(view2.GetType().FullName, UriKind.Relative)); var navigationTargetHandler = new TestRegionNavigationContentLoader(serviceLocatorMock.Object); // Act var returnedView = navigationTargetHandler.LoadContent(region, navigationContext); // Assert Assert.AreSame(view2, returnedView); }
public void AddingDuplicateNamedViewThrows() { IRegion region = new Region(); region.Add(new object(), "MyView"); region.Add(new object(), "MyView"); }
public void WhenRegionHasMultipleViews_ThenViewsWithMatchingFullTypeNameAreConsidered() { // Arrange var containerMock = new Mock <IContainerExtension>(); //containerMock.As<IContainerInfo>() // .Setup(x => x.GetRegistrationType("Xamarin.Forms.Grid")) // .Returns(typeof(Grid)); containerMock.Setup(x => x.Resolve(typeof(IActiveRegionHelper))) .Returns(new RegionResolverOverrides()); var region = new Region(); var view1 = new TestView(); var view2 = new Grid(); region.Add(view1); region.Add(view2); var navigationContext = new NavigationContext(null, new Uri(view2.GetType().FullName, UriKind.Relative)); var navigationTargetHandler = new TestRegionNavigationContentLoader(containerMock.Object); // Act var returnedView = navigationTargetHandler.LoadContent(region, navigationContext); // Assert Assert.Same(view2, returnedView); }
public void AddingDuplicateNamedViewThrows() { var ex = Assert.Throws <InvalidOperationException>(() => { IRegion region = new Region(); region.Add(new ContentView(), "MyView"); region.Add(new ContentView(), "MyView"); }); }
public void WhenRequestNavigateAwayOnBindingContextRejectsThroughCallback_ThenNavigationDoesNotProceed() { // Prepare var region = new Region(); var view1BindingContextMock = new Mock <IConfirmRegionNavigationRequest>(); view1BindingContextMock .Setup(ina => ina.ConfirmNavigationRequest(It.IsAny <INavigationContext>(), It.IsAny <Action <bool> >())) .Callback <INavigationContext, Action <bool> >((nc, c) => c(false)) .Verifiable(); var view1Mock = new Mock <View>(); var view1 = view1Mock.Object; view1.BindingContext = view1BindingContextMock.Object; var view2 = new StackLayout(); region.Add(view1); region.Add(view2); region.Activate(view1); var navigationUri = new Uri(view2.GetType().Name, UriKind.Relative); var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))).Returns(new RegionNavigationJournalEntry()); IContainerExtension container = containerMock.Object; var contentLoader = new Mock <RegionNavigationContentLoader>(container).Object; IRegionNavigationJournal journal = Mock.Of <IRegionNavigationJournal>(); var target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; // Act var navigationFailed = false; target.RequestNavigate(navigationUri, nr => { navigationFailed = nr.Result == false; }); // Verify view1BindingContextMock.VerifyAll(); Assert.True(navigationFailed); Assert.Equal(new object[] { view1 }, region.ActiveViews.ToArray()); }
public void WhenNavigationFromViewThatIsNavigationAware_OnlyNotifiesOnNavigateFromForActiveViews() { // Arrange bool navigationFromInvoked = false; var region = new Region(); var viewMock = new Mock <View>(); viewMock .As <IRegionAware>() .Setup(x => x.OnNavigatedFrom(It.IsAny <INavigationContext>())).Callback(() => navigationFromInvoked = true); var view = viewMock.Object; region.Add(view); var targetViewMock = new Mock <StackLayout>(); targetViewMock.As <IRegionAware>(); region.Add(targetViewMock.Object); var activeViewMock = new Mock <Grid>(); activeViewMock.As <IRegionAware>(); region.Add(activeViewMock.Object); region.Activate(activeViewMock.Object); var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))).Returns(new RegionNavigationJournalEntry()); var navigationUri = new Uri(targetViewMock.Object.GetType().Name, UriKind.Relative); IContainerExtension container = containerMock.Object; var contentLoader = new Mock <RegionNavigationContentLoader>(container).Object; IRegionNavigationJournal journal = Mock.Of <IRegionNavigationJournal>(); var target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; // Act target.RequestNavigate(navigationUri, nr => { }); // Verify Assert.False(navigationFromInvoked); }
public void WhenViewExistsAndDoesNotImplementINavigationAware_ThenReturnsView() { // Arrange var serviceLocatorMock = new Mock<IServiceLocator>(); var region = new Region(); var view = new TestView(); region.Add(view); var navigationContext = new NavigationContext(null, new Uri(view.GetType().Name, UriKind.Relative)); var navigationTargetHandler = new TestRegionNavigationContentLoader(serviceLocatorMock.Object); // Act var returnedView = navigationTargetHandler.LoadContent(region, navigationContext); // Assert Assert.AreSame(view, returnedView); }
public void WhenViewExistsAndDoesNotImplementIRegionAware_ThenReturnsView() { // Arrange var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IActiveRegionHelper))) .Returns(new RegionResolverOverrides()); var region = new Region(); var view = new TestView(); region.Add(view); var navigationContext = new NavigationContext(null, new Uri(view.GetType().Name, UriKind.Relative)); var navigationTargetHandler = new TestRegionNavigationContentLoader(containerMock.Object); // Act var returnedView = navigationTargetHandler.LoadContent(region, navigationContext); // Assert Assert.Same(view, returnedView); }
public void WhenNavigatingWithQueryString_ViewIsActivated() { // Prepare object view = new object(); Uri viewUri = new Uri(view.GetType().Name + "?MyQuery=true", UriKind.Relative); IRegion region = new Region(); region.Add(view); string regionName = "RegionName"; RegionManager regionManager = new RegionManager(); regionManager.Regions.Add(regionName, region); var serviceLocatorMock = new Mock<IServiceLocator>(); serviceLocatorMock.Setup(x => x.GetInstance<IRegionNavigationJournalEntry>()).Returns(new RegionNavigationJournalEntry()); IServiceLocator serviceLocator = serviceLocatorMock.Object; RegionNavigationContentLoader contentLoader = new RegionNavigationContentLoader(serviceLocator); IRegionNavigationJournal journal = new Mock<IRegionNavigationJournal>().Object; RegionNavigationService target = new RegionNavigationService(serviceLocator, contentLoader, journal); target.Region = region; // Act bool isNavigationSuccessful = false; target.RequestNavigate(viewUri, nr => isNavigationSuccessful = nr.Result == true); // Verify Assert.IsTrue(isNavigationSuccessful); bool isViewActive = region.ActiveViews.Contains(view); Assert.IsTrue(isViewActive); }
public void NavigateDelegatesToIRegionNavigationService() { try { // Prepare IRegion region = new Region(); var view = new ContentView(); region.Add(view); var uri = new Uri(view.GetType().Name, UriKind.Relative); Action <IRegionNavigationResult> navigationCallback = nr => { }; var navigationParameters = new NavigationParameters(); var mockRegionNavigationService = new Mock <IRegionNavigationService>(); mockRegionNavigationService.Setup(x => x.RequestNavigate(uri, navigationCallback, navigationParameters)).Verifiable(); var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationService))).Returns(mockRegionNavigationService.Object); ContainerLocator.ResetContainer(); ContainerLocator.SetContainerExtension(() => containerMock.Object); // Act region.NavigationService.RequestNavigate(uri, navigationCallback, navigationParameters); // Verify mockRegionNavigationService.VerifyAll(); } finally { ContainerLocator.ResetContainer(); } }
public void WhenNavigatingAndBothViewAndDataContextImplementINavigationAware_ThenNavigatedIsInvokesOnNavigation() { // Prepare var region = new Region(); Mock<FrameworkElement> mockFrameworkElement = new Mock<FrameworkElement>(); Mock<INavigationAware> mockINavigationAwareView = mockFrameworkElement.As<INavigationAware>(); mockINavigationAwareView.Setup(ina => ina.IsNavigationTarget(It.IsAny<NavigationContext>())).Returns(true); Mock<INavigationAware> mockINavigationAwareDataContext = new Mock<INavigationAware>(); mockINavigationAwareDataContext.Setup(ina => ina.IsNavigationTarget(It.IsAny<NavigationContext>())).Returns(true); mockFrameworkElement.Object.DataContext = mockINavigationAwareDataContext.Object; var view = mockFrameworkElement.Object; region.Add(view); var navigationUri = new Uri(view.GetType().Name, UriKind.Relative); var serviceLocatorMock = new Mock<IServiceLocator>(); serviceLocatorMock.Setup(x => x.GetInstance<IRegionNavigationJournalEntry>()).Returns(new RegionNavigationJournalEntry()); IServiceLocator serviceLocator = serviceLocatorMock.Object; RegionNavigationContentLoader contentLoader = new RegionNavigationContentLoader(serviceLocator); IRegionNavigationJournal journal = new Mock<IRegionNavigationJournal>().Object; RegionNavigationService target = new RegionNavigationService(serviceLocator, contentLoader, journal); target.Region = region; // Act target.RequestNavigate(navigationUri, nr => { }); // Verify mockINavigationAwareView.Verify(v => v.OnNavigatedTo(It.Is<NavigationContext>(nc => nc.Uri == navigationUri))); mockINavigationAwareDataContext.Verify(v => v.OnNavigatedTo(It.Is<NavigationContext>(nc => nc.Uri == navigationUri))); }
public void WhenViewExistsAndHasDataContextThatImplementsIRegionAware_ThenDataContextIsQueriedForNavigationAndIsReturnedIfAcceptsIt() { // Arrange var containerMock = new Mock <IContainerExtension>(); var region = new Region(); var bindingContextMock = new Mock <IRegionAware>(); bindingContextMock .Setup(v => v.IsNavigationTarget(It.IsAny <INavigationContext>())) .Returns(true) .Verifiable(); var viewMock = new Mock <View>(); viewMock.Object.BindingContext = bindingContextMock.Object; region.Add(viewMock.Object); var navigationContext = new NavigationContext(null, new Uri(viewMock.Object.GetType().Name, UriKind.Relative)); var navigationTargetHandler = new TestRegionNavigationContentLoader(containerMock.Object); // Act var returnedView = navigationTargetHandler.LoadContent(region, navigationContext); // Assert Assert.Same(viewMock.Object, returnedView); bindingContextMock.VerifyAll(); }
public void WhenViewsWithSortHintsAdded_RegionSortsViews() { IRegion region = new Region(); var view1 = new ViewOrder1(); var view2 = new ViewOrder2(); var view3 = new ViewOrder3(); region.Add(view1); region.Add(view2); region.Add(view3); Assert.Equal(3, region.Views.Count()); Assert.Same(view2, region.Views.ElementAt(0)); Assert.Same(view3, region.Views.ElementAt(1)); Assert.Same(view1, region.Views.ElementAt(2)); }
public void AddNamedViewWithNullOrEmptyStringNameThrows() { var ex = Assert.Throws <ArgumentException>(() => { IRegion region = new Region(); region.Add(new ContentView(), string.Empty); }); }
public void AddingNonDependencyObjectToRegionDoesNotThrow() { IRegion region = new Region(); var model = new ContentView(); region.Add(model); Assert.Single(region.Views); }
public void AddingNonDependencyObjectToRegionDoesNotThrow() { IRegion region = new Region(); object model = new object(); region.Add(model); Assert.AreEqual(1, region.Views.Cast<object>().Count()); }
public void WhenViewModelAcceptsNavigationOutAfterNewIncomingRequestIsReceived_ThenOriginalRequestIsIgnored() { var region = new Region(); var viewModelMock = new Mock <IConfirmRegionNavigationRequest>(); var viewMock = new Mock <View>(); var view = viewMock.Object; view.BindingContext = viewModelMock.Object; var confirmationRequests = new List <Action <bool> >(); viewModelMock .Setup(icnr => icnr.ConfirmNavigationRequest(It.IsAny <INavigationContext>(), It.IsAny <Action <bool> >())) .Callback <INavigationContext, Action <bool> >((nc, c) => { confirmationRequests.Add(c); }); region.Add(view); region.Activate(view); var navigationUri = new Uri("", UriKind.Relative); var containerMock = new Mock <IContainerExtension>(); containerMock .Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))) .Returns(new RegionNavigationJournalEntry()); var contentLoaderMock = new Mock <IRegionNavigationContentLoader>(); contentLoaderMock .Setup(cl => cl.LoadContent(region, It.IsAny <INavigationContext>())) .Returns(view); var container = containerMock.Object; var contentLoader = contentLoaderMock.Object; var journal = Mock.Of <IRegionNavigationJournal>(); var target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; IRegionNavigationResult firstNavigation = null; IRegionNavigationResult secondNavigation = null; target.RequestNavigate(navigationUri, nr => firstNavigation = nr); target.RequestNavigate(navigationUri, nr => secondNavigation = nr); Assert.Equal(2, confirmationRequests.Count); confirmationRequests[0](true); confirmationRequests[1](true); Assert.False(firstNavigation.Result); Assert.True(secondNavigation.Result.Value); }
public void AddNamedViewIsAlsoListedInViewsCollection() { IRegion region = new Region(); var myView = new ContentView(); region.Add(myView, "MyView"); Assert.Single(region.Views); Assert.Same(myView, region.Views.ElementAt(0)); }
public void CanAddAndRetrieveNamedViewInstance() { IRegion region = new Region(); object myView = new object(); region.Add(myView, "MyView"); object returnedView = region.GetView("MyView"); Assert.IsNotNull(returnedView); Assert.AreSame(returnedView, myView); }
public void CanRemoveContentFromRegion() { IRegion region = new Region(); object view = new object(); region.Add(view); region.Remove(view); Assert.AreEqual(0, region.Views.Cast<object>().Count()); }
public void CanAddContentToRegion() { IRegion region = new Region(); Assert.AreEqual(0, region.Views.Cast<object>().Count()); region.Add(new object()); Assert.AreEqual(1, region.Views.Cast<object>().Count()); }
public void GetViewReturnsNullAfterRemovingViewFromRegion() { IRegion region = new Region(); var myView = new ContentView(); region.Add(myView, "MyView"); region.Remove(myView); Assert.Null(region.GetView("MyView")); }
public void CanRemoveContentFromRegion() { IRegion region = new Region(); var view = new ContentView(); region.Add(view); region.Remove(view); Assert.Empty(region.Views); }
public void CanAddContentToRegion() { IRegion region = new Region(); Assert.Empty(region.Views); region.Add(new ContentView()); Assert.Single(region.Views); }
public void CanAddAndRetrieveNamedViewInstance() { IRegion region = new Region(); var myView = new ContentView(); region.Add(myView, "MyView"); object returnedView = region.GetView("MyView"); Assert.NotNull(returnedView); Assert.Same(returnedView, myView); }
public void AddingSameViewTwiceThrows() { object view = new object(); IRegion region = new Region(); region.Add(view); try { region.Add(view); Assert.Fail(); } catch (InvalidOperationException ex) { Assert.AreEqual("View already exists in region.", ex.Message); } catch { Assert.Fail(); } }
public void AddingSameViewTwiceThrows() { var view = new ContentView(); IRegion region = new Region(); region.Add(view); try { region.Add(view); //Assert.Fail(); } catch (InvalidOperationException ex) { Assert.Equal("View already exists in region.", ex.Message); } catch { //Assert.Fail(); } }
public void WhenNavigatingFromActiveViewWithNavigatinAwareDataConext_NotifiesContextOfNavigatingFrom() { // Arrange var region = new Region(); var mockBindingContext = new Mock <IRegionAware>(); var view1Mock = new Mock <View>(); var view1 = view1Mock.Object; view1.BindingContext = mockBindingContext.Object; region.Add(view1); var view2 = new StackLayout(); region.Add(view2); region.Activate(view1); var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))).Returns(new RegionNavigationJournalEntry()); var navigationUri = new Uri(view2.GetType().Name, UriKind.Relative); IContainerExtension container = containerMock.Object; var contentLoader = new Mock <RegionNavigationContentLoader>(container).Object; IRegionNavigationJournal journal = Mock.Of <IRegionNavigationJournal>(); var target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; // Act target.RequestNavigate(navigationUri, nr => { }); // Verify mockBindingContext.Verify(v => v.OnNavigatedFrom(It.Is <INavigationContext>(ctx => ctx.Uri == navigationUri && ctx.Parameters.Count() == 0))); }
public void AddViewPassesDiferentScopeWhenAdding() { var regionManager = Mock.Of <IRegionManager>(); IRegion region = new Region { RegionManager = regionManager }; var myView = new ContentView(); region.Add(myView, "MyView", true); Assert.NotSame(regionManager, myView.GetValue(Prism.Regions.Xaml.RegionManager.RegionManagerProperty)); }
public void RemovingViewAlsoRemovesItFromActiveViews() { IRegion region = new Region(); var model = new ContentView(); region.Add(model); region.Activate(model); Assert.True(region.ActiveViews.Contains(model)); region.Remove(model); Assert.False(region.ActiveViews.Contains(model)); }
public void AddViewReturnsNewRegionManager() { var regionManager = Mock.Of <IRegionManager>(); IRegion region = new Region { RegionManager = regionManager }; var myView = new ContentView(); var returnedRegionManager = region.Add(myView, "MyView", true); Assert.NotSame(regionManager, returnedRegionManager); }
public void AddViewPassesSameScopeByDefaultToNamedView() { var regionManager = Mock.Of <IRegionManager>(); IRegion region = new Region { RegionManager = regionManager }; var myView = new ContentView(); region.Add(myView, "MyView"); Assert.Same(regionManager, myView.GetValue(Prism.Regions.Xaml.RegionManager.RegionManagerProperty)); }
public void RegionExposesCollectionOfContainedViews() { IRegion region = new Region(); var view = new ContentView(); region.Add(view); var views = region.Views; Assert.NotNull(views); Assert.Single(views); Assert.Same(view, views.ElementAt(0)); }
public void RegionExposesCollectionOfContainedViews() { IRegion region = new Region(); object view = new object(); region.Add(view); var views = region.Views; Assert.IsNotNull(views); Assert.AreEqual(1, views.Cast<object>().Count()); Assert.AreSame(view, views.Cast<object>().ElementAt(0)); }
public void WhenNavigationSucceeds_NavigatedIsRaised() { // Prepare var view = new ContentView(); var viewUri = new Uri(view.GetType().Name, UriKind.Relative); IRegion region = new Region(); region.Add(view); string regionName = "RegionName"; var regionManager = new RegionManager(); regionManager.Regions.Add(regionName, region); var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))).Returns(new RegionNavigationJournalEntry()); IContainerExtension container = containerMock.Object; var contentLoader = new RegionNavigationContentLoader(container); IRegionNavigationJournal journal = Mock.Of <IRegionNavigationJournal>(); var target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; bool isNavigatedRaised = false; target.Navigated += delegate(object sender, RegionNavigationEventArgs e) { if (sender == target) { isNavigatedRaised = true; } }; // Act bool isNavigationSuccessful = false; target.RequestNavigate(viewUri, nr => isNavigationSuccessful = nr.Result == true); // Verify Assert.True(isNavigationSuccessful); Assert.True(isNavigatedRaised); }
public void WhenNavigatingAndViewCannotBeAcquired_ThenNavigationResultHasError() { // Prepare var view = new ContentView(); var viewUri = new Uri(view.GetType().Name, UriKind.Relative); IRegion region = new Region(); region.Add(view); string otherType = "OtherType"; var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))).Returns(new RegionNavigationJournalEntry()); IContainerExtension container = containerMock.Object; var targetHandlerMock = new Mock <IRegionNavigationContentLoader>(); targetHandlerMock.Setup(th => th.LoadContent(It.IsAny <IRegion>(), It.IsAny <INavigationContext>())).Throws <ArgumentException>(); IRegionNavigationJournal journal = Mock.Of <IRegionNavigationJournal>(); var target = new RegionNavigationService(container, targetHandlerMock.Object, journal) { Region = region }; // Act Exception error = null; target.RequestNavigate( new Uri(otherType.GetType().Name, UriKind.Relative), nr => { error = nr.Error; }); // Verify bool isViewActive = region.ActiveViews.Contains(view); Assert.False(isViewActive); Assert.IsType <ArgumentException>(error); }
public void WhenNavigating_NavigationIsRecordedInJournal() { // Prepare var view = new ContentView(); var viewUri = new Uri(view.GetType().Name, UriKind.Relative); IRegion region = new Region(); region.Add(view); string regionName = "RegionName"; var regionManager = new RegionManager(); regionManager.Regions.Add(regionName, region); IRegionNavigationJournalEntry journalEntry = new RegionNavigationJournalEntry(); var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))).Returns(journalEntry); IContainerExtension container = containerMock.Object; var contentLoader = new RegionNavigationContentLoader(container); var journalMock = new Mock <IRegionNavigationJournal>(); journalMock.Setup(x => x.RecordNavigation(journalEntry, true)).Verifiable(); IRegionNavigationJournal journal = journalMock.Object; var target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; // Act target.RequestNavigate(viewUri, nr => { }); // Verify Assert.NotNull(journalEntry); Assert.Equal(viewUri, journalEntry.Uri); journalMock.VerifyAll(); }
public void ShouldFindCandidateViewWithFriendlyNameInRegion() { this.ConfigureMockServiceLocator(); // We cannot access the MefRegionNavigationContentLoader directly so we need to call its // GetCandidatesFromRegion method through a navigation request. IRegion testRegion = new Region(); MockView2 view = new MockView2(); testRegion.Add(view); testRegion.Deactivate(view); testRegion.RequestNavigate("SomeView"); Assert.IsTrue(testRegion.Views.Contains(view)); Assert.IsTrue(testRegion.Views.Count() == 1); Assert.IsTrue(testRegion.ActiveViews.Count() == 1); Assert.IsTrue(testRegion.ActiveViews.Contains(view)); }
public void CreatingNewScopesAsksTheRegionManagerForNewInstance() { var regionManagerMock = new Mock <IRegionManager>(); var createRegionManagerCalled = false; regionManagerMock.Setup(x => x.CreateRegionManager()) .Callback(() => createRegionManagerCalled = true) .Returns(Mock.Of <IRegionManager>()); IRegion region = new Region { RegionManager = regionManagerMock.Object }; var myView = new ContentView(); region.Add(myView, "MyView", true); Assert.True(createRegionManagerCalled); }
public void WhenNavigatingAndBothViewAndBindingContextImplementIRegionAware_ThenNavigatedIsInvokesOnNavigation() { // Prepare var region = new Region(); var mockView = new Mock <View>(); var mockIRegionAwareView = mockView.As <IRegionAware>(); mockIRegionAwareView .Setup(ina => ina.IsNavigationTarget(It.IsAny <INavigationContext>())) .Returns(true); var mockIRegionAwareBindingContext = new Mock <IRegionAware>(); mockIRegionAwareBindingContext.Setup(ina => ina.IsNavigationTarget(It.IsAny <INavigationContext>())).Returns(true); mockView.Object.BindingContext = mockIRegionAwareBindingContext.Object; var view = mockView.Object; region.Add(view); var navigationUri = new Uri(view.GetType().Name, UriKind.Relative); var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))).Returns(new RegionNavigationJournalEntry()); IContainerExtension container = containerMock.Object; var contentLoader = new RegionNavigationContentLoader(container); IRegionNavigationJournal journal = Mock.Of <IRegionNavigationJournal>(); var target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; // Act target.RequestNavigate(navigationUri, nr => { }); // Verify mockIRegionAwareView.Verify(v => v.OnNavigatedTo(It.Is <INavigationContext>(nc => nc.Uri == navigationUri))); mockIRegionAwareBindingContext.Verify(v => v.OnNavigatedTo(It.Is <INavigationContext>(nc => nc.Uri == navigationUri))); }
public void WhenClearChildViewsPropertyIsNotSet_ThenChildViewsRegionManagerIsNotCleared() { var regionManager = new MockRegionManager(); var region = new Region(); region.RegionManager = regionManager; var behavior = new ClearChildViewsRegionBehavior(); behavior.Region = region; behavior.Attach(); var childView = new MockFrameworkElement(); region.Add(childView); Assert.AreEqual(regionManager, childView.GetValue(RegionManager.RegionManagerProperty)); region.RegionManager = null; Assert.AreEqual(regionManager, childView.GetValue(RegionManager.RegionManagerProperty)); }
public void WhenViewExistsAndImplementsIRegionAware_ThenViewIsQueriedForNavigationAndNewInstanceIsCreatedIfItRejectsIt() { // Arrange var containerMock = new Mock <IContainerExtension>(); containerMock.Setup(x => x.Resolve(typeof(IActiveRegionHelper))) .Returns(new RegionResolverOverrides()); var region = new Region(); var viewMock = new Mock <View>(); viewMock .As <IRegionAware>() .Setup(v => v.IsNavigationTarget(It.IsAny <INavigationContext>())) .Returns(false) .Verifiable(); region.Add(viewMock.Object); var newView = new TestView(); containerMock.Setup(sl => sl.Resolve(typeof(object), viewMock.Object.GetType().Name)).Returns(newView); var navigationContext = new NavigationContext(null, new Uri(viewMock.Object.GetType().Name, UriKind.Relative)); var navigationTargetHandler = new TestRegionNavigationContentLoader(containerMock.Object); // Act var returnedView = navigationTargetHandler.LoadContent(region, navigationContext); // Assert Assert.Same(newView, returnedView); Assert.True(region.Views.Contains(newView)); viewMock.VerifyAll(); }
public void BeforeNavigating_NavigatingEventIsRaised() { // Prepare object view = new object(); Uri viewUri = new Uri(view.GetType().Name, UriKind.Relative); IRegion region = new Region(); region.Add(view); string regionName = "RegionName"; RegionManager regionManager = new RegionManager(); regionManager.Regions.Add(regionName, region); var serviceLocatorMock = new Mock<IServiceLocator>(); serviceLocatorMock.Setup(x => x.GetInstance<IRegionNavigationJournalEntry>()).Returns(new RegionNavigationJournalEntry()); IServiceLocator serviceLocator = serviceLocatorMock.Object; RegionNavigationContentLoader contentLoader = new RegionNavigationContentLoader(serviceLocator); IRegionNavigationJournal journal = new Mock<IRegionNavigationJournal>().Object; RegionNavigationService target = new RegionNavigationService(serviceLocator, contentLoader, journal); target.Region = region; bool isNavigatingRaised = false; target.Navigating += delegate(object sender, RegionNavigationEventArgs e) { if (sender == target) { isNavigatingRaised = true; } }; // Act bool isNavigationSuccessful = false; target.RequestNavigate(viewUri, nr => isNavigationSuccessful = nr.Result == true); // Verify Assert.IsTrue(isNavigationSuccessful); Assert.IsTrue(isNavigatingRaised); }
public void ShouldFindCandidateViewInRegion() { IUnityContainer container = new UnityContainer(); container.RegisterType<object, MockView>("MockView"); this.ConfigureMockServiceLocator(container); // We cannot access the UnityRegionNavigationContentLoader directly so we need to call its // GetCandidatesFromRegion method through a navigation request. IRegion testRegion = new Region(); MockView view = new MockView(); testRegion.Add(view); testRegion.Deactivate(view); testRegion.RequestNavigate("MockView"); Assert.IsTrue(testRegion.Views.Contains(view)); Assert.IsTrue(testRegion.Views.Count() == 1); Assert.IsTrue(testRegion.ActiveViews.Count() == 1); Assert.IsTrue(testRegion.ActiveViews.Contains(view)); }
public void AddViewReturnsNewRegionManager() { var regionManager = new MockRegionManager(); IRegion region = new Region(); region.RegionManager = regionManager; var myView = new object(); var returnedRegionManager = region.Add(myView, "MyView", true); Assert.AreNotSame(regionManager, returnedRegionManager); }
public void GetViewReturnsNullAfterRemovingViewFromRegion() { IRegion region = new Region(); object myView = new object(); region.Add(myView, "MyView"); region.Remove(myView); Assert.IsNull(region.GetView("MyView")); }
public void AddNamedViewWithNullOrEmptyStringNameThrows() { IRegion region = new Region(); region.Add(new object(), string.Empty); }
public void CreatingNewScopesAsksTheRegionManagerForNewInstance() { var regionManager = new MockRegionManager(); IRegion region = new Region(); region.RegionManager = regionManager; var myView = new object(); region.Add(myView, "MyView", true); Assert.IsTrue(regionManager.CreateRegionManagerCalled); }
public void WhenParentViewGetsActivatedOrDeactivated_ThenSyncedChildViewNotInActiveViewsIsNotUpdated() { var scopedRegionManager = new RegionManager(); var scopedRegion = new Region { Name="MyScopedRegion", RegionManager = scopedRegionManager }; scopedRegionManager.Regions.Add(scopedRegion); var behaviorForScopedRegion = new RegionActiveAwareBehavior { Region = scopedRegion }; behaviorForScopedRegion.Attach(); var childActiveAwareView = new SyncedActiveAwareObject(); var region = new MockPresentationRegion(); var behavior = new RegionActiveAwareBehavior { Region = region }; behavior.Attach(); var view = new MockFrameworkElement(); region.Add(view); RegionManager.SetRegionManager(view, scopedRegionManager); region.Activate(view); scopedRegion.Add(childActiveAwareView); scopedRegion.Deactivate(childActiveAwareView); Assert.IsFalse(childActiveAwareView.IsActive); region.Deactivate(view); Assert.IsFalse(childActiveAwareView.IsActive); region.Activate(view); Assert.IsFalse(childActiveAwareView.IsActive); }
public void AddNamedViewIsAlsoListedInViewsCollection() { IRegion region = new Region(); object myView = new object(); region.Add(myView, "MyView"); Assert.AreEqual(1, region.Views.Cast<object>().Count()); Assert.AreSame(myView, region.Views.Cast<object>().ElementAt(0)); }
public void WhenViewsWithSortHintsAdded_RegionSortsViews() { IRegion region = new Region(); object view1 = new ViewOrder1(); object view2 = new ViewOrder2(); object view3 = new ViewOrder3(); region.Add(view1); region.Add(view2); region.Add(view3); Assert.AreEqual(3, region.Views.Count()); Assert.AreSame(view2, region.Views.ElementAt(0)); Assert.AreSame(view3, region.Views.ElementAt(1)); Assert.AreSame(view1, region.Views.ElementAt(2)); }
public void RemoveViewFiresViewRemovedEvent() { bool viewRemoved = false; IRegion region = new Region(); object model = new object(); region.Views.CollectionChanged += (sender, e) => { if (e.Action == NotifyCollectionChangedAction.Remove) viewRemoved = true; }; region.Add(model); Assert.IsFalse(viewRemoved); region.Remove(model); Assert.IsTrue(viewRemoved); }
public void WhenViewHasBeenRemovedAndRegionManagerPropertyCleared_ThenItCanBeAddedAgainToARegion() { IRegion region = new Region { RegionManager = new MockRegionManager() }; var view = new MockFrameworkElement(); var scopedRegionManager = region.Add(view, null, true); Assert.AreEqual(view, region.Views.First()); region.Remove(view); view.ClearValue(RegionManager.RegionManagerProperty); Assert.AreEqual(0, region.Views.Cast<object>().Count()); var newScopedRegion = region.Add(view, null, true); Assert.AreEqual(view, region.Views.First()); Assert.AreSame(newScopedRegion, view.GetValue(RegionManager.RegionManagerProperty)); }
public void ViewRemovedEventPassesTheViewRemovedInTheEventArgs() { object removedView = null; IRegion region = new Region(); region.Views.CollectionChanged += (sender, e) => { if (e.Action == NotifyCollectionChangedAction.Remove) removedView = e.OldItems[0]; }; object model = new object(); region.Add(model); Assert.IsNull(removedView); region.Remove(model); Assert.AreSame(model, removedView); }
public void ViewAddedEventPassesTheViewAddedInTheEventArgs() { object viewAdded = null; IRegion region = new Region(); region.Views.CollectionChanged += (sender, e) => { if (e.Action == NotifyCollectionChangedAction.Add) { viewAdded = e.NewItems[0]; } }; object model = new object(); Assert.IsNull(viewAdded); region.Add(model); Assert.IsNotNull(viewAdded); Assert.AreSame(model, viewAdded); }
public void RemovingViewAlsoRemovesItFromActiveViews() { IRegion region = new Region(); object model = new object(); region.Add(model); region.Activate(model); Assert.IsTrue(region.ActiveViews.Contains(model)); region.Remove(model); Assert.IsFalse(region.ActiveViews.Contains(model)); }
public void ShowViewFiresViewShowedEvent() { bool viewActivated = false; IRegion region = new Region(); object model = new object(); region.ActiveViews.CollectionChanged += (o, e) => { if (e.Action == NotifyCollectionChangedAction.Add && e.NewItems.Contains(model)) viewActivated = true; }; region.Add(model); Assert.IsFalse(viewActivated); region.Activate(model); Assert.IsTrue(viewActivated); }
public void WhenParentViewWithoutScopedRegionGetsActivatedOrDeactivated_ThenSyncedChildViewIsNotUpdated() { var commonRegionManager = new RegionManager(); var nonScopedRegion = new Region { Name="MyRegion", RegionManager = commonRegionManager }; commonRegionManager.Regions.Add(nonScopedRegion); var behaviorForScopedRegion = new RegionActiveAwareBehavior { Region = nonScopedRegion }; behaviorForScopedRegion.Attach(); var childActiveAwareView = new SyncedActiveAwareObject(); var region = new MockPresentationRegion { RegionManager = commonRegionManager }; var behavior = new RegionActiveAwareBehavior { Region = region }; behavior.Attach(); var view = new MockFrameworkElement(); region.Add(view); RegionManager.SetRegionManager(view, commonRegionManager); region.Activate(view); nonScopedRegion.Add(childActiveAwareView); nonScopedRegion.Activate(childActiveAwareView); Assert.IsTrue(childActiveAwareView.IsActive); region.Deactivate(view); Assert.IsTrue(childActiveAwareView.IsActive); }
public void NavigateDelegatesToIRegionNavigationService() { try { // Prepare IRegion region = new Region(); object view = new object(); region.Add(view); Uri uri = new Uri(view.GetType().Name, UriKind.Relative); Action<NavigationResult> navigationCallback = nr => { }; NavigationParameters navigationParameters = new NavigationParameters(); Mock<IRegionNavigationService> mockRegionNavigationService = new Mock<IRegionNavigationService>(); mockRegionNavigationService.Setup(x => x.RequestNavigate(uri, navigationCallback, navigationParameters)).Verifiable(); Mock<IServiceLocator> mockServiceLocator = new Mock<IServiceLocator>(); mockServiceLocator.Setup(x => x.GetInstance<IRegionNavigationService>()).Returns(mockRegionNavigationService.Object); ServiceLocator.SetLocatorProvider(() => mockServiceLocator.Object); // Act region.RequestNavigate(uri, navigationCallback, navigationParameters); // Verify mockRegionNavigationService.VerifyAll(); } finally { ServiceLocator.SetLocatorProvider(() => null); } }