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); }
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"); } }
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); }
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); }
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); }
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); }
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()); }
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); }
private const int NewCodeLine = 73; //The row where new code is inserted public CSharpCodeChecker(PostedSubmission submission) : base(submission) { }
public BaseCodeChecker(PostedSubmission submission) { this.submission = submission; }
public JavaScriptCodeChecker(PostedSubmission submission) : base(submission) { }