public void WhenNavigatingAndViewImplementsINavigationAware_ThenNavigatedIsInvokedOnNavigation() { // Prepare var region = new Region(); var viewMock = new Mock <INavigationAware>(); viewMock.Setup(ina => ina.IsNavigationTarget(It.IsAny <NavigationContext>())).Returns(true); var view = viewMock.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; RegionNavigationContentLoader contentLoader = new RegionNavigationContentLoader(container); IRegionNavigationJournal journal = new Mock <IRegionNavigationJournal>().Object; RegionNavigationService target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; // Act target.RequestNavigate(navigationUri, nr => { }); // Verify viewMock.Verify(v => v.OnNavigatedTo(It.Is <NavigationContext>(nc => nc.Uri == navigationUri && nc.NavigationService == target))); }
public void WhenNavigatingAndDataContextImplementsINavigationAware_ThenNavigatedIsInvokesOnNavigation() { // Prepare var region = new Region(); Mock <FrameworkElement> mockFrameworkElement = new Mock <FrameworkElement>(); 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 mockINavigationAwareDataContext.Verify(v => v.OnNavigatedTo(It.Is <NavigationContext>(nc => nc.Uri == navigationUri))); }
public void WhenRequestNavigateAwayOnBindingContextAcceptsThroughCallback_ThenNavigationProceeds() { // 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(true)) .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 RegionNavigationContentLoader(container); IRegionNavigationJournal journal = Mock.Of <IRegionNavigationJournal>(); var target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; // Act var navigationSucceeded = false; target.RequestNavigate(navigationUri, nr => { navigationSucceeded = nr.Result == true; }); // Verify view1BindingContextMock.VerifyAll(); Assert.True(navigationSucceeded); Assert.Equal(new object[] { view1, view2 }, region.ActiveViews.ToArray()); }
public void WhenRequestNavigateAwayOnDataContextAcceptsThroughCallback_ThenNavigationProceeds() { // Prepare var region = new Region(); var view1DataContextMock = new Mock <IConfirmNavigationRequest>(); view1DataContextMock .Setup(ina => ina.ConfirmNavigationRequest(It.IsAny <NavigationContext>(), It.IsAny <Action <bool> >())) .Callback <NavigationContext, Action <bool> >((nc, c) => c(true)) .Verifiable(); var view1Mock = new Mock <FrameworkElement>(); var view1 = view1Mock.Object; view1.DataContext = view1DataContextMock.Object; var view2 = new object(); region.Add(view1); region.Add(view2); region.Activate(view1); var navigationUri = new Uri(view2.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 var navigationSucceeded = false; target.RequestNavigate(navigationUri, nr => { navigationSucceeded = nr.Result == true; }); // Verify view1DataContextMock.VerifyAll(); Assert.IsTrue(navigationSucceeded); CollectionAssert.AreEqual(new object[] { view1, view2 }, region.ActiveViews.ToArray()); }
public void WhenNavigationSucceeds_NavigatedIsRaised() { // 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 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.IsTrue(isNavigationSuccessful); Assert.IsTrue(isNavigatedRaised); }
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 WhenNavigating_NavigationIsRecordedInJournal() { // 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); IRegionNavigationJournalEntry journalEntry = new RegionNavigationJournalEntry(); var serviceLocatorMock = new Mock <IServiceLocator>(); serviceLocatorMock.Setup(x => x.GetInstance <IRegionNavigationJournalEntry>()) .Returns(journalEntry); IServiceLocator serviceLocator = serviceLocatorMock.Object; RegionNavigationContentLoader contentLoader = new RegionNavigationContentLoader(serviceLocator); var journalMock = new Mock <IRegionNavigationJournal>(); journalMock.Setup(x => x.RecordNavigation(journalEntry)).Verifiable(); IRegionNavigationJournal journal = journalMock.Object; RegionNavigationService target = new RegionNavigationService(serviceLocator, contentLoader, journal); target.Region = region; // Act target.RequestNavigate(viewUri, nr => { }); // Verify Assert.IsNotNull(journalEntry); Assert.AreEqual(viewUri, journalEntry.Uri); journalMock.VerifyAll(); }
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 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 WhenNavigatingWithQueryString_ViewIsActivated() { // Prepare var view = new ContentView(); var viewUri = new Uri(view.GetType().Name + "?MyQuery=true", 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()); var container = containerMock.Object; var contentLoader = new RegionNavigationContentLoader(container); var journal = Mock.Of <IRegionNavigationJournal>(); var target = new RegionNavigationService(container, contentLoader, journal) { Region = region }; // Act bool isNavigationSuccessful = false; target.RequestNavigate(viewUri, nr => isNavigationSuccessful = nr.Result == true); // Verify Assert.True(isNavigationSuccessful); bool isViewActive = region.ActiveViews.Contains(view); Assert.True(isViewActive); }
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); }