Example #1
0
        public void ProcessSubmission_CalculatesScoreCorrectly()
        {
            const double expectedScore = 50;

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "JavaScript",
                Code        = @"function add(x, y)
                { 
                   return (x+y);
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "x",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "y",
                                Value = "2"
                            }
                        }
                    },
                    new TestCase()
                    {
                        ExpectedOutput = "4",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "x",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "y",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            JavaScriptCodeChecker checker = new JavaScriptCodeChecker(submission);

            var result = checker.Process();

            // Assert
            Assert.Equal(expectedScore, result.Score);
        }
        public void ProcessSubmission_CalculatesScoreCorrectly()
        {
            const double expectedScore = 50;

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "CSharp",
                Code        = @"int add(int param1, int param2) {
                return param1 + param2;
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "param1",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "param2",
                                Value = "2"
                            }
                        }
                    },
                    new TestCase()
                    {
                        ExpectedOutput = "4",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "param1",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "param2",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            CSharpCodeChecker checker = new CSharpCodeChecker(submission);

            var result = checker.Process();

            // Assert
            Assert.Equal(expectedScore, result.Score);
        }
        public SubmissionResult Create(PostedSubmission model)
        {
            var codeChecker = BaseCodeChecker.GetCodeChecker(model);

            var resultModel = codeChecker.Process();

            var serviceModel = Mapper.Map <SubmissionServiceModel>(resultModel);

            Create(serviceModel);

            return(resultModel);
        }
Example #4
0
        public static ICodeChecker GetCodeChecker(PostedSubmission submission)
        {
            switch (submission.Language)
            {
            case "CSharp":
                return(new CSharpCodeChecker(submission));

            case "JavaScript":
                return(new JavaScriptCodeChecker(submission));

            default:
                throw new ArgumentException("Unsupported language");
            }
        }
