예제 #1
0
        public async Task <ICollection <UnitTestResult> > GenerateResultsImpl(SubmissionData data, string snapshot, DevAssignment assignment,
                                                                              ICollection <SnapshotMethod> snapshotMethods)
        {
            using (var handler =
                       new DirectoryHandler(GetTestDirectory(data)))
            {
                var testProject = new TestProjectObj(handler.Directory, assignment.TestProject);
                testProject.MoveFilesToProject(data.SnapshotSourceFiles(snapshot));

                var preprocessorArguments = GetPreprocessorArguments(snapshotMethods);

                var process = new EngineProcess(GetEngineProcessData(handler.Directory,
                                                                     testProject, preprocessorArguments));

                var exitCode = process.Run();
                if (exitCode == 0)
                {
                    process.Stop();
                    return(GetUnitTestResults(assignment.TestProject,
                                              ResultsFile(handler.Directory)));
                }

                EngineReportExceptionData exception;

                using (var reader = process.StandardError)
                {
                    exception = new EngineReportExceptionData(reader.ReadToEnd())
                    {
                        Type = "Build",
                    };
                }
                process.Stop();
                throw exception;
            }
        }
예제 #2
0
        public void Launch(EngineSettings settings)
        {
            Console.WriteLine ("=====================");
            Console.WriteLine ("Launching Game Engine");
            Console.WriteLine ("=====================");

            // TODO: Should this be dependent on "verbose" flag?
            //Console.WriteDebugLine ("Engine ID: " + engineId);

            var context = EngineContext.New (settings);

            context.Settings.OutputType = ConsoleOutputType.Game;

            context.PopulateFromSettings ();

            context.AddCompleteLogic ();

            context.Initialize ();
            //EngineProcess engine = null; // TODO: Remove if not needed
            try
            {
                using(var engine = new EngineProcess (context))
                {
                    engine.Run();
                }
            }
            catch (GameException ex) {
                context.Console.WriteDebugLine (ex.Message);
            }
            //finally {
            //	if (engine != null)
            //		engine.Dispose ();
        }
예제 #3
0
        public EngineContext(EngineProcess engine)
        {
            throw new NotImplementedException ();
            //Engine = engine;

            //Construct ();
        }
예제 #4
0
        public void RunTestMethod(JavaTestClass javaTestClass, JavaTestMethod javaTestMethod,
                                  string originalCodeDirectory,
                                  string traceDirectory, string referenceCode = null)
        {
            var packageClassAndMethod = $"{javaTestClass.Package}.{javaTestClass.Name}#{javaTestMethod.Name}";
            var commandOptions        = GetCommandOptions(packageClassAndMethod, originalCodeDirectory, javaTestClass.ClassPath, javaTestClass.Name, javaTestMethod.Name, traceDirectory, referenceCode);

            var process = new EngineProcess(Command, commandOptions, originalCodeDirectory);

            try
            {
                var exitCode = process.Run();
                javaTestMethod.Passed = exitCode == 0;
            }
            catch (Exception e)
            {
                var exception = new EngineExceptionDto()
                {
                    Report = JavaEngineReportExceptionFactory
                             .GenerateReportForJunitTestRunnerTestMethodProcess(process, e, javaTestClass, javaTestMethod)
                };
                process.Stop();
                throw exception;
            }
            process.Stop();
        }
예제 #5
0
        public static string GenerateReportForCompileVerification(EngineProcess process, IList <string> sourceFiles)
        {
            var compilerError = GetErrorFromProcess(process);
            var joinFiles     = sourceFiles.Join(", ");

            return($"Failure to compile and verify.\nCommand args: {process.Arguments}\nSource Files: {joinFiles}\nCompile Error:\n{compilerError}");
        }
예제 #6
0
        public static string GenerateReportForInstrumentation(EngineProcess p, Exception e)
        {
            var instrumentationError = GetErrorFromProcess(p);

            return("Failure to instrument.\n" +
                   $"{GetMessageFromException(e)}\n" +
                   $"Instrumentation Error:\n{instrumentationError}");
        }
