protected virtual async Task <bool> Navigate(MvxViewModelRequest request, IMvxViewModel viewModel, IMvxBundle?presentationBundle = null, CancellationToken cancellationToken = default) { ValidateArguments(request, viewModel); var args = new MvxNavigateEventArgs(viewModel, NavigationMode.Show, cancellationToken); OnWillNavigate(this, args); if (args.Cancel) { return(false); } var hasNavigated = await ViewDispatcher.ShowViewModel(request).ConfigureAwait(false); if (!hasNavigated) { return(false); } if (viewModel.InitializeTask?.Task != null) { await viewModel.InitializeTask.Task.ConfigureAwait(false); } OnDidNavigate(this, args); return(true); }
public void Test_FailedViewModel() { _fixture.ClearAll(); var mockLocator = new Mock <IMvxViewModelLocator>(); mockLocator.Setup( m => m.Load(It.IsAny <Type>(), It.IsAny <IMvxBundle>(), It.IsAny <IMvxBundle>(), It.IsAny <IMvxNavigateEventArgs>())) .Throws <MvxException>(); var mockCollection = new Mock <IMvxViewModelLocatorCollection>(); mockCollection.Setup(m => m.FindViewModelLocator(It.IsAny <MvxViewModelRequest>())) .Returns(() => mockLocator.Object); var parameters = new Dictionary <string, string> { { "foo", "bar" } }; var request = new MvxViewModelRequest <Test2ViewModel>(new MvxBundle(parameters), null); var state = new MvxBundle(); var loader = new MvxViewModelLoader(mockCollection.Object); var args = new MvxNavigateEventArgs(NavigationMode.Show); Assert.Throws <MvxException>(() => { var viewModel = loader.LoadViewModel(request, state, args); }); }
public async Task Test_NormalViewModel() { _fixture.ClearAll(); IMvxViewModel outViewModel = new Test2ViewModel(); var mockLocator = new Mock <IMvxViewModelLocator>(); mockLocator.Setup( m => m.Load(It.IsAny <Type>(), It.IsAny <IMvxBundle>(), It.IsAny <IMvxBundle>(), It.IsAny <IMvxNavigateEventArgs>())) .Returns(() => outViewModel); var mockCollection = new Mock <IMvxViewModelLocatorCollection>(); mockCollection.Setup(m => m.FindViewModelLocator(It.IsAny <MvxViewModelRequest>())) .Returns(() => mockLocator.Object); var parameters = new Dictionary <string, string> { { "foo", "bar" } }; var request = new MvxViewModelRequest <Test2ViewModel>(new MvxBundle(parameters), null); var state = new MvxBundle(); var loader = new MvxViewModelLoader(mockCollection.Object); var args = new MvxNavigateEventArgs(NavigationMode.Show); var viewModel = await loader.LoadViewModel(request, state, args).ConfigureAwait(false); Assert.Equal(outViewModel, viewModel); }
public void Test_WithReloadState() { _fixture.ClearAll(); _fixture.Ioc.RegisterSingleton <IMvxStringToTypeParser>(new MvxStringToTypeParser()); var testThing = new MockTestThing(); _fixture.Ioc.RegisterSingleton <ITestThing>(testThing); var initBundleObject = new BundleObject { TheBool1 = false, TheBool2 = true, TheGuid1 = Guid.NewGuid(), TheGuid2 = new Guid(123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8), TheInt1 = 123, TheInt2 = 456, TheString1 = "Hello World", TheString2 = null }; var initBundle = new MvxBundle(); initBundle.Write(initBundleObject); var reloadBundleObject = new BundleObject { TheBool1 = true, TheBool2 = true, TheGuid1 = Guid.NewGuid(), TheGuid2 = new Guid(1123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8), TheInt1 = 1234, TheInt2 = 4567, TheString1 = "Foo Bar", TheString2 = null }; var reloadBundle = new MvxBundle(); reloadBundle.Write(reloadBundleObject); var toTest = new MvxDefaultViewModelLocator(); var args = new MvxNavigateEventArgs(NavigationMode.Show); IMvxViewModel viewModel = toTest.Load(typeof(Test1ViewModel), initBundle, reloadBundle, args); Assert.NotNull(viewModel); var typedViewModel = (Test1ViewModel)viewModel; Assert.Equal(initBundle, typedViewModel.BundleInit); Assert.Equal(reloadBundle, typedViewModel.BundleState); Assert.Equal(testThing, typedViewModel.Thing); Assert.Equal(initBundleObject, typedViewModel.TheInitBundleSet); Assert.Equal(reloadBundleObject, typedViewModel.TheReloadBundleSet); Assert.Equal(initBundleObject.TheGuid1, typedViewModel.TheInitGuid1Set); Assert.Equal(initBundleObject.TheGuid2, typedViewModel.TheInitGuid2Set); Assert.Equal(initBundleObject.TheString1, typedViewModel.TheInitString1Set); Assert.Equal(reloadBundleObject.TheGuid1, typedViewModel.TheReloadGuid1Set); Assert.Equal(reloadBundleObject.TheGuid2, typedViewModel.TheReloadGuid2Set); Assert.Equal(reloadBundleObject.TheString1, typedViewModel.TheReloadString1Set); Assert.True(typedViewModel.StartCalled); }
public void Test_LoaderForNull() { _fixture.ClearAll(); var request = new MvxViewModelRequest <MvxNullViewModel>(null, null); var state = new MvxBundle(); var loader = new MvxViewModelLoader(null); var args = new MvxNavigateEventArgs(NavigationMode.Show); var viewModel = loader.LoadViewModel(request, state, args); Assert.IsType <MvxNullViewModel>(viewModel); }
public void Test_MissingDependency() { _fixture.ClearAll(); var bundle = new MvxBundle(); var toTest = new MvxDefaultViewModelLocator(); var args = new MvxNavigateEventArgs(NavigationMode.Show); Assert.Throws <MvxException>(() => { IMvxViewModel viewModel = toTest.Load(typeof(Test4ViewModel), bundle, null, args); }); }
public void Test_FailingDependency() { _fixture.ClearAll(); _fixture.Ioc.RegisterSingleton <ITestThing>(() => new FailingMockTestThing()); var bundle = new MvxBundle(); var toTest = new MvxDefaultViewModelLocator(); var args = new MvxNavigateEventArgs(NavigationMode.Show); Assert.Throws <MvxException>(() => { IMvxViewModel viewModel = toTest.Load(typeof(Test4ViewModel), bundle, null, args); }); }
public void Test_FailingInitialisation() { _fixture.ClearAll(); var testThing = new MockTestThing(); _fixture.Ioc.RegisterSingleton <ITestThing>(testThing); var bundle = new MvxBundle(); var navigationService = _fixture.Ioc.Resolve <IMvxNavigationService>(); var toTest = new MvxDefaultViewModelLocator(navigationService); var args = new MvxNavigateEventArgs(NavigationMode.Show); Assert.Throws <MvxException>(() => { IMvxViewModel viewModel = toTest.Load(typeof(Test4ViewModel), bundle, null, args); }); }
public async Task Test_FailedViewModelLocatorCollection() { _fixture.ClearAll(); var mockCollection = new Mock <IMvxViewModelLocatorCollection>(); mockCollection.Setup(m => m.FindViewModelLocator(It.IsAny <MvxViewModelRequest>())) .Returns(() => null); var parameters = new Dictionary <string, string> { { "foo", "bar" } }; var request = new MvxViewModelRequest <Test2ViewModel>(new MvxBundle(parameters), null); var state = new MvxBundle(); var loader = new MvxViewModelLoader(mockCollection.Object); var args = new MvxNavigateEventArgs(NavigationMode.Show); await Assert.ThrowsAsync <MvxException>(async() => { var viewModel = await loader.LoadViewModel(request, state, args).ConfigureAwait(false); }).ConfigureAwait(false); }