Exemple #1
0
        public void When_Running_An_Input_File_We_Get_Expected_Results(string inputFile, string expectedOutputFile)
        {
            var jsonInput          = File.ReadAllText(inputFile);
            var jsonExpectedOutput = File.ReadAllText(expectedOutputFile);

            var input         = JsonConvert.DeserializeObject <RoverInput>(jsonInput);
            var initialFacing = input.initialPosition.Facing;
            var startPosition = new Position(input.initialPosition.Location.X, input.initialPosition.Location.Y, initialFacing);

            var rover = new Rover(startPosition, input.battery, PlanetMap.FromArray(input.terrain), new CommandTranslator());

            var commands = string.Join("", input.commands);

            rover.RunCommands(commands);

            var outputs = rover.GenerateReport();

            var serializerOptions = new JsonSerializerSettings();

            serializerOptions.Converters.Add(new StringEnumConverter());
            var actualOutputs = JsonConvert.SerializeObject(outputs, serializerOptions);



            JObject sourceJObject = JsonConvert.DeserializeObject <JObject>(jsonExpectedOutput);
            JObject targetJObject = JsonConvert.DeserializeObject <JObject>(actualOutputs);
            var     sb            = new StringBuilder();

            if (!JToken.DeepEquals(sourceJObject, targetJObject))
            {
                foreach (KeyValuePair <string, JToken> sourceProperty in sourceJObject)
                {
                    JProperty targetProp = targetJObject.Property(sourceProperty.Key);

                    if (!JToken.DeepEquals(sourceProperty.Value, targetProp.Value))
                    {
                        sb.AppendLine(string.Format("{0} property value is changed from {1} to {2}", sourceProperty.Key, sourceProperty.Value, targetProp.Value));
                    }
                }
            }
            sb.ToString().ShouldBeEmpty();
        }
        public ActionResult <RoverReport> SimulateRun(RoverInput input)
        {
            var rover = new Rover(Position.FromDto(input.initialPosition), input.battery, PlanetMap.FromArray(input.terrain), new CommandTranslator());

            rover.RunCommands(string.Join("", input.commands));

            return(Ok(rover.GenerateReport()));
        }