Beispiel #1
0
        public async Task Generate_ShouldReturnWithIdNotEqualZero()
        {
            var report = await Generator.Generate(Data, MockSnapshots.GetFirstCalculatorSnapshotName(),
                                                  Assignment, new AbstractSyntaxTreeNode("Root"));

            Assert.AreNotEqual(0, report.Id);
        }
Beispiel #2
0
        public async Task Generate_ShouldReturnASucessfulReport()
        {
            var report = await Generator.Generate(Data, MockSnapshots.GetFirstCalculatorSnapshotName(),
                                                  Assignment, new AbstractSyntaxTreeNode("Root"));

            Assert.AreEqual(SnapshotReport.SnapshotReportTypes.Success, report.Type);
        }
Beispiel #3
0
        public void Init()
        {
            Root = Path.Combine(MockSnapshots.GetShortRoot(), "Powershell");
            Data = new SubmissionData(new StudentSubmissionDto()
            {
                StudentName    = "StudentName",
                ClassName      = "ClassName",
                SnapshotFolder = MockSnapshots.GetCalculatorSnapshots(),
            }, Root);

            Assignment = new Assignment()
            {
                TestProject = new TestProject()
                {
                    Id              = 1,
                    Files           = MockSnapshots.GetCalculatorTestProjectFiles(),
                    TestFolder      = MockSnapshots.GetCalculatorTestProjectFolder(),
                    TestDllFile     = MockSnapshots.GetCalculatorTestProjectDll(),
                    TestProjectFile = MockSnapshots.GetCalculatorTestProjectFile(),
                    UnitTests       = MockSnapshots.GetCalculatorUnitTests(),
                },
                TestProjectId = 1,
            };
            Generator = new PowershellUnitTestGenerator(
                Microsoft.Extensions.Options.Options.Create(
                    new PowershellOptions()
            {
                CommandPath = MockSnapshots.PowershellScript(),
                PassedValue = MockSnapshots.PowershellPassedValue(),
                ResultsFile = "test_results.txt",
            }));
        }
 public void HasSourceFile_ShouldThrowExceptionForBadSnapshotName()
 {
     using (var data = new SubmissionData(Submission, Root))
     {
         data.HasSourceFile("Random", MockSnapshots.GetCalculatorFile());
     }
 }
 public void Create_ShouldThrowExceptionForInvalidFile()
 {
     Generator.CreateFromFile(Data,
                              Path.Combine(Data.SnapshotFolder,
                                           MockSnapshots.GetFirstCalculatorSnapshotName(),
                                           "Random.hpp"));
 }
Beispiel #6
0
        public async Task AddSubmissionToStudentSubmission_ShouldPassForAlreadyInCollection()
        {
            var snapshotSubmission = await GeneratorObj.AddSubmissionToStudentSubmission(
                MockSnapshots.GetFirstCalculatorSnapshotName());

            Assert.AreEqual(FirstCalculatorSubmissionId, snapshotSubmission.Id);
        }
Beispiel #7
0
        public void Init()
        {
            Root = Path.Combine(Directory.GetCurrentDirectory(), nameof(SnapshotReportGeneratorTests));
            AbstractSyntaxTreeGenerator = new MockAbstractSyntaxTreeGenerator {
                Throw = false
            };
            Reports   = new MockRepository <SnapshotReport, int>();
            Generator = new SnapshotReportGenerator(
                AbstractSyntaxTreeGenerator,
                new MockAbstractSyntaxTreeClassExtractor(), Reports,
                new MockSnapshotMethodGenerator(),
                new MockUnitTestGenerator()
                );
            Data = new SubmissionData(new StudentSubmissionDto()
            {
                ClassName      = "ClassName",
                StudentName    = "StudentName",
                SnapshotFolder = MockSnapshots.GetCalculatorSnapshots(),
            }, Root);

            Assignment = new Assignment()
            {
                Filename = MockSnapshots.GetCalculatorFile(),
                Solution = new AssignmentSolution()
                {
                    Name = MockSnapshots.GetCalculatorClassName(),
                },
            };
        }
        public void Create_ShouldReturnValidNodeForCalculatorSnapshot()
        {
            var node = Generator.CreateFromFile(Data,
                                                Data.SnapshotSourceFileFullPath(MockSnapshots.GetFirstCalculatorSnapshotName(),
                                                                                MockSnapshots.GetCalculatorFile()));

            Assert.AreEqual(ValidNode, node.Value);
        }
 public void Extract_GetClassWithDefaultParameterShouldHaveHeight()
 {
     using (var reader = MockSnapshots.GetClassWithDefaultParameterAbstractSyntaxTreeReader())
     {
         var node = Extractor.Extract(reader);
         Assert.AreEqual(MockSnapshots.GetClassWithDefaultParameterHeight(), node.Height);
     }
 }
