public void AssembleTrain_SetDestination_RemovesAllCarsFromSortingLines()
        {
            // arrange
            var map = Yard.GetLinesMap(Destination);

            // act
            var steps = Yardmaster.AssembleTrain(map);

            // assert
            var sortingLines = Yard.GetSortingLines();

            Assert.IsNotNull(sortingLines);
            Assert.IsFalse(sortingLines.Any(line => line.ContainsCarToDestination(Destination)));
        }
        public void AssembleTrain_SetDestination_HasExpectedCarsInTrainLine()
        {
            // arrange
            var map = Yard.GetLinesMap(Destination);

            // act
            Yardmaster.AssembleTrain(map);

            // assert
            var trainLine = Yard.TrainLine;

            Assert.IsNotNull(trainLine);

            var cars = trainLine.ToString().ToCharArray();

            Assert.AreEqual(2, cars.Count());
            Assert.IsTrue(cars.All(car => Destination.Equals(car)));
        }
        public void AssembleTrain_NotEnoughRoomInSortingLines_DoesNotMakeAnyMovement()
        {
            // arrange
            var lines = new List<char[]>
            {
                "0BDCA".ToCharArray(),
                "0CBDA".ToCharArray(),
                "0DCBA".ToCharArray()
            };
            var yard = new Yard(IdGenerator, Configuration.Object, lines);
            var yardmaster = yard.Yardmaster;
            var map = yard.GetLinesMap(Destination);

            // act
            var steps = yardmaster.AssembleTrain(map);

            // assert
            Assert.IsFalse(steps.Any());
        }
        public void AssembleTrain_NotEnoughRoomInSortingLines_DoesNotMakeAnyMovement()
        {
            // arrange
            var lines = new List <char[]>
            {
                "0BDCA".ToCharArray(),
                "0CBDA".ToCharArray(),
                "0DCBA".ToCharArray()
            };
            var yard       = new Yard(IdGenerator, Configuration.Object, lines);
            var yardmaster = yard.Yardmaster;
            var map        = yard.GetLinesMap(Destination);

            // act
            var steps = yardmaster.AssembleTrain(map);

            // assert
            Assert.IsFalse(steps.Any());
        }
        public void Init()
        {
            var lines = new List <char[]>
            {
                "00ABC".ToCharArray(),
                "0BCAD".ToCharArray()
            };

            Configuration = new Mock <IConfiguration>();
            Configuration.SetupGet(conf => conf.EmptySlotCharacter).Returns('0');
            Configuration.SetupGet(conf => conf.SortingLineMaximumCapacity).Returns(5);
            Configuration.SetupGet(conf => conf.YardLocomotiveMaximumCapacity).Returns(1);

            Destination = 'A';
            IdGenerator = new SequentialIdGenerator();

            Yard       = new Yard(IdGenerator, Configuration.Object, lines);
            Yardmaster = Yard.Yardmaster;
        }
        public void Init()
        {
            var lines = new List<char[]>
            {
                "00ABC".ToCharArray(),
                "0BCAD".ToCharArray()
            };

            Configuration = new Mock<IConfiguration>();
            Configuration.SetupGet(conf => conf.EmptySlotCharacter).Returns('0');
            Configuration.SetupGet(conf => conf.SortingLineMaximumCapacity).Returns(5);
            Configuration.SetupGet(conf => conf.YardLocomotiveMaximumCapacity).Returns(1);

            Destination = 'A';
            IdGenerator = new SequentialIdGenerator();

            Yard = new Yard(IdGenerator, Configuration.Object, lines);
            Yardmaster = Yard.Yardmaster;
        }
Beispiel #7
0
        public static void Main(string[] args)
        {
            var configuration = new Configuration();
            var idGenerator = new SequentialIdGenerator();

            var fileReader = new FileReader();
            var ui = new ConsoleUtil(configuration, fileReader);

            do
            {
                ui.ShowMessage("Welcome to the Marshalling Yard!");

                // Load sorting lines from file or prompt the user for file location
                ui.BeginSection();
                var lines = ui.GetSortingLines();
                IYard yard = null;
                try
                {
                    yard = new Yard(idGenerator, configuration, lines);
                }
                catch (InvalidOperationException)
                {
                    var message = "Cannot create marshalling yard! Check the application's parameters.";
                    ui.ShowErrorMessage(message);
                    break;
                }

                var yardmaster = yard.Yardmaster;

                // Show initial sorting lines
                ui.ShowMessage("Initial sorting lines:");
                var sortingLines = yard.GetSortingLines().Select(line => line.ToString());
                ui.ShowList(sortingLines);

                // Prompt user for destination
                ui.BeginSection();
                var destination = ui.GetDestination();

                // Create navigational map and move cars
                var linesMap = yard.GetLinesMap(destination);
                var steps = yardmaster.AssembleTrain(linesMap);

                // Show list of steps
                ui.BeginSection();
                ui.ShowMessage($"Selected destination: {destination}");
                ui.ShowMessage("Movements:");
                ui.ShowList(steps.Select(step => step.ToString()));

                // Show total of movements
                steps.Select(step => step.ToString());
                ui.ShowMessage($"Total of movements: {steps.Count()}.");

                // Show final sorting lines
                ui.BeginSection();
                ui.ShowMessage("Final sorting lines:");
                sortingLines = yard.GetSortingLines().Select(line => line.ToString());
                ui.ShowList(sortingLines);

                // Show train line
                ui.BeginSection();
                ui.ShowMessage("Train line:");
                var trainLine = yard.TrainLine.ToString();
                ui.ShowList(new[] { trainLine });
                ui.ShowMessage($"Total of cars in train line: {trainLine.Count()}.");

            } while (!ui.HasUserChosenToExit());
        }