using AOC2021.Models; using AOC2021.Tests.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AOC2021.Test { public class AOCTester { public TestResponse Test(TestRequest request) { Console.WriteLine("Testing " + request.Day); var response = new TestResponse() { Answer = new Models.Answer() }; var day = GetAOCDay(request.Day); var test = GetTextInput(request.Day, "test"); var input = GetTextInput(request.Day, "input"); Console.WriteLine($"Testing {request.Day} Part A, Test data"); if (!string.IsNullOrEmpty(request.Answer.Day_A_Test)) response.Answer.Day_A_Test = day.ExecuteDay(new AOCRequest() { Input = test, Version = AOCVersion.A }).Answer; Console.WriteLine($"Testing {request.Day} Part A, Input data"); if (!string.IsNullOrEmpty(request.Answer.Day_A_Input)) response.Answer.Day_A_Input = day.ExecuteDay(new AOCRequest() { Input = input, Version = AOCVersion.A }).Answer; Console.WriteLine($"Testing {request.Day} Part B, Test data"); if (!string.IsNullOrEmpty(request.Answer.Day_B_Test)) response.Answer.Day_B_Test = day.ExecuteDay(new AOCRequest() { Input = test, Version = AOCVersion.B }).Answer; Console.WriteLine($"Testing {request.Day} Part B, Input data"); if (!string.IsNullOrEmpty(request.Answer.Day_B_Input)) response.Answer.Day_B_Input = day.ExecuteDay(new AOCRequest() { Input = input, Version = AOCVersion.B }).Answer; return response; } private AOCDay GetAOCDay(string route) { AOCDay day = null; var type = typeof(AOCDay); var types = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(s => s.GetTypes()) .Where(p => type.IsAssignableFrom(p) && !p.IsInterface && !p.IsAbstract); foreach (var x in types) { if (x.Name.ToLower() == route.ToLower()) { day = (AOCDay)(IAOCService)Activator.CreateInstance(x); } } return (AOCDay)day; } private string GetTextInput(string day, string type) { foreach (var file in Directory.GetFiles("Input")) { var constructedFileName = $"Input\\{day}_{type}.txt"; if (file.ToLower().Equals(constructedFileName.ToLower())) { return File.ReadAllText(file); } } return null; } } }