Beispiel #10
0
        public async Task Generate_ShouldGenerateSnapshotsForTheRemaining()
        {
            var expected = MockSnapshots.GetNumberOfNewSnapshotsAfterSecond();

            var actual = (await Generator.Generate(Data, Assignment)).Count;

            Assert.AreEqual(expected, actual);
        }
Beispiel #11
0
        public async Task AddSubmissionToStudentSubmission_ShouldReturnIdNotNull()
        {
            await GeneratorObj.AddSubmissionToStudentSubmission(
                MockSnapshots.GetThirdCalculatorSnapshotName());

            var actual = (await SnapshotSubmission.GetAll()).Count();

            Assert.AreNotEqual(0, actual);
        }
Beispiel #12
0
        public async Task Generate_ShouldReturnAFailureReportForTreeGeneratorThrow()
        {
            AbstractSyntaxTreeGenerator.Throw = true;
            var report = await Generator.Generate(Data,
                                                  MockSnapshots.GetFirstCalculatorSnapshotName(),
                                                  Assignment, new AbstractSyntaxTreeNode("Root"));

            Assert.AreEqual(SnapshotReport.SnapshotReportTypes.Failure, report.Type);
        }
        public void Extract_ShouldFindMethod()
        {
            var node    = Extractor.ExtractOrDefault(Root, MethodDeclaration);
            var visitor = new MockClangAbstractSyntaxTreeMethodExtractorSearchVisitor(
                MockSnapshots.GetCalculatorAbstractSyntaxTreeAddValue());

            node.PreOrder(visitor);

            Assert.IsTrue(visitor.Found);
        }
Beispiel #14
0
        public async Task Generate_ShouldAddToReports()
        {
            var expected = (await Reports.GetAll()).Count() + 1;
            await Generator.Generate(Data, MockSnapshots.GetFirstCalculatorSnapshotName(),
                                     Assignment, new AbstractSyntaxTreeNode("Root"));

            var actual = (await Reports.GetAll()).Count();

            Assert.AreEqual(expected, actual);
        }
Beispiel #15
0
        public async Task AddSubmissionToStudentSubmission_ShouldAddToStudentCollection()
        {
            var expected = (await SnapshotSubmission.GetAll()).Count() + 1;
            await GeneratorObj.AddSubmissionToStudentSubmission(
                MockSnapshots.GetThirdCalculatorSnapshotName());

            var actual = (await SnapshotSubmission.GetAll()).Count();

            Assert.AreEqual(expected, actual);
        }
Beispiel #16
0
        public void Extract_ShouldFindNodeWithDivLine()
        {
            var visitor = new MockClangAbstractSyntaxTreeClassExtractorSearchVisitor(
                MockSnapshots.GetCalculatorAbstractSyntaxTreeDivValue());

            var node = Extractor.Extract(Root, MockSnapshots.GetCalculatorClassName());

            node.PreOrder(visitor);

            Assert.IsTrue(visitor.Found);
        }
 public void HasSourceFile_ShouldPassForEachSnapshot()
 {
     using (var data = new SubmissionData(Submission, Root))
     {
         foreach (var folder in data.SnapshotFolderNames())
         {
             Assert.IsTrue(data.HasSourceFile(folder,
                                              MockSnapshots.GetCalculatorFile()));
         }
     }
 }
        public void Init()
        {
            Submission = new StudentSubmissionDto()
            {
                StudentName    = StudentName,
                ClassName      = ClassName,
                SnapshotFolder = MockSnapshots.GetCalculatorSnapshots(),
            };

            Root = Path.Combine(Directory.GetCurrentDirectory(), nameof(SubmissionDataTests));
        }
Beispiel #19
0
        public async Task Generate_ShouldHaveOneFailTestForDivisionNotDeclared()
        {
            var methods = new CalculatorSnapshotMethods()
            {
                Addition       = true,
                Division       = false,
                Multiplication = true,
                Subtraction    = true,
            }.GetMethods();
            var results = await Generator.GenerateResults(Data, MockSnapshots.GetLastCalculatorSnpahostName(),
                                                          Assignment, methods);

            Assert.AreEqual(1, results.Count(r => !r.Passed));
        }
Beispiel #20
0
        public async Task AddSubmissionToStudentSubmission_UnzipFilesShouldGetFile()
        {
            var snapshotSubmission = await GeneratorObj.AddSubmissionToStudentSubmission(
                MockSnapshots.GetThirdCalculatorSnapshotName());

            var files    = (await SnapshotSubmission.Get(snapshotSubmission.Id)).Files;
            var snapshot = "Snapshot";

            EngineFileUtilities.ExtractZip(Data.Root, snapshot, files);

            var path = Path.Combine(Data.Root, snapshot, MockSnapshots.GetCalculatorFile());

            Assert.IsTrue(File.Exists(path));
        }
