public async Task Test_Router_Presents_Transition_Resolved_From_OnTransition() { var viewModel = new TestViewModel(); var subject = new Subject <TransitionEvent>(); IPresenter presenter = Substitute.For <IPresenter>(); Locator.CurrentMutable.Register(() => presenter, typeof(TestPresenterType)); Locator.CurrentMutable.Register(() => viewModel, typeof(TestViewModel)); var initParams = new RouterConfig() { ViewModelMap = new Dictionary <Type, RouteActions>() { { typeof(TestViewModel), new RouteActions() { Actions = new IRouteAction[] { RouteActions.Navigate(), RouteActions.Present(typeof(TestPresenterType)) } } } } }; Navigator.OnTransition.Returns(subject); await Router.InitAsync(initParams); Router.ShowAsync <TestViewModel, TestParams>(); presenter.Received(1).PresentAsync(viewModel, null); }
public async Task Test_ShowAsync_Creates_Presenter_If_Router_Actions_Specify_Present() { Func <TestPresenterType> presenterConstructor = Substitute.For <Func <TestPresenterType> >(); presenterConstructor().Returns(new TestPresenterType()); Locator.CurrentMutable.Register(() => new TestViewModel(), typeof(TestViewModel)); Locator.CurrentMutable.Register(presenterConstructor, typeof(TestPresenterType)); var initParams = new RouterConfig() { ViewModelMap = new Dictionary <Type, RouteActions>() { { typeof(TestViewModel), new RouteActions() { Actions = new IRouteAction[] { RouteActions.Present(typeof(TestPresenterType)) } } } } }; await Router.InitAsync(initParams); await Router.ShowAsync(typeof(TestViewModel), new TestParams()); presenterConstructor.Received(1)(); }
public async Task Test_Router_Disposes_Of_Presenters_After_Transition() { IPresenter presenter = Substitute.For <IPresenter>(); var disposable = new BooleanDisposable(); presenter.PresentAsync(Arg.Any <object>(), Arg.Any <object>()).Returns(disposable); Locator.CurrentMutable.Register(() => new TestViewModel(), typeof(TestViewModel)); Locator.CurrentMutable.Register(() => presenter, typeof(TestPresenterType)); var initParams = new RouterConfig() { ViewModelMap = new Dictionary <Type, RouteActions>() { { typeof(TestViewModel), new RouteActions() { Actions = new IRouteAction[] { RouteActions.Navigate(), RouteActions.Present(typeof(TestPresenterType)) } } } } }; Transition trans = null; Navigator.PushAsync(Arg.Any <Transition>()).Returns(c => { trans = c.Arg <Transition>(); return(Task.FromResult(0)); }); Navigator.PopAsync().Returns(c => trans); await Router.InitAsync(initParams); await Router.ShowAsync <TestViewModel, TestParams>(); await Router.ShowAsync <TestViewModel, TestParams>(); disposable.IsDisposed.Should().BeFalse(); await Router.BackAsync(); disposable.IsDisposed.Should().BeTrue(); }
public async Task Test_ShowAsync_Calls_PresentAsync_On_Created_Presenter() { IPresenter presenter = Substitute.For <IPresenter>(); Locator.CurrentMutable.Register(() => new TestViewModel(), typeof(TestViewModel)); Locator.CurrentMutable.Register(() => presenter, typeof(TestPresenterType)); var subject = new Subject <Transition>(); var initParams = new RouterConfig() { ViewModelMap = new Dictionary <Type, RouteActions>() { { typeof(TestViewModel), new RouteActions() { Actions = new IRouteAction[] { RouteActions.Present(typeof(TestPresenterType)) } } } } }; Navigator.PushAsync(Arg.Any <Transition>()).Returns(ci => { subject.OnNext(ci.Arg <Transition>()); return(Task.FromResult(0)); }); await Router.InitAsync(initParams); await Router.ShowAsync(typeof(TestViewModel), new TestParams()); presenter.Received(1).PresentAsync(Arg.Any <object>(), Arg.Any <object>()); }
public IRouteBuilder Present(Type presenterType) { actions.Add(RouteActions.Present(presenterType)); return(this); }