public void BackFactoryTest() { // - Arrange var registry = new ScreenRegistry(); var cf = new DefaultCommandsFactory(registry); // - Act var commands = cf.Back(); // - Assert Assert.AreEqual(1, commands.Count); var command = commands.FirstOrDefault(); Assert.IsNotNull(command); Assert.IsInstanceOf <BackNavCommand>(command); }
public void ResolveScreenFromRegistryTest() { // - Arrange var screenClass = typeof(ScreenStub); var screen = new ScreenStub(); var screenResolver = new Mock <IScreenResolver>().Object; var screenRegistry = new ScreenRegistry(); screenRegistry.Register(screenClass, screenResolver); // - Act var entry = screenRegistry.Resolve(screen); // - Assert Assert.IsNotNull(entry); Assert.AreSame(screenResolver, entry.Resolver); Assert.IsFalse(entry.IsRoot); }
public void ApplyPendingCommandsTest() { // - Arrange var registry = new ScreenRegistry(); var commandMock = new Mock <INavCommand>(); var commands = new[] { commandMock.Object }; var manager = new NavigationManager(registry); var navigatorMock = new Mock <Navigator>(); // - Act manager.SendCommands(commands); manager.SetNavigator(navigatorMock.Object); // - Assert Assert.IsFalse(manager.HasPendingCommands); commandMock.Verify( it => it.Apply(It.IsAny <Navigator>(), It.IsAny <ScreenStack>() ), Times.Once); }
public void UnsupportedBackToScreenFactoryTest() { // - Arrange var registry = new ScreenRegistry(); var screenStack = new ScreenStack(); var specs = new NavigatorSpecification(false, false, false); var screenA = new Mock <Screen>().Object; var screenB = new ScreenStub(); screenStack.Push(screenA, screenB, screenA, screenA); var cf = new DefaultCommandsFactory(registry); // - Act var commands = cf.BackToScreen(screenStack, specs, typeof(ScreenStub)); // - Assert Assert.AreEqual(2, commands.Count); CollectionAssert.AllItemsAreInstancesOfType(commands, typeof(BackNavCommand)); }
public void GetNavigatorSpecs() { // - Arrange var navigatorSpecs = new NavigatorSpecification(true, false, true); var navigatorMock = new Mock <Navigator>(); navigatorMock .SetupGet(it => it.Specification) .Returns(navigatorSpecs); var registry = new ScreenRegistry(); var manager = new NavigationManager(registry); manager.SetNavigator(navigatorMock.Object); // - Act var specs = manager.Specification; // - Assert Assert.IsNotNull(specs); Assert.AreEqual(navigatorSpecs, specs); navigatorMock.VerifyGet(it => it.Specification, Times.Once); }
public void SendCommandsWithoutNavigatorTest() { // - Arrange var registry = new ScreenRegistry(); var commandMock = new Mock <INavCommand>(); var commands = new[] { commandMock.Object }; var manager = new NavigationManager(registry); // - Act manager.SendCommands(commands); // - Assert Assert.IsTrue(manager.HasPendingCommands); commandMock.Verify( it => it.Apply( It.IsAny <Navigator>(), It.IsAny <ScreenStack>() ), Times.Never ); }
public void ForwardFactoryTest() { // - Arrange var screen = new ScreenStub(); var resolver = new Mock <IScreenResolver>().Object; var registry = new ScreenRegistry(); registry.Register(typeof(ScreenStub), resolver); var cf = new DefaultCommandsFactory(registry); // - Act var commands = cf.Forward(screen); // - Assert Assert.AreEqual(1, commands.Count); var command = commands.FirstOrDefault(); Assert.IsNotNull(command); Assert.IsInstanceOf <ForwardNavCommand>(command); }
public void SupportedBackToRootFactoryTest() { // - Arrange var registry = new ScreenRegistry(); var screenStack = new ScreenStack(); var specs = new NavigatorSpecification(false, true, false); var screenA = new Mock <Screen>().Object; var screenB = new ScreenStub(); screenStack.Push(screenB, screenA, screenA); var cf = new DefaultCommandsFactory(registry); // - Act var commands = cf.BackToRoot(screenStack, specs); // - Assert Assert.AreEqual(1, commands.Count); var command = commands.FirstOrDefault(); Assert.IsInstanceOf <BackToRootNavCommand>(command); }
public void RemoveNavigatorOnApplyingCommands() { // - Arrange var registry = new ScreenRegistry(); var manager = new NavigationManager(registry); var commandToRemoveNavigatorMock = new Mock <INavCommand>(); commandToRemoveNavigatorMock .Setup(it => it.Apply( It.IsAny <Navigator>(), It.IsAny <ScreenStack>())) .Callback(() => manager.RemoveNavigator()); var commandToStayPendingMock = new Mock <INavCommand>(); var commands = new[] { commandToRemoveNavigatorMock.Object, commandToStayPendingMock.Object }; var navigatorMock = new Mock <Navigator>(); // - Act manager.SendCommands(commands); manager.SetNavigator(navigatorMock.Object); // - Assert Assert.IsNull(manager.Navigator); Assert.True(manager.HasPendingCommands); commandToRemoveNavigatorMock.Verify( it => it.Apply(It.IsAny <Navigator>(), It.IsAny <ScreenStack>()), Times.Once); commandToStayPendingMock.Verify( it => it.Apply(It.IsAny <Navigator>(), It.IsAny <ScreenStack>()), Times.Never); }
public void SupportedReplaceFactoryTest() { // - Arrange var registry = new ScreenRegistry(); var screenStack = new ScreenStack(); var specs = new NavigatorSpecification(false, false, true); var screenA = new Mock <Screen>().Object; var screenB = new ScreenStub(); var screenBResolver = new Mock <IScreenResolver>().Object; registry.Register(typeof(ScreenStub), screenBResolver); screenStack.Push(screenB, screenA, screenA); var cf = new DefaultCommandsFactory(registry); // - Act var commands = cf.ReplaceScreen(screenStack, specs, screenB); // - Assert Assert.AreEqual(1, commands.Count); CollectionAssert.AllItemsAreInstancesOfType(commands, typeof(ReplaceScreenNavCommand)); }
public void MiddlewareInvokeOrderTest() { // - Arrange var invokeCounter = 0; var firstMiddlewareBeforeIndex = -1; var firstMiddlewareAfterIndex = -1; var secondMiddlewareBeforeIndex = -1; var secondMiddlewareAfterIndex = -1; var firstMiddlewareMock = new Mock <INavigationMiddleware>(); firstMiddlewareMock .Setup(it => it.BeforeApply( It.IsAny <Screen>(), ref It.Ref <INavCommand> .IsAny)) .Callback(() => firstMiddlewareBeforeIndex = invokeCounter++); firstMiddlewareMock .Setup(it => it.AfterApply( It.IsAny <Screen>(), It.IsAny <INavCommand>())) .Callback(() => firstMiddlewareAfterIndex = invokeCounter++); var secondMiddlewareMock = new Mock <INavigationMiddleware>(); secondMiddlewareMock .Setup(it => it.BeforeApply( It.IsAny <Screen>(), ref It.Ref <INavCommand> .IsAny)) .Callback(() => secondMiddlewareBeforeIndex = invokeCounter++); secondMiddlewareMock .Setup(it => it.AfterApply( It.IsAny <Screen>(), It.IsAny <INavCommand>())) .Callback(() => secondMiddlewareAfterIndex = invokeCounter++); var registry = new ScreenRegistry(); registry.AddMiddleware(firstMiddlewareMock.Object); registry.AddMiddleware(secondMiddlewareMock.Object); var navigatorStub = new Mock <Navigator>().Object; var commandMock = new Mock <INavCommand>(); var commands = new[] { commandMock.Object }; var manager = new NavigationManager(registry); manager.SetNavigator(navigatorStub); // - Act manager.SendCommands(commands); // - Assert Assert.IsFalse(manager.HasPendingCommands); Assert.AreEqual(0, firstMiddlewareBeforeIndex); firstMiddlewareMock.Verify( it => it.BeforeApply( It.IsAny <Screen>(), ref It.Ref <INavCommand> .IsAny), Times.Once ); Assert.AreEqual(1, secondMiddlewareBeforeIndex); secondMiddlewareMock.Verify( it => it.BeforeApply( It.IsAny <Screen>(), ref It.Ref <INavCommand> .IsAny), Times.Once ); Assert.AreEqual(2, firstMiddlewareAfterIndex); firstMiddlewareMock.Verify( it => it.AfterApply( It.IsAny <Screen>(), It.IsAny <INavCommand>()), Times.Once ); Assert.AreEqual(3, secondMiddlewareAfterIndex); secondMiddlewareMock.Verify( it => it.AfterApply( It.IsAny <Screen>(), It.IsAny <INavCommand>()), Times.Once ); }