Beispiel #21
0
        public async Task Generate_ShouldReturnSameNumberOfTestsAsTestProject()
        {
            var methods = new CalculatorSnapshotMethods()
            {
                Addition       = true,
                Division       = true,
                Multiplication = true,
                Subtraction    = true,
            }.GetMethods();
            var results = await Generator.GenerateResults(Data, MockSnapshots.GetLastCalculatorSnpahostName(),
                                                          Assignment, methods);

            Assert.AreEqual(Assignment.TestProject.UnitTests.Count, results.Count);
        }
 public void Create_ShouldThrowAndCleanupDirectoryForInvalidFile()
 {
     try
     {
         Generator.CreateFromFile(Data,
                                  Path.Combine(Data.SnapshotFolder,
                                               MockSnapshots.GetFirstCalculatorSnapshotName(),
                                               "Random.hpp"));
         Assert.Fail();
     }
     catch (EngineReportExceptionData)
     {
         Assert.IsFalse(Directory.Exists(Generator.GetCompilationDirectory(Data)));
     }
 }
Beispiel #23
0
        public async Task Generate_ShouldReturnPassedForAllTests()
        {
            var methods = new CalculatorSnapshotMethods()
            {
                Addition       = true,
                Division       = true,
                Multiplication = true,
                Subtraction    = true,
            }.GetMethods();
            var results = await Generator.GenerateResults(Data, MockSnapshots.GetLastCalculatorSnpahostName(),
                                                          Assignment, methods);

            foreach (var result in results)
            {
                Assert.IsTrue(result.Passed);
            }
        }
 public void Init()
 {
     Root = Path.Combine(Directory.GetCurrentDirectory(), nameof(ClangAbstractSyntaxTreeGeneratorTests));
     Data = new SubmissionData(new StudentSubmissionDto()
     {
         SnapshotFolder = MockSnapshots.GetCalculatorSnapshots(),
         StudentName    = "Student",
         ClassName      = "Class",
     }, Root);
     Generator = new ClangAbstractSyntaxTreeGenerator(
         Microsoft.Extensions.Options.Options.Create(new ClangOptions()
     {
         Command    = MockSnapshots.ClangCommand,
         Arguments  = MockSnapshots.ClangArguments,
         OutputFile = MockSnapshots.ClangOutputFile,
     }), new MockClangAbstractSyntaxTreeExtractor());
 }
Beispiel #25
0
        public void Init()
        {
            Root    = Path.Combine(Directory.GetCurrentDirectory(), nameof(AssignmentGeneratorTests));
            Handler = new DirectoryHandler(Root);
            PreAssignmentRepository = new MockRepository <PreAssignment, int>();

            Assignment = new PreAssignment()
            {
                PreAssignmentReport = new PreAssignmentPendingReport(),
                Filename            = MockSnapshots.GetCalculatorFile(),
                Solution            = new AssignmentSolution()
                {
                    Id    = 1,
                    Name  = MockSnapshots.GetCalculatorClassName(),
                    Files = MockSnapshots.GetCalculatorSolutionFiles(),
                    MethodDeclarations = MockSnapshots.GetCalculatorMethodDeclaration().ToList(),
                },
                AssignmentSolutionId = 1,
                TestProject          = new TestProject()
                {
                    Files           = MockSnapshots.GetCalculatorTestProjectFiles(),
                    TestFolder      = MockSnapshots.GetCalculatorTestProjectFolder(),
                    TestDllFile     = MockSnapshots.GetCalculatorTestProjectDll(),
                    TestProjectFile = MockSnapshots.GetCalculatorTestProjectFile()
                }
            };

            PreAssignmentRepository.Add(Assignment);
            AbstractSyntaxTreeGenerator       = new MockAbstractSyntaxTreeGenerator();
            AbstractSyntaxTreeClassExtractor  = new MockAbstractSyntaxTreeClassExtractor();
            AbstractSyntaxTreeMethodExtractor = new MockAbstractSyntaxTreeMethodExtractor();
            UnitTestGenerator = new MockUnitTestGenerator();

            Generator = new AssignmentGenerator(PreAssignmentRepository,
                                                AbstractSyntaxTreeGenerator,
                                                AbstractSyntaxTreeClassExtractor,
                                                AbstractSyntaxTreeMethodExtractor,
                                                UnitTestGenerator
                                                );
        }
        public void Init()
        {
            Students = new MockRepository <Student, string>(
                new List <Student>()
            {
                new Student()
                {
                    Id   = StudentId,
                    Name = StudentName,
                    StudentCourseClasses = new List <StudentCourseClass>()
                    {
                        new StudentCourseClass()
                        {
                            Class = new CourseClass()
                            {
                                Id   = ClassId,
                                Name = ClassName,
                            }
                        }
                    }
                }
            });

            Surveys           = new MockRepository <Survey, string>();
            SnapshotGenerator = new MockSnapshotGenerator();
            Runner            = new EngineRunner(Microsoft.Extensions.Options.Options.Create(
                                                     new EngineRunnerOptions()
            {
                SurveyUrl = "Blank",
            }), Students, Surveys,
                                                 SnapshotGenerator, new MockAssignmentGenerator(), new MockMarkovModelGenerator());
            Root = Path.Combine(Directory.GetCurrentDirectory(), nameof(EngineRunnerTests));

            Submission = new StudentSubmissionDto()
            {
                SnapshotFolder = MockSnapshots.GetCalculatorSnapshots(),
            };
        }
