summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--yaksh/evaluator_tests/test_python_evaluation.py56
-rw-r--r--yaksh/test_models.py34
2 files changed, 70 insertions, 20 deletions
diff --git a/yaksh/evaluator_tests/test_python_evaluation.py b/yaksh/evaluator_tests/test_python_evaluation.py
index 51f9bea..a751c40 100644
--- a/yaksh/evaluator_tests/test_python_evaluation.py
+++ b/yaksh/evaluator_tests/test_python_evaluation.py
@@ -19,7 +19,8 @@ class EvaluatorBaseTest(unittest.TestCase):
class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
def setUp(self):
- with open('/tmp/test.txt', 'wb') as f:
+ self.tmp_file = os.path.join(tempfile.gettempdir(), "test.txt")
+ with open(self.tmp_file, 'wb') as f:
f.write('2'.encode('ascii'))
tmp_in_dir_path = tempfile.mkdtemp()
self.in_dir = tmp_in_dir_path
@@ -33,7 +34,7 @@ class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
self.file_paths = None
def tearDown(self):
- os.remove('/tmp/test.txt')
+ os.remove(self.tmp_file)
shutil.rmtree(self.in_dir)
def test_correct_answer(self):
@@ -343,7 +344,7 @@ class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
def test_file_based_assert(self):
# Given
self.test_case_data = [{"test_case_type": "standardtestcase", "test_case": "assert(ans()=='2')", "weight": 0.0}]
- self.file_paths = [('/tmp/test.txt', False)]
+ self.file_paths = [(self.tmp_file, False)]
user_answer = dedent("""
def ans():
with open("test.txt") as f:
@@ -479,12 +480,17 @@ class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
class PythonStdIOEvaluationTestCases(EvaluatorBaseTest):
def setUp(self):
- with open('/tmp/test.txt', 'wb') as f:
+ self.tmp_file = os.path.join(tempfile.gettempdir(), "test.txt")
+ with open(self.tmp_file, 'wb') as f:
f.write('2'.encode('ascii'))
self.file_paths = None
tmp_in_dir_path = tempfile.mkdtemp()
self.in_dir = tmp_in_dir_path
+ def teardown(self):
+ os.remove(self.tmp_file)
+ shutil.rmtree(self.in_dir)
+
def test_correct_answer_integer(self):
# Given
self.test_case_data = [{"test_case_type": "stdiobasedtestcase",
@@ -618,7 +624,7 @@ class PythonStdIOEvaluationTestCases(EvaluatorBaseTest):
"expected_output": "2",
"weight": 0.0
}]
- self.file_paths = [('/tmp/test.txt', False)]
+ self.file_paths = [(self.tmp_file, False)]
user_answer = dedent("""
with open("test.txt") as f:
@@ -702,7 +708,8 @@ class PythonStdIOEvaluationTestCases(EvaluatorBaseTest):
class PythonHookEvaluationTestCases(EvaluatorBaseTest):
def setUp(self):
- with open('/tmp/test.txt', 'wb') as f:
+ self.tmp_file = os.path.join(tempfile.gettempdir(), "test.txt")
+ with open(self.tmp_file, 'wb') as f:
f.write('2'.encode('ascii'))
tmp_in_dir_path = tempfile.mkdtemp()
self.in_dir = tmp_in_dir_path
@@ -712,7 +719,7 @@ class PythonHookEvaluationTestCases(EvaluatorBaseTest):
self.file_paths = None
def tearDown(self):
- os.remove('/tmp/test.txt')
+ os.remove(self.tmp_file)
shutil.rmtree(self.in_dir)
def test_correct_answer(self):
@@ -910,6 +917,41 @@ class PythonHookEvaluationTestCases(EvaluatorBaseTest):
self.assertFalse(result.get('success'))
self.assert_correct_output(self.timeout_msg, result.get('error'))
+ def test_assignment_upload(self):
+ # Given
+ user_answer = "Assignment Upload"
+ hook_code = dedent("""\
+ def check_answer(user_answer):
+ success = False
+ err = "Incorrect Answer"
+ mark_fraction = 0.0
+ with open("test.txt") as f:
+ data = f.read()
+ if data == '2':
+ success, err, mark_fraction = True, "", 1.0
+ return success, err, mark_fraction
+ """
+ )
+ test_case_data = [{"test_case_type": "hooktestcase",
+ "hook_code": hook_code,"weight": 1.0
+ }]
+ kwargs = {
+ 'metadata': {
+ 'user_answer': user_answer,
+ 'file_paths': self.file_paths,
+ 'assign_files': [(self.tmp_file, False)],
+ 'partial_grading': False,
+ 'language': 'python'
+ },
+ 'test_case_data': test_case_data,
+ }
+
+ # When
+ grader = Grader(self.in_dir)
+ result = grader.evaluate(kwargs)
+
+ # Then
+ self.assertTrue(result.get('success'))
if __name__ == '__main__':
unittest.main()
diff --git a/yaksh/test_models.py b/yaksh/test_models.py
index cd66aed..56097a7 100644
--- a/yaksh/test_models.py
+++ b/yaksh/test_models.py
@@ -57,20 +57,15 @@ def setUpModule():
description='demo quiz', pass_criteria=40,
language='Python', prerequisite=quiz,
course=course, instructions="Demo Instructions")
-
- with open('/tmp/test.txt', 'wb') as f:
+ tmp_file1 = os.path.join(tempfile.gettempdir(), "test.txt")
+ with open(tmp_file1, 'wb') as f:
f.write('2'.encode('ascii'))
+
def tearDownModule():
User.objects.all().delete()
Question.objects.all().delete()
Quiz.objects.all().delete()
-
- que_id_list = ["25", "22", "24", "27"]
- for que_id in que_id_list:
- dir_path = os.path.join(os.getcwd(), "yaksh", "data","question_{0}".format(que_id))
- if os.path.exists(dir_path):
- shutil.rmtree(dir_path)
###############################################################################
class ProfileTestCases(unittest.TestCase):
@@ -117,7 +112,7 @@ class QuestionTestCases(unittest.TestCase):
self.question2.save()
# create a temp directory and add files for loading questions test
- file_path = "/tmp/test.txt"
+ file_path = os.path.join(tempfile.gettempdir(), "test.txt")
self.load_tmp_path = tempfile.mkdtemp()
shutil.copy(file_path, self.load_tmp_path)
file1 = os.path.join(self.load_tmp_path, "test.txt")
@@ -126,9 +121,11 @@ class QuestionTestCases(unittest.TestCase):
self.dump_tmp_path = tempfile.mkdtemp()
shutil.copy(file_path, self.dump_tmp_path)
file2 = os.path.join(self.dump_tmp_path, "test.txt")
- file = open(file2, "r")
- django_file = File(file)
- file = FileUpload.objects.create(file=django_file, question=self.question2)
+ upload_file = open(file2, "r")
+ django_file = File(upload_file)
+ file = FileUpload.objects.create(file=django_file,
+ question=self.question2
+ )
self.question1.tags.add('python', 'function')
self.assertion_testcase = StandardTestCase(question=self.question1,
@@ -158,6 +155,15 @@ class QuestionTestCases(unittest.TestCase):
def tearDown(self):
shutil.rmtree(self.load_tmp_path)
shutil.rmtree(self.dump_tmp_path)
+ uploaded_files = FileUpload.objects.all()
+ que_id_list = [file.question.id for file in uploaded_files]
+ for que_id in que_id_list:
+ dir_path = os.path.join(os.getcwd(), "yaksh", "data",
+ "question_{0}".format(que_id)
+ )
+ if os.path.exists(dir_path):
+ shutil.rmtree(dir_path)
+ uploaded_files.delete()
def test_question(self):
""" Test question """
@@ -214,7 +220,9 @@ class QuestionTestCases(unittest.TestCase):
self.assertTrue(question_data.active)
self.assertEqual(question_data.snippet, 'def fact()')
self.assertEqual(os.path.basename(file.file.path), "test.txt")
- self.assertEqual([case.get_field_value() for case in test_case], self.test_case_upload_data)
+ self.assertEqual([case.get_field_value() for case in test_case],
+ self.test_case_upload_data
+ )
###############################################################################