summaryrefslogtreecommitdiff
path: root/yaksh
diff options
context:
space:
mode:
authorankitjavalkar2017-02-13 15:21:34 +0530
committerankitjavalkar2017-02-16 18:09:37 +0530
commit85412e8f77a268590cf8ca6f6cd6facd8fdc3c2c (patch)
treeb552d367d054c7d13f928235a8ae7bdd8c8b8355 /yaksh
parent8eea8e99258f073374912985acc191295536deeb (diff)
downloadonline_test-85412e8f77a268590cf8ca6f6cd6facd8fdc3c2c.tar.gz
online_test-85412e8f77a268590cf8ca6f6cd6facd8fdc3c2c.tar.bz2
online_test-85412e8f77a268590cf8ca6f6cd6facd8fdc3c2c.zip
Merge all error handling into single code block and fix relevant test cases for Python assertion
Diffstat (limited to 'yaksh')
-rw-r--r--yaksh/evaluator_tests/test_python_evaluation.py13
-rw-r--r--yaksh/python_assertion_evaluator.py31
2 files changed, 21 insertions, 23 deletions
diff --git a/yaksh/evaluator_tests/test_python_evaluation.py b/yaksh/evaluator_tests/test_python_evaluation.py
index 6346941..b908ff7 100644
--- a/yaksh/evaluator_tests/test_python_evaluation.py
+++ b/yaksh/evaluator_tests/test_python_evaluation.py
@@ -235,7 +235,7 @@ class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
# Then
self.assertFalse(result.get("success"))
- self.assertEqual(6, len(err))
+ self.assertEqual(22, len(err))
for msg in name_error_msg:
self.assert_correct_output(msg, result.get("error"))
@@ -245,8 +245,7 @@ class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
def add(a, b):
return add(3, 3)
""")
- recursion_error_msg = ["Traceback",
- "call",
+ recursion_error_msg = ["Traceback",
"maximum recursion depth exceeded"
]
@@ -301,7 +300,7 @@ class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
# Then
self.assertFalse(result.get("success"))
- self.assertEqual(6, len(err))
+ self.assertEqual(22, len(err))
for msg in type_error_msg:
self.assert_correct_output(msg, result.get("error"))
@@ -337,7 +336,7 @@ class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
# Then
self.assertFalse(result.get("success"))
- self.assertEqual(6, len(err))
+ self.assertEqual(25, len(err))
for msg in value_error_msg:
self.assert_correct_output(msg, result.get("error"))
@@ -404,7 +403,7 @@ class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
# Then
self.assertFalse(result.get("success"))
- self.assertEqual(5, len(err))
+ self.assertEqual(12, len(err))
for msg in syntax_error_msg:
self.assert_correct_output(msg, result.get("error"))
@@ -446,7 +445,7 @@ class PythonAssertionEvaluationTestCases(EvaluatorBaseTest):
# Then
self.assertFalse(result.get("success"))
- self.assertEqual(2, len(err))
+ self.assertEqual(10, len(err))
for msg in name_error_msg:
self.assert_correct_output(msg, result.get("error"))
diff --git a/yaksh/python_assertion_evaluator.py b/yaksh/python_assertion_evaluator.py
index 9e1a6ac..77efbc1 100644
--- a/yaksh/python_assertion_evaluator.py
+++ b/yaksh/python_assertion_evaluator.py
@@ -71,31 +71,30 @@ class PythonAssertionEvaluator(BaseEvaluator):
tb = None
_tests = compile(self.test_case, '<string>', mode='exec')
exec(_tests, self.exec_scope)
- except AssertionError:
+ except TimeoutException:
+ raise
+ except Exception:
type, value, tb = sys.exc_info()
info = traceback.extract_tb(tb)
fname, lineno, func, text = info[-1]
text = str(self.test_case)
- err = "Expected Test Case:\n{0}\n" \
- "Error - {1} {2} in:\n {3}\n".format(
- self.test_case,
- type.__name__,
- str(value),
- text
- )
- except TimeoutException:
- raise
- except RecursionError:
- msg = traceback.format_exc(limit=0)
- err = "Error Traceback: {0}".format(msg)
- except Exception:
+
+ # Get truncated traceback
err_tb_lines = traceback.format_exc().splitlines()
stripped_tb_lines = []
for line in err_tb_lines:
if '.py' not in line:
stripped_tb_lines.append(line)
- stripped_tb = '\n'.join(stripped_tb_lines)
- err = "Error Traceback:\n{0}".format(stripped_tb)
+ stripped_tb = '\n'.join(stripped_tb_lines[-10::])
+
+ err = "Expected Test Case:\n{0}\n" \
+ "Error Traceback- {1} {2} in:\n {3}\n{4}".format(
+ self.test_case,
+ type.__name__,
+ str(value),
+ text,
+ stripped_tb
+ )
else:
success = True
err = None