예제 #7
0
        public void Compile(string workingDirectory, IList <string> sourceFiles)
        {
            var process = new EngineProcess(Command, GetCommandOptions(sourceFiles), workingDirectory);

            RunProcess(process);
            VerifyCompilation(process, sourceFiles);
            process.Stop();
        }
예제 #8
0
        public static string GenerateReportForCompileProcess(EngineProcess process, Exception e)
        {
            var compileError = GetErrorFromProcess(process);

            return($"Failure to compile.\n" +
                   $"{GetMessageFromException(e)}\n" +
                   $"Compile Error:\n{compileError}");
        }
예제 #9
0
        public static string GenerateReportForRawCoveragerReport(EngineProcess process, Exception exception, IList <JavaTestClass> javaClasses)
        {
            var reportProcess = GetErrorFromProcess(process);

            return($"Failure to run Raw Coverage Report.\n" +
                   $"Name of Java Class:{GetNamesFromJavaClasses(javaClasses)}\n" +
                   $"{GetMessageFromException(exception)}\n" +
                   $"Report Process:\n{reportProcess}");
        }
예제 #10
0
        public static string GenerateReportForReflectionProcess(EngineProcess p, Exception e, JavaTestClass javaTestClass)
        {
            var reflectionError = GetErrorFromProcess(p);
            var name            = GetNameFromJavaClass(javaTestClass);

            return($"Failure to reflect.\n" +
                   $"Name of Java Class: {name}\n" +
                   $"{GetMessageFromException(e)}\n" +
                   $"Reflection Error: {reflectionError}");
        }
예제 #11
0
        public static string GenerateReportForJunitTestRunnerTestMethodProcess(EngineProcess p, Exception e,
                                                                               JavaTestClass javaTestClass, JavaTestMethod javaTestMethod)
        {
            var name           = GetNameFromJavaMethod(javaTestClass, javaTestMethod);
            var junitTestError = GetErrorFromProcess(p);

            return("Failure to junit test runner for test testMethod.\n" +
                   $"Name of Java Method: {name}\n" +
                   $"{GetMessageFromException(e)}\n" +
                   $"Junit Test Error:\n{junitTestError}");
        }
예제 #12
0
        public static string GenerateReportForTraceJavaMethod(EngineProcess p, Exception e, JavaTestClass javaTestClass,
                                                              JavaTestMethod javaTestMethod)
        {
            var name       = GetNameFromJavaMethod(javaTestClass, javaTestMethod);
            var traceError = GetErrorFromProcess(p);

            return("Failure to run trace on java testMethod.\n" +
                   $"Name of Java Method: {name}\n" +
                   $"{GetMessageFromException(e)}\n" +
                   $"Trace Error:\n{traceError}");
        }
예제 #13
0
 private void VerifyCompilation(EngineProcess process, IList <string> sourceFiles)
 {
     if (!VerifyCompile(sourceFiles))
     {
         var exception = new EngineExceptionDto()
         {
             Report = JavaEngineReportExceptionFactory.GenerateReportForCompileVerification(process, sourceFiles),
         };
         process.Stop();
         throw exception;
     }
 }
예제 #14
0
        public void Run_IncorrectClangHelpShouldNotReutrnExitCodeOfOne()
        {
            var process = new EngineProcess(
                new EngineProcessData()
            {
                WaitForExit      = 10000,
                Command          = "clang++",
                Arguments        = "help",
                WorkingDirectory = Directory.GetCurrentDirectory()
            });
            var code = process.Run();

            Assert.AreNotEqual(0, code);
        }
