Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-02-14 22:33:33 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-02-16 14:51:49 +0300
commit3d2d58391ad8e5e0343af461d83fabe9fabd2745 (patch)
treedf160c664fdf4cb72806535b41179e914990b559 /tests/python/opengl_draw_tests.py
parent0f23f618f36a7472d1c67b36344ef87a31eb586c (diff)
Tests: add OpenGL UI drawing tests.
This reuses the Cycles regression test code to also work for OpenGL UI drawing. We launch Blender with a bunch of .blend files, take a screenshot and compare it with a reference screenshot, and generate a HMTL report showing the failed tests and their differences. For Cycles we keep small reference renders to compare to in svn, but for OpenGL developers currently have to generate the references manually. How to use: * WITH_OPENGL_DRAW_TESTS=ON in CMake * BLENDER_TEST_UPDATE=1 ctest -R opengl_draw * .. make code changes .. * ctest -R opengl_draw * open build_dir/tests/opengl_draw/report.html Differential Revision: https://developer.blender.org/D3064
Diffstat (limited to 'tests/python/opengl_draw_tests.py')
-rwxr-xr-xtests/python/opengl_draw_tests.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/tests/python/opengl_draw_tests.py b/tests/python/opengl_draw_tests.py
new file mode 100755
index 00000000000..999304570df
--- /dev/null
+++ b/tests/python/opengl_draw_tests.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python3
+# Apache License, Version 2.0
+
+import argparse
+import os
+import shlex
+import shutil
+import subprocess
+import sys
+
+def screenshot():
+ import bpy
+
+ output_path = sys.argv[-1]
+
+ # Force redraw and take screenshot.
+ bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
+ bpy.ops.screen.screenshot(filepath=output_path, full=True)
+
+ bpy.ops.wm.quit_blender()
+
+# When run from inside Blender, take screenshot and exit.
+try:
+ import bpy
+ inside_blender = True
+except ImportError:
+ inside_blender = False
+
+if inside_blender:
+ screenshot()
+ sys.exit(0)
+
+
+def render_file(filepath, output_filepath):
+ command = (
+ BLENDER,
+ "-noaudio",
+ "--factory-startup",
+ "--enable-autoexec",
+ filepath,
+ "-P",
+ os.path.realpath(__file__),
+ "--",
+ output_filepath)
+
+ try:
+ # Success
+ output = subprocess.check_output(command)
+ if VERBOSE:
+ print(output.decode("utf-8"))
+ return None
+ except subprocess.CalledProcessError as e:
+ # Error
+ if os.path.exists(output_filepath):
+ os.remove(output_filepath)
+ if VERBOSE:
+ print(e.output.decode("utf-8"))
+ return "CRASH"
+ except BaseException as e:
+ # Crash
+ if os.path.exists(output_filepath):
+ os.remove(output_filepath)
+ if VERBOSE:
+ print(e)
+ return "CRASH"
+
+
+def create_argparse():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-blender", nargs="+")
+ parser.add_argument("-testdir", nargs=1)
+ parser.add_argument("-outdir", nargs=1)
+ parser.add_argument("-idiff", nargs=1)
+ return parser
+
+
+def main():
+ parser = create_argparse()
+ args = parser.parse_args()
+
+ global BLENDER, VERBOSE
+
+ BLENDER = args.blender[0]
+ VERBOSE = os.environ.get("BLENDER_VERBOSE") is not None
+
+ test_dir = args.testdir[0]
+ idiff = args.idiff[0]
+ output_dir = args.outdir[0]
+
+ from modules import render_report
+ report = render_report.Report("OpenGL Draw Test Report", output_dir, idiff)
+ ok = report.run(test_dir, render_file)
+
+ sys.exit(not ok)
+
+if __name__ == "__main__":
+ main()