From 1f8e19179140f3ebdb78428f125163d61c905c78 Mon Sep 17 00:00:00 2001
From: janmax <mail-github@jmx.io>
Date: Thu, 13 Jul 2017 11:16:44 +0200
Subject: [PATCH] Tests are now displayed in single submission view

---
 .../core/component/tests_editor.html          | 27 +++++++++++++++++++
 core/templates/core/feedback_form.html        |  7 ++---
 core/templates/core/r/single_submission.html  |  3 ++-
 core/templates/core/s/single_submission.html  |  2 +-
 util/importer.py                              |  4 ++-
 util/processing.py                            | 12 ++++-----
 util/testcases.py                             |  4 +--
 7 files changed, 45 insertions(+), 14 deletions(-)
 create mode 100644 core/templates/core/component/tests_editor.html

diff --git a/core/templates/core/component/tests_editor.html b/core/templates/core/component/tests_editor.html
new file mode 100644
index 00000000..36239778
--- /dev/null
+++ b/core/templates/core/component/tests_editor.html
@@ -0,0 +1,27 @@
+{# Custom feedback from the compiler #}
+<div class="card my-1">
+  <a data-toggle="collapse" href="#collapse4">
+    <h5 class="card-header">Tester Output</h5>
+  </a>
+  <div id="collapse4" class="collapse hide" role="tabpanel">
+    <div class="card-block m-2">
+      <div id="tests_editor" class="editor editor-pre">{% for test in submission.tests.all %}
+# {{test.name}}
+{{test.annotation}}
+RESULT: {{test.label}}
+-------------------------------------------------
+{% endfor %}
+      </div>
+    </div>
+  </div>
+  <script>
+    var editor_pre = ace.edit("tests_editor");
+    editor_pre.setOptions({
+      readOnly: true,
+      showGutter: false,
+      highlightActiveLine: false,
+      maxLines: Infinity,
+    })
+  </script>
+</div>
+
diff --git a/core/templates/core/feedback_form.html b/core/templates/core/feedback_form.html
index 11a17e6c..601aa89b 100644
--- a/core/templates/core/feedback_form.html
+++ b/core/templates/core/feedback_form.html
@@ -27,10 +27,11 @@
       </a>
       <div id="collapse4" class="collapse show" role="tabpanel">
         <div class="card-block m-2">
-          <div id="pre_corrections" class="editor editor-pre">{% for test in feedback.of_submission.tests.all %}
-{{test.name}}
+          <div id="tests_editor" class="editor editor-pre">{% for test in feedback.of_submission.tests.all %}
+# {{test.name}}
 {{test.annotation}}
 RESULT: {{test.label}}
+-------------------------------------------------
           {% endfor %}</div>
         </div>
       </div>
@@ -151,7 +152,7 @@ RESULT: {{test.label}}
   {% endif %}
 
   // we need this one for the compiler erros readonly
-  var editor_pre = ace.edit("pre_corrections");
+  var editor_pre = ace.edit("tests_editor");
   editor_pre.setOptions({
     readOnly: true,
     showGutter: false,
diff --git a/core/templates/core/r/single_submission.html b/core/templates/core/r/single_submission.html
index 3e283e9e..59f26832 100644
--- a/core/templates/core/r/single_submission.html
+++ b/core/templates/core/r/single_submission.html
@@ -47,10 +47,11 @@
   <div class="col-4 my-4">
     <div class="card">
       <div class="card-block">
-        <div class="card-header">Your submission</div>
+        <div class="card-header">Student submission</div>
         <div class="editor-code" id="textarea_submission">{{submission.text}}</div>
       </div>
     </div>
+    {% include "core/component/tests_editor.html" %}
   </div>
 
   {% if feedback %}
diff --git a/core/templates/core/s/single_submission.html b/core/templates/core/s/single_submission.html
index cc346a89..cf08272e 100644
--- a/core/templates/core/s/single_submission.html
+++ b/core/templates/core/s/single_submission.html
@@ -37,9 +37,9 @@
         <div class="editor-code" id="textarea_submission">{{submission.text}}</div>
       </div>
     </div>
+    {% include "core/component/tests_editor.html" %}
   </div>
 
-
   {% if feedback %}
   {% if feedback.status == feedback.ACCEPTED %}
   <div class="col-4 my-4">
diff --git a/util/importer.py b/util/importer.py
index 1a04a22f..9b6226ec 100644
--- a/util/importer.py
+++ b/util/importer.py
@@ -39,6 +39,7 @@ TEST_ORDER = (
     util.processing.EmptyTest.__name__,
     util.processing.CompileTest.__name__,
     util.processing.LinkTest.__name__,
+    util.processing.UnitTestTest.__name__,
 )
 
 
@@ -170,7 +171,8 @@ def add_submission(student_obj, code, tests, type):
         )
 
         if test_obj.label == available_tests[test_obj.name].label_failure\
-                and not hasattr(test_obj.submission, 'feedback'):
+                and not hasattr(test_obj.submission, 'feedback')\
+                and not test_obj.name == util.processing.UnitTestTest.__name__:
             Feedback.objects.update_or_create(
                 of_submission=submission_obj,
                 defaults={
diff --git a/util/processing.py b/util/processing.py
index 21acf939..e83a44eb 100644
--- a/util/processing.py
+++ b/util/processing.py
@@ -15,20 +15,20 @@ except ModuleNotFoundError:
 DESCFILE    = '../data/descfile.txt'
 BINARIES    = '../data/klausur_zweittermin/bin'
 OBJECTS     = '../data/klausur_zweittermin/objects'
-SUBMISSIONS = '../data/ok.json'
+SUBMISSIONS = '../data/binf1801_pre.json'
 HEADER      = '../data/klausur_zweittermin/code-testing'
 
 
-def run_cmd(cmd, stdin=None, check=False):
+def run_cmd(cmd, stdin=None, check=False, timeout=1):
     return subprocess.run(
-        'ulimit -v 1024;' + cmd,
+        'ulimit -v 1024; gtimeout 0.2 ' + cmd,
         stderr=subprocess.PIPE,
         stdout=subprocess.PIPE,
         input=stdin,
         shell=True,
         check=check,
         encoding='utf-8',
-        timeout=0.5
+        timeout=timeout
     )
 
 
@@ -119,7 +119,7 @@ class CompileTest(Test):
 
     def run_test(self, submission_obj):
 
-        ret = run_cmd("gcc-7 -c -xc -Icode-testing -o code.o -",
+        ret = run_cmd("gcc-7 -std=c11 -Wall -c -xc -Icode-testing -o code.o -",
                       submission_obj['code'])
         return not ret.returncode, ret.stderr
 
@@ -149,7 +149,7 @@ class UnitTestTest(Test):
     @staticmethod
     def testcase(i, args, stdout):
         try:
-            ret = run_cmd("./code %s" % args, check=True)
+            ret = run_cmd("./code %s" % args, check=True, timeout=0.1)
             assert ret.stdout == stdout
         except AssertionError:
             return False, f"Case #{i:>2}: [ASSERT FAILED] ./program {args} WAS '{ret.stdout.strip()}' SHOULD '{stdout.strip()}'"
diff --git a/util/testcases.py b/util/testcases.py
index 491d3074..b94fab23 100644
--- a/util/testcases.py
+++ b/util/testcases.py
@@ -30,7 +30,7 @@ def unsigned_integer(upper=50):
 
 
 def character():
-    return random.choice(5*ascii_letters + 2*digits + '%*+,-./:?@[]^_{}~')
+    return random.choice(10*ascii_letters + 2*digits + '%*+,-./:?@[]^_{}~')
 
 
 def string(lenght=31):
@@ -39,7 +39,7 @@ def string(lenght=31):
 
 def type_list(_type):
     def generic_list():
-        return ' '.join(str(call_function(_type)) for i in range(unsigned_integer(5) * 2))
+        return ' '.join(str(call_function(_type)) for i in range(2, unsigned_integer(6) * 2))
     return generic_list
 
 
-- 
GitLab