예제 #15
0
        public async Task AnalyzePosition_Should_ShouldAnalyzePositionAfterACoupleOfMoves()
        {
            var engineProcess   = new EngineProcess();
            var stockfishEngine = new StockfishEngine(engineProcess);
            await stockfishEngine.Initialize(EngineConsts.defaultAnalyzeDepth);

            await stockfishEngine.SetPosition("e2e4", "e7e5", "f1c4", "f8e7");

            var result = await stockfishEngine.AnalyzePosition();

            Assert.Contains("bestmove", result);
            Assert.Contains("d1h5", result);
            Assert.Contains("ponder", result);
        }
예제 #16
0
        public void Run_IncorrectClangHelpShouldHaveErrorOutput()
        {
            var process = new EngineProcess(
                new EngineProcessData()
            {
                WaitForExit      = 10000,
                Command          = "clang++",
                Arguments        = "help",
                WorkingDirectory = Directory.GetCurrentDirectory()
            });

            process.Run();
            var error = process.StandardError;

            Assert.IsFalse(error.EndOfStream);
        }
예제 #17
0
        public async Task BuildEngineEvaluations_Should_EvaluateWithStockfishAndSaveToDbIfEvaluationNotFound()
        {
            using var context = new ChessMetersContext(options, new OperationalStoreOptionsMigrations());
            var engineProcess          = new EngineProcess();
            var stockfishEngine        = new StockfishEngine(engineProcess);
            var engineAnalyzeEvaluator = new EngineEvaluationBuilder(stockfishEngine, context);

            var treeMove = await context.TreeMoves.FirstAsync(x => !x.ParentTreeMoveId.HasValue);

            await engineAnalyzeEvaluator.StartNewGame(EngineConsts.defaultAnalyzeDepth);

            var result = await engineAnalyzeEvaluator.BuildEngineEvaluations(treeMove);

            Assert.NotNull(result);
            Assert.True(result.Id > 0);
        }
예제 #18
0
 private void RunProcess(EngineProcess process)
 {
     try
     {
         process.Run();
     }
     catch (Exception e)
     {
         var exception = new EngineExceptionDto()
         {
             Report = JavaEngineReportExceptionFactory
                      .GenerateReportForCompileProcess(process, e)
         };
         process.Stop();
         throw exception;
     }
 }
예제 #19
0
        public async Task <ICollection <UnitTest> > GenerateResults(PreAssignment assignment, DirectoryHandler handler, string root)
        {
            using (var testHandler = new DirectoryHandler(GetTestDirectory(handler.Directory)))
            {
                var testProject = new TestProjectObj(testHandler.Directory, assignment.TestProject);

                if (!Directory.Exists(testProject.TestFolder))
                {
                    throw new EngineAssignmentExceptionData()
                          {
                              Report = new PreAssignmentBadTestFolderReport()
                          }
                }
                ;

                testProject.MoveFilesToProject(root);

                var preprocessorArguments = GetPreprocessorArguments(assignment.Solution.MethodDeclarations);

                var process = new EngineProcess(GetEngineProcessData(testHandler.Directory,
                                                                     testProject, preprocessorArguments));

                var exitCode = process.Run();

                if (exitCode == 0)
                {
                    process.Stop();
                    return(GetUnitTestResults(ResultsFile(testHandler.Directory)));
                }

                EngineAssignmentExceptionData exception;

                using (var reader = process.StandardError)
                {
                    exception = new EngineAssignmentExceptionData()
                    {
                        Report = new PreAssignmentBuildFailureReport()
                        {
                            Report = reader.ReadToEnd(),
                        }
                    };
                }
                process.Stop();
                throw exception;
            }
        }
        public async Task Schedule_Should_ParsePGNAndScheduleReport()
        {
            using var context = new ChessMetersContext(options, new OperationalStoreOptionsMigrations());

            var engineProcess          = new EngineProcess();
            var stockfishEngine        = new StockfishEngine(engineProcess);
            var engineAnalyzeEvaluator = new EngineEvaluationBuilder(stockfishEngine, context);
            var gameAnalyzer           = new TreeMovesBuilder(context, engineAnalyzeEvaluator);

            var gameConverter = new GameConverter();

            var reportGenerator = new ReportGenerator(gameAnalyzer, null, context);
            var reportId        = await context.Reports.Select(x => x.Id).FirstAsync();

            var report = await reportGenerator.Schedule(reportId, EngineConsts.defaultAnalyzeDepth);

            Assert.NotNull(report);
        }
예제 #21
0
        public void GenerateXmlForJavaClass(string codeDirectory, string reflectionDirectory, JavaTestClass javaTestClass)
        {
            var process = new EngineProcess(Command, GetCommandOptions(codeDirectory, javaTestClass, reflectionDirectory), codeDirectory);

            try
            {
                process.Run();
            }
            catch (Exception e)
            {
                var exception = new EngineExceptionDto()
                {
                    Report = JavaEngineReportExceptionFactory
                             .GenerateReportForReflectionProcess(process, e, javaTestClass)
                };
                process.Stop();
                throw exception;
            }
            process.Stop();
        }
예제 #22
0
        public void SetupJUnitCore(string workingDirectory, IList <JavaTestClass> javaClasses)
        {
            var process = new EngineProcess(Command, GetCommonOptionsForJunitCore(javaClasses), workingDirectory);

            try
            {
                process.Run();
            }
            catch (Exception e)
            {
                var exception = new EngineExceptionDto()
                {
                    Report = JavaEngineReportExceptionFactory
                             .GenerateReportForRawCoveragerJunitCore(process, e, javaClasses)
                };
                process.Stop();
                throw exception;
            }
            process.Stop();
        }
예제 #23
0
        public void TraceJavaMethod(JavaTestClass javaTestClass, JavaTestMethod testMethod, string workingDirectory)
        {
            var commandOptions = GetCommandOptions(javaTestClass.Name, testMethod.Name, javaTestClass.ClassPath);
            var process        = new EngineProcess(Command, commandOptions, workingDirectory);

            try
            {
                process.Run();
            }
            catch (Exception e)
            {
                var exception = new EngineExceptionDto()
                {
                    Report = JavaEngineReportExceptionFactory
                             .GenerateReportForTraceJavaMethod(process, e, javaTestClass, testMethod)
                };
                process.Stop();
                throw exception;
            }
            process.Stop();
        }
        public async Task BuildTree_Should_SetupTreeAndSaveToDbIfMoveNotFound()
        {
            string pgn = "[Event \"Live Chess\"] [Site \"Chess.com\"] [Date \"2020.11.25\"] [Round \"?\"] [White \"claudiuoprea\"] [Black \"Cest_Sebastian\"] [Result \"0-1\"] [ECO \"C26\"] [WhiteElo \"1174\"] [BlackElo \"1212\"] [TimeControl \"600\"] [EndTime \"5:58:12 PST\"] [Termination \"Cest_Sebastian won by resignation\"] 1. e4 {[%timestamp 1]} 1... e5 {[%timestamp 1]} 2. Bc4 {[%timestamp 1]} 2... Nf6 {[%timestamp 1]} 3. Nc3 {[%timestamp 16]} 3... Nc6 {[%timestamp 253]} 4. d3 {[%timestamp 21]} 4... Bb4 {[%timestamp 93]} 5. f4 {[%timestamp 79]} 5... Bxc3+ {[%timestamp 70]} 6. bxc3 {[%timestamp 10]} 6... O-O {[%timestamp 80]} 7. fxe5 {[%timestamp 91]} 7... Nxe5 {[%timestamp 66]} 8. Bb3 {[%timestamp 33]} 8... d6 {[%timestamp 52]} 9. Nf3 {[%timestamp 24]} 9... Bg4 {[%timestamp 27]} 10. h3 {[%timestamp 114]} 10... Bxf3 {[%timestamp 14]} 11. gxf3 {[%timestamp 39]} 11... d5 {[%timestamp 33]} 12. Rg1 {[%timestamp 107]} 12... dxe4 {[%timestamp 58]} 13. Bh6 {[%timestamp 48]} 13... Re8 {[%timestamp 135]} 14. Bxg7 {[%timestamp 126]} 14... Ng6 {[%timestamp 1]} 15. Bh6 {[%timestamp 250]} 15... exf3+ {[%timestamp 59]} 16. Kd2 {[%timestamp 49]} 16... f2 {[%timestamp 174]} 17. Rg2 {[%timestamp 187]} 17... Ne4+ {[%timestamp 237]} 18. Kc1 {[%timestamp 74]} 18... Nxc3 {[%timestamp 142]} 19. Qd2 {[%timestamp 109]} 19... f1=Q+ {[%timestamp 58]} 20. Kb2 {[%timestamp 60]} 20... Na4+ {[%timestamp 431]} 21. Bxa4 {[%timestamp 175]} 21... Qd4+ {[%timestamp 76]} 22. Ka3 {[%timestamp 128]} 22... Qc5+ {[%timestamp 114]} 23. Kb3 {[%timestamp 112]} 23... Qd5+ {[%timestamp 60]} 24. Ka3 {[%timestamp 35]} 24... Qfxg2 {[%timestamp 40]} 25. Qc3 {[%timestamp 74]} 25... Qd6+ {[%timestamp 179]} 26. Kb3 {[%timestamp 149]} 26... Qgd5+ {[%timestamp 69]} 27. Kb2 {[%timestamp 29]} 27... Qb6+ {[%timestamp 96]} 28. Bb3 {[%timestamp 52]} 28... Qdd4 {[%timestamp 1]} 29. Qxd4 {[%timestamp 1]} 29... Qxd4+ {[%timestamp 1]} 30. Ka3 {[%timestamp 31]} 0-1";

            using var context = new ChessMetersContext(options, new OperationalStoreOptionsMigrations());
            var engineProcess          = new EngineProcess();
            var stockfishEngine        = new StockfishEngine(engineProcess);
            var engineAnalyzeEvaluator = new EngineEvaluationBuilder(stockfishEngine, context);
            var gameAnalyzer           = new TreeMovesBuilder(context, engineAnalyzeEvaluator);

            var user = await context.Users.FirstAsync();

            var report = new Report
            {
                PGN         = pgn,
                Description = $"Unit test ${DateTime.Now}",
                UserId      = user.Id
            };

            await context.Reports.AddAsync(report);

            await context.SaveChangesAsync();

            var moves = await gameAnalyzer.BuildTree(EngineConsts.defaultAnalyzeDepth, new Game
            {
                ReportId = report.Id,
                Result   = "0-1",
                Moves    = "d2d4 d7d5 c2c4 c7c6 g1f3"
            });

            Assert.Equal(5, moves.Count());
            Assert.All(moves, x => Assert.NotEqual(0, x.Id));
            Assert.Null(moves.First().ParentTreeMoveId);
            Assert.NotNull(moves.Last().ParentTreeMoveId);
            Assert.NotNull(moves.Last().ParentTreeMove);
        }
예제 #25
0
 public UCIEngine(UCIEngineStartupArgs args, EngineProcess process)
     : base(args, process)
 {
     UserSuppliedArgs = args;
 }
예제 #26
0
        public EngineProcess CreateProcess(EngineContext context)
        {
            var process = new EngineProcess (context);

            return process;
        }
예제 #27
0
 public MockEngineContext(EngineProcess process)
     : base(process)
 {
     throw new NotImplementedException ();
 }
예제 #28
0
        public EngineProcess CreateProcess(EngineContext context)
        {
            var process = new EngineProcess(context);

            return(process);
        }
예제 #29
0
 public void AttachProcess(EngineProcess process)
 {
     Engine = process;
 }
예제 #30
0
 private static string GetErrorFromProcess(EngineProcess process)
 => process.StandardError.ReadToEnd();
예제 #31
0
 public MockEngineContext(EngineProcess process) : base(process)
 {
     throw new NotImplementedException();
 }