Beispiel #27
0
 public void Init()
 {
     Root      = MockSnapshots.GetCalculatorFullAbstractSyntaxTreeNode();
     Extractor = new ClangAbstractSyntaxTreeClassExtractor(
         new ClangLineSplitter());
 }
Beispiel #28
0
 public void AreSnapshotsSame_ShouldReturnFalseForDifferentSnapshot()
 {
     Assert.IsFalse(GeneratorObj.AreSnapshotsTheSame(
                        Data.SnapshotSourceFileFullPath(MockSnapshots.GetThirdCalculatorSnapshotName(),
                                                        MockSnapshots.GetCalculatorFile()), MockSnapshots.GetCalculatorFile()));
 }
 public void Init()
 {
     Root              = MockSnapshots.GetCalculatorClassAbstractSyntaxTreeNode();
     Extractor         = new ClangAbstractSyntaxTreeMethodExtractor(new ClangLineSplitter());
     MethodDeclaration = MockSnapshots.GetCalculatorAddMethodDeclaration();
 }
Beispiel #30
0
        public void Init()
        {
            Root = Path.Combine(Directory.GetCurrentDirectory(), nameof(SnapshotGeneratorTests));

            Submission = new StudentSubmissionDto()
            {
                SnapshotFolder = MockSnapshots.GetCalculatorSnapshots(),
                StudentName    = StudentName,
                ClassName      = "Class",
            };
            Assignment = new Assignment()
            {
                Id       = AssignmentId,
                Filename = MockSnapshots.GetCalculatorFile(),
                Solution = new AssignmentSolution()
                {
                    Files = MockSnapshots.GetCalculatorSolutionFiles(),
                    Name  = MockSnapshots.GetCalculatorClassName(),
                }
            };

            Student =
                new Student()
            {
                Id          = StudentId,
                Name        = StudentName,
                Submissions = new List <SnapshotSubmission>()
                {
                    new SnapshotSubmission()
                    {
                        Id = FirstCalculatorSubmissionId,
                        CreatedDateTime = MockSnapshots.GetFirstCalculatorSnapshotTime(),
                    }
                },
                Snapshots = new List <Snapshot>()
                {
                    new Snapshot()
                    {
                        Id = FirstCalculatorSubmissionId,
                        SnapshotSubmission = new SnapshotSubmission()
                        {
                            Id = FirstCalculatorSubmissionId,
                            CreatedDateTime = MockSnapshots.GetFirstCalculatorSnapshotTime(),
                            Files           = MockSnapshots.GetFirstCalculatorSnapshotFile(),
                        },
                        AssignmentId = AssignmentId
                    },
                    new Snapshot()
                    {
                        Id = LastSnapshotId,
                        SnapshotSubmission = new SnapshotSubmission()
                        {
                            Id = 2,
                            CreatedDateTime = MockSnapshots.GetSecondCalculatorSnapshotTime(),
                            Files           = MockSnapshots.GetSecondCalculatorSnapshotFile(),
                        },
                        AssignmentId = AssignmentId
                    }
                }
            };
            Students = new MockRepository <Student, string>();
            Students.Add(Student);
            Snapshots          = new MockRepository <Snapshot, int>();
            SnapshotSubmission = new MockRepository <SnapshotSubmission, int>(
                new List <SnapshotSubmission>()
            {
                new SnapshotSubmission()
                {
                    Id = FirstCalculatorSubmissionId,
                    CreatedDateTime = MockSnapshots.GetFirstCalculatorSnapshotTime()
                }
            });
            Generator = new SnapshotGenerator(new MockSnapshotDateConverter(), SnapshotSubmission,
                                              Snapshots, new MockSnapshotReportGenerate(), Students,
                                              new MockAbstractSyntaxClassTreeExtractor(),
                                              new MockAbstractSyntaxTreeGenerator());
            Data = new SubmissionData(Submission, Root)
            {
                Student = Student
            };
            GeneratorObj = new SnapshotGenerator.SnapshotGeneratorObj(Data, Assignment, Generator);
        }