summaryrefslogtreecommitdiff
path: root/yaksh/stdio_evaluator.py
diff options
context:
space:
mode:
Diffstat (limited to 'yaksh/stdio_evaluator.py')
-rw-r--r--yaksh/stdio_evaluator.py28
1 files changed, 22 insertions, 6 deletions
diff --git a/yaksh/stdio_evaluator.py b/yaksh/stdio_evaluator.py
index 4f5cfaf..7530b96 100644
--- a/yaksh/stdio_evaluator.py
+++ b/yaksh/stdio_evaluator.py
@@ -1,9 +1,25 @@
-class Evaluator(object):
+from __future__ import unicode_literals
- def evaluate(self, user_answer, proc, expected_input, expected_output):
+# Local imports
+from .code_evaluator import CodeEvaluator
+
+
+class StdIOEvaluator(CodeEvaluator):
+ def setup(self):
+ super(StdIOEvaluator, self).setup()
+ pass
+
+ def teardown(self):
+ super(StdIOEvaluator, self).teardown()
+ pass
+
+ def evaluate_stdio(self, user_answer, proc, expected_input, expected_output):
success = False
ip = expected_input.replace(",", " ")
- user_output, output_err = proc.communicate(input='{0}\n'.format(ip))
+ encoded_input = '{0}\n'.format(ip).encode('utf-8')
+ user_output_bytes, output_err_bytes = proc.communicate(encoded_input)
+ user_output = user_output_bytes.decode('utf-8')
+ output_err = output_err_bytes.decode('utf-8')
expected_output = expected_output.replace("\r", "")
if not expected_input:
error_msg = "Expected Output is {0} ".\
@@ -13,10 +29,10 @@ class Evaluator(object):
format(expected_input, repr(expected_output))
if output_err == '':
if user_output == expected_output:
- success, err = True, "Correct Answer"
+ success, err = True, "Correct answer"
else:
- err = " Incorrect Answer\n" + error_msg +\
+ err = " Incorrect answer\n" + error_msg +\
"\n Your output is {0}".format(repr(user_output))
else:
- err = "Error:"+"\n"+output_err
+ err = "Error:\n {0}".format(output_err)
return success, err