Пример #1
0
        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);
        }
Пример #4
0
        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);
        }
Пример #6
0
        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);
            });
        }
Пример #7
0
        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);
        }