Example #5
0
        public void ProcessSubmission_WithCorrectInput_ReturnsResults()
        {
            const string expectedOutput = "3";
            const double expectedScore  = 100;

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "JavaScript",
                Code        = @"function add(x, y)
                { 
                   return (x+y);
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "x",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "y",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            JavaScriptCodeChecker checker = new JavaScriptCodeChecker(submission);

            var result = checker.Process();

            // Assert
            Assert.Equal(expectedOutput, result.Tests.First().ActualOutput);
            Assert.Equal(expectedScore, result.Score);
        }
Example #6
0
        public void ProcessSubmission_WithIncorrectParameterName_ThrowsException()
        {
            string expectedExceptionMessage =
                $"No parameter with name x is found";

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "JavaScript",
                Code        = @"function add(x, y)
                { 
                   return (x+y);
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "a",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "y",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            JavaScriptCodeChecker checker = new JavaScriptCodeChecker(submission);

            // Assert
            var exception = Assert.Throws <ArgumentException>(() => checker.Process());

            Assert.Equal(expectedExceptionMessage, exception.Message);
        }
        public void ProcessSubmission_WithCorrectInput_ReturnsResults()
        {
            const string expectedOutput = "3";
            const double expectedScore  = 100;

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "CSharp",
                Code        = @"int add(int param1, int param2) {
                return param1 + param2;
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "param1",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "param2",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            CSharpCodeChecker checker = new CSharpCodeChecker(submission);

            var result = checker.Process();

            // Assert
            Assert.Equal(expectedOutput, result.Tests.First().ActualOutput);
            Assert.Equal(expectedScore, result.Score);
        }
Example #8
0
        public void ProcessSubmission_WithIncorrectMainMethod_ThrowsException()
        {
            string expectedExceptionMessage =
                $"The main method should be equal to the problem's name: add.";

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "JavaScript",
                Code        = @"function add1(x, y)
                { 
                   return (x+y);
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "x",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "y",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            JavaScriptCodeChecker checker = new JavaScriptCodeChecker(submission);

            // Assert
            var exception = Assert.Throws <ArgumentException>(() => checker.Process());

            Assert.Equal(expectedExceptionMessage, exception.Message);
        }
        public void ProcessSubmission_WithIncorrectCode_ThrowsException()
        {
            string expectedExceptionMessage =
                $"Program.cs on line 2: error CS0103: The name 'param3' does not exist in the current context";

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "CSharp",
                Code        = @"int add(int param1, int param2) {
                return param3;
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "param1",
                                Value = "some string"
                            },
                            new Parameter()
                            {
                                Name  = "param2",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            CSharpCodeChecker checker = new CSharpCodeChecker(submission);

            // Assert
            var exception = Assert.Throws <InvalidOperationException>(() => checker.Process());

            Assert.Equal(expectedExceptionMessage, exception.Message);
        }
        public void ProcessSubmission_WithIncorrectMainMethod_ThrowsException()
        {
            string expectedExceptionMessage =
                $"The main method should be equal to the problem's name: add.";

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "CSharp",
                Code        = @"int add1(int param1, int param2) {
                return param1 + param2;
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "param1",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "param2",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            CSharpCodeChecker checker = new CSharpCodeChecker(submission);

            // Assert
            var exception = Assert.Throws <ArgumentException>(() => checker.Process());

            Assert.Equal(expectedExceptionMessage, exception.Message);
        }
Example #11
0
        public void ProcessSubmission_WithUnsupportedLanguage_ThrowsException()
        {
            string expectedExceptionMessage =
                $"Unsupported language";

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "UnsupportedLanguage",
                Code        = @"function add(x, y)
                { 
                   return (x+y);
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "x",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "y",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            // Assert
            var exception = Assert.Throws <ArgumentException>(() => BaseCodeChecker.GetCodeChecker(submission));

            Assert.Equal(expectedExceptionMessage, exception.Message);
        }
        public void ProcessSubmission_WithIncorrectValueParameter_ThrowsException()
        {
            string expectedExceptionMessage =
                $"Input string was not in a correct format.";

            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "CSharp",
                Code        = @"int add(int param1, int param2) {
                return param1 + param2;
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "param1",
                                Value = "some string"
                            },
                            new Parameter()
                            {
                                Name  = "param2",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            CSharpCodeChecker checker = new CSharpCodeChecker(submission);

            var exception = Assert.Throws <InvalidOperationException>(() => checker.Process());

            Assert.Equal(expectedExceptionMessage, exception.Message);
        }
Example #13
0
        public void ProcessSubmission_WithIncorrectCode_ThrowsException()
        {
            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "JavaScript",
                Code        = @"function add(x, y)
                { 
                   return (z+y);
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "x",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "y",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            JavaScriptCodeChecker checker = new JavaScriptCodeChecker(submission);

            // Assert
            var exception = Assert.Throws <InvalidOperationException>(() => checker.Process());
        }
Example #14
0
        public void ProcessSubmission_WithSupportedLanguage_ReturnsProperChecker()
        {
            PostedSubmission submission = new PostedSubmission()
            {
                ProblemName = "add",
                Language    = "JavaScript",
                Code        = @"function add(x, y)
                { 
                   return (x+y);
                }",
                TestCases   = new List <TestCase>()
                {
                    new TestCase()
                    {
                        ExpectedOutput = "3",
                        Parameters     = new List <Parameter>()
                        {
                            new Parameter()
                            {
                                Name  = "x",
                                Value = "1"
                            },
                            new Parameter()
                            {
                                Name  = "y",
                                Value = "2"
                            }
                        }
                    }
                }
            };

            var checker = BaseCodeChecker.GetCodeChecker(submission);

            Assert.NotNull(checker);
        }
Example #15
0
        private const int NewCodeLine = 73; //The row where new code is inserted

        public CSharpCodeChecker(PostedSubmission submission) : base(submission)
        {
        }
Example #16
0
 public BaseCodeChecker(PostedSubmission submission)
 {
     this.submission = submission;
 }
 public JavaScriptCodeChecker(PostedSubmission submission) : base(submission)
 {
 }