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())); }