summaryrefslogtreecommitdiff
path: root/yaksh/evaluator_tests
diff options
context:
space:
mode:
authoradityacp2016-02-19 16:19:14 +0530
committeradityacp2016-03-11 15:31:51 +0530
commit1ddc29e1cb703557ab43d14318c279fce8fc609e (patch)
tree630405785e5ede4a3adf267fa4e0825fc2001312 /yaksh/evaluator_tests
parentef3cd39ebdf9d9fc9011ba4bc470ec5018bb8077 (diff)
downloadonline_test-1ddc29e1cb703557ab43d14318c279fce8fc609e.tar.gz
online_test-1ddc29e1cb703557ab43d14318c279fce8fc609e.tar.bz2
online_test-1ddc29e1cb703557ab43d14318c279fce8fc609e.zip
Frontend design changes
remove older change Remove further changes interface changes interface changes small views.py change change in code evaluator code evaluator changes python code evaluator change exception changes in code evaluator and test cases for python Update test_python_evaluation.py changed variable name in test case Views.py conflict resolve
Diffstat (limited to 'yaksh/evaluator_tests')
-rw-r--r--yaksh/evaluator_tests/test_python_evaluation.py112
1 files changed, 85 insertions, 27 deletions
diff --git a/yaksh/evaluator_tests/test_python_evaluation.py b/yaksh/evaluator_tests/test_python_evaluation.py
index 0478353..8a3ba0d 100644
--- a/yaksh/evaluator_tests/test_python_evaluation.py
+++ b/yaksh/evaluator_tests/test_python_evaluation.py
@@ -7,47 +7,105 @@ class PythonEvaluationTestCases(unittest.TestCase):
def setUp(self):
self.language = "Python"
self.test = None
- self.test_case_data = [{"func_name": "add",
- "expected_answer": "5",
- "test_id": u'null',
- "pos_args": ["3", "2"],
- "kw_args": {}
+ self.test_case_data = [{"func_name": "add",
+ "expected_answer": "5",
+ "test_id": u'null',
+ "pos_args": ["3", "2"],
+ "kw_args": {}
}]
- self.timeout_msg = ("Code took more than {0} seconds to run. "
- "You probably have an infinite loop in your code.").format(SERVER_TIMEOUT)
def test_correct_answer(self):
- user_answer = "def add(a, b):\n\treturn a + b"""
- get_class = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
- result = get_class.evaluate()
+ user_answer = "def add(a, b):\n\treturn a + b"
+ evaluator = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
+ result = evaluator.evaluate()
self.assertTrue(result.get("success"))
self.assertEqual(result.get("error"), "Correct answer")
def test_incorrect_answer(self):
user_answer = "def add(a, b):\n\treturn a - b"
- test_case_data = [{"func_name": "add",
- "expected_answer": "5",
- "test_id": u'null',
- "pos_args": ["3", "2"],
- "kw_args": {}
- }]
- get_class = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
- result = get_class.evaluate()
+ evaluator = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
+ result = evaluator.evaluate()
self.assertFalse(result.get("success"))
self.assertEqual(result.get("error"), "AssertionError in: assert add(3, 2) == 5")
def test_infinite_loop(self):
- user_answer = "def add(a, b):\n\twhile True:\n\t\tpass"""
- test_case_data = [{"func_name": "add",
- "expected_answer": "5",
- "test_id": u'null',
- "pos_args": ["3", "2"],
- "kw_args": {}
+ user_answer = "def add(a, b):\n\twhile True:\n\t\tpass"
+ timeout_msg = ("Code took more than {0} seconds to run. "
+ "You probably have an infinite loop in your code.").format(SERVER_TIMEOUT)
+ evaluator = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
+ result = evaluator.evaluate()
+ self.assertFalse(result.get("success"))
+ self.assertEquals(result.get("error"), timeout_msg)
+
+ def test_syntax_error(self):
+ user_answer = "def add(a, b);\n\treturn a+b"
+ syntax_error_msg = ('Traceback (most recent call last):\n File '
+ '"<string>", line 1\n def add(a, b);\n '
+ ' ^\nSyntaxError: invalid syntax\n')
+ evaluator = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
+ result = evaluator.evaluate()
+ self.assertFalse(result.get("success"))
+ self.assertEquals(result.get("error"), syntax_error_msg)
+
+ def test_indent_error(self):
+ user_answer = "def add(a, b):\nreturn a+b"
+ indent_error_msg = ('Traceback (most recent call last):\n '
+ 'File "<string>", line 2\n '
+ 'return a+b\n ^\nIndentationError: '
+ 'expected an indented block\n')
+ evaluator = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
+ result = evaluator.evaluate()
+ self.assertFalse(result.get("success"))
+ self.assertEquals(result.get("error"), indent_error_msg)
+
+ def test_name_error(self):
+ user_answer = ""
+ name_error_msg = ("Traceback (most recent call last):\nNameError: "
+ "name 'add' is not defined\n")
+ evaluator = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
+ result = evaluator.evaluate()
+ self.assertFalse(result.get("success"))
+ self.assertEquals(result.get("error"), name_error_msg)
+
+ def test_recursion_error(self):
+ user_answer = ("def fact(a):\n\tif a == 0:\n\t\treturn fact(1)"
+ "\n\telse:\n\t\treturn a * fact(a-1)")
+ self.test_case_data = [{"func_name": "fact",
+ "expected_answer": "24",
+ "test_id": u'null',
+ "pos_args": ["4"],
+ "kw_args": {}
+ }]
+ recursion_error_msg = ('Traceback (most recent call last):\nRuntimeError: '
+ 'maximum recursion depth exceeded\n')
+ evaluator = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
+ result = evaluator.evaluate()
+ self.assertFalse(result.get("success"))
+ self.assertEquals(result.get("error"), recursion_error_msg)
+
+ def test_type_error(self):
+ user_answer = "def add(a):\n\treturn a+b"
+ type_error_msg = ("Traceback (most recent call last):\nTypeError: "
+ "add() takes exactly 1 argument (2 given)\n")
+ evaluator = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
+ result = evaluator.evaluate()
+ self.assertFalse(result.get("success"))
+ self.assertEquals(result.get("error"), type_error_msg)
+
+ def test_value_error(self):
+ user_answer = "def split(line):\n\t[ key, value ] = line.split()"
+ value_error_msg = ("Traceback (most recent call last):\nValueError: "
+ "need more than 1 value to unpack\n")
+ self.test_case_data = [{"func_name": "split",
+ "expected_answer": "Hello",
+ "test_id": u'null',
+ "pos_args": ["'Hello'"],
+ "kw_args": {}
}]
- get_class = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
- result = get_class.evaluate()
+ evaluator = PythonCodeEvaluator(self.test_case_data, self.test, self.language, user_answer, ref_code_path=None, in_dir=None)
+ result = evaluator.evaluate()
self.assertFalse(result.get("success"))
- self.assertEquals(result.get("error"), self.timeout_msg)
+ self.assertEquals(result.get("error"), value_error_msg)
if __name__ == '__main__':
unittest.main()