summaryrefslogtreecommitdiff
path: root/python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft
diff options
context:
space:
mode:
Diffstat (limited to 'python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft')
-rw-r--r--python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft127
1 files changed, 127 insertions, 0 deletions
diff --git a/python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft b/python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft
new file mode 100644
index 000000000000..1182b7815c06
--- /dev/null
+++ b/python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft
@@ -0,0 +1,127 @@
+import sys
+
+def get_file_text(path):
+ """ get file text by path"""
+ file_io = open(path, "r")
+ text = file_io.read()
+ file_io.close()
+ return text
+
+def get_file_output(path):
+ # TODO: get file output by path
+ return ""
+
+def test_file_importable():
+ """ tests there is no obvious syntax errors"""
+ path = sys.argv[-1]
+ try:
+ import_file(path)
+ except ImportError:
+ failed("File contains syntax errors")
+ return
+ except SyntaxError:
+ failed("File contains syntax errors")
+ return
+ except NameError:
+ failed("File contains syntax errors")
+ return
+
+ passed()
+
+def import_file(path):
+ """ returns imported file """
+ import imp
+ tmp = imp.load_source('tmp', path)
+ return tmp
+
+def import_task_file():
+ """ returns imported file """
+ path = sys.argv[-1]
+ return import_file(path)
+
+def test_is_not_empty():
+ path = sys.argv[-1]
+ file_text = get_file_text(path)
+
+ if len(file_text) > 0:
+ passed()
+ else:
+ failed("The file is empty. Please, reload the task and try again.")
+
+def test_is_initial_text(error_text="You should modify the file"):
+ path = sys.argv[-1]
+ text = get_initial_text(path)
+ file_text = get_file_text(path)
+
+ if file_text.strip() == text:
+ failed(error_text)
+ else:
+ passed()
+
+def get_initial_text(path):
+ course_lib = sys.argv[-2]
+
+ import os
+ # path format is "project_root/lessonX/taskY/file.py"
+ task_index = path.rfind(os.sep, 0, path.rfind(os.sep))
+ index = path.rfind(os.sep, 0, task_index)
+ relative_path = path[index+1:]
+ initial_file_path = os.path.join(course_lib, relative_path)
+ return get_file_text(initial_file_path)
+
+
+def test_text_equals(text, error_text):
+ path = sys.argv[-1]
+ file_text = get_file_text(path)
+
+ if file_text.strip() == text:
+ passed()
+ else:
+ failed(error_text)
+
+def test_window_text_deleted(error_text="Don't just delete task text"):
+ windows = get_task_windows()
+
+ for window in windows:
+ if len(window) == 0:
+ failed(error_text)
+ return
+ passed()
+
+
+def failed(message="Please, reload the task and try again."):
+ print("#study_plugin FAILED + " + message)
+
+def passed():
+ print("#study_plugin test OK")
+
+def get_task_windows():
+ prefix = "#study_plugin_window = "
+ path = sys.argv[-1]
+ import os
+ windows_path = os.path.splitext(path)[0] + "_windows"
+ windows = []
+ f = open(windows_path, "r")
+ window_text = ""
+ first = True
+ for line in f.readlines():
+ if line.startswith(prefix):
+ if not first:
+ windows.append(window_text.strip())
+ else:
+ first = False
+ window_text = line[len(prefix):]
+ else:
+ window_text += line
+
+ if window_text:
+ windows.append(window_text.strip())
+
+ f.close()
+ return windows
+
+def run_common_tests(error_text="Please, reload file and try again"):
+ test_file_importable()
+ test_is_not_empty()
+ test_is_initial_text(error_text)
+ test_window_text_deleted(error_text) \ No newline at end of file