summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjwansek <eddie.atten.ea29@gmail.com>2022-01-24 15:30:01 +0000
committerjwansek <eddie.atten.ea29@gmail.com>2022-01-24 15:30:01 +0000
commitddb758a780c74d95d2c6bfc00d50fc7a04de7d34 (patch)
treea54a0f0218ce287257ee6db7c2d8642ef150932d
parent3313a936debe04c733b3003858724de17cfcd7de (diff)
downloadSmarker-ddb758a780c74d95d2c6bfc00d50fc7a04de7d34.tar.gz
Smarker-ddb758a780c74d95d2c6bfc00d50fc7a04de7d34.zip
switched to jinja for making test files. made it only test files without errors.
-rw-r--r--ExampleSubmission/animals.py2
-rw-r--r--examplerun.bat2
-rw-r--r--mark.py9
-rw-r--r--pytest_template.jinja28
-rw-r--r--reflect.py37
l---------templates/text.jinja2bin10 -> 28 bytes
-rw-r--r--templates/txt.jinja23
7 files changed, 38 insertions, 23 deletions
diff --git a/ExampleSubmission/animals.py b/ExampleSubmission/animals.py
index a8c76d8..d32d6ff 100644
--- a/ExampleSubmission/animals.py
+++ b/ExampleSubmission/animals.py
@@ -20,3 +20,5 @@ class Kitten(Cat):
"""
def speak(self):
return "meow (but cuter)"
+
+print() \ No newline at end of file
diff --git a/examplerun.bat b/examplerun.bat
index 6ca9a04..338908c 100644
--- a/examplerun.bat
+++ b/examplerun.bat
@@ -1,3 +1,3 @@
zip -r 100301654.zip .\ExampleSubmission\
-python .\mark.py -s 100301654.zip -a .\ExampleAssessments\example.yml -f yaml
+python .\mark.py -s 100301654.zip -a .\ExampleAssessments\example.yml
rm 100301654.zip \ No newline at end of file
diff --git a/mark.py b/mark.py
index 835ac03..2fe28c5 100644
--- a/mark.py
+++ b/mark.py
@@ -38,10 +38,11 @@ class FileDependencies:
pass
for file_dep in stuff_to_remove:
- if os.path.isfile(file_dep):
- os.remove(file_dep)
- else:
- shutil.rmtree(file_dep)
+ if os.path.exists(file_dep):
+ if os.path.isfile(file_dep):
+ os.remove(file_dep)
+ else:
+ shutil.rmtree(file_dep)
def main(**kwargs):
student_no = os.path.splitext(os.path.split(args["submission"])[-1])[0]
diff --git a/pytest_template.jinja2 b/pytest_template.jinja2
new file mode 100644
index 0000000..fad41db
--- /dev/null
+++ b/pytest_template.jinja2
@@ -0,0 +1,8 @@
+{# generating python with python :3 #}
+
+import {{ module }}
+
+{% for i, test_code in enumerate(filestests, 1) %}
+def test_{{ i }}():
+{{ test_code|indent(4, True) }} {# the code in the config file must be indented with 4 spaces only #}
+{% endfor %} \ No newline at end of file
diff --git a/reflect.py b/reflect.py
index 99e7fd9..46c69da 100644
--- a/reflect.py
+++ b/reflect.py
@@ -9,6 +9,7 @@ import tempfile
import inspect
import pkgutil
import shutil
+import jinja2
import sys
import os
import re
@@ -186,22 +187,23 @@ class Reflect:
"""
test_results = {}
test_results["pytest_report"] = ""
- for filename, filestests in tests.items():
- with open(os.path.join(self.client_code_path, "test_" + filename), "a") as f:
- for m in self.client_modules:
- f.write("import %s\n" % m.name)
- f.write("\n")
+
+ with open("pytest_template.jinja2", "r") as f:
+ jinja_template = jinja2.Template(f.read())
- for i, test_code in enumerate(filestests, 1):
- f.write("def test_%d():\n" % i)
- for line in test_code.split("\n"):
- f.write(" %s\n" % line.rstrip())
- f.write("\n")
+ for filename, filestests in tests.items():
+ with open(os.path.join(self.client_code_path, "test_" + filename), "w") as f:
+ f.write(jinja_template.render(
+ module = os.path.splitext(filename)[0],
+ filestests = filestests,
+ enumerate = enumerate # a function thats needed
+ ))
with tempfile.TemporaryDirectory() as tmp:
junitxmlpath = os.path.join(tmp, "report.xml")
test_files = [os.path.join(self.client_code_path, "test_%s" % f) for f in tests.keys()]
cmd = ["pytest", "-v"] + test_files + ["--junitxml=%s" % junitxmlpath]
+ # print("cmd: ", " ".join(cmd))
if test_files == []:
test_results["pytest_report"] = "*** No Tests ***"
return test_results
@@ -318,13 +320,14 @@ def gen_reflection_report(client_code_path, assessment_struct, student_no, confi
if "tests" in required_files_features.keys():
filename = list(assessment_struct["files"][i].keys())[0]
- for j, test in enumerate(assessment_struct["files"][i][required_file]["tests"], 0):
- try:
- tests_to_run[filename].append(test)
- except KeyError:
- tests_to_run[filename] = [test]
-
- out["test_results"] = reflection.run_tests(tests_to_run, configuration["out"] == "stdout")
+ if not out["files"][i][filename]["has_exception"]:
+ for j, test in enumerate(assessment_struct["files"][i][required_file]["tests"], 0):
+ try:
+ tests_to_run[filename].append(test)
+ except KeyError:
+ tests_to_run[filename] = [test]
+
+ out["test_results"] = reflection.run_tests(tests_to_run, configuration["out"] == "stdout" and configuration["format"] in ["text", "txt"])
out["class_tree"] = reflection.get_class_tree()
return out
diff --git a/templates/text.jinja2 b/templates/text.jinja2
index aad87bd..eca6ebd 120000
--- a/templates/text.jinja2
+++ b/templates/text.jinja2
Binary files differ
diff --git a/templates/txt.jinja2 b/templates/txt.jinja2
index 0a9cdb5..97752fd 100644
--- a/templates/txt.jinja2
+++ b/templates/txt.jinja2
@@ -11,7 +11,8 @@
{%- if files_contents["present"] -%}
{%- if files_contents["has_exception"] %}
*** File cannot be run - has compile time exception ***
- Please note that this file cannot be analysed or have tests preformed upon it
+ Please note that this file cannot be analysed or have tests preformed upon it-
+ this can lead to the whole test suite failing if another module imports this.
Exception Type:
{{ files_contents["exception"]["type"] }}
Exception String: