public void UnsupportedReplaceFactoryTest()
        {
            // - 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();
            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(2, commands.Count);
            Assert.IsInstanceOf <BackNavCommand>(
                commands.ElementAtOrDefault(0));
            Assert.IsInstanceOf <ForwardNavCommand>(
                commands.ElementAtOrDefault(1));
        }
        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 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 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 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));
        }