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);
        }
Пример #2
0
        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));
        }
Пример #11
0
        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
                );
        }