diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/python/CMakeLists.txt | 48 | ||||
-rwxr-xr-x | tests/python/modules/render_report.py | 11 | ||||
-rwxr-xr-x | tests/python/opengl_draw_tests.py | 97 |
3 files changed, 149 insertions, 7 deletions
diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt index 662a35558b7..ceed2ca4d09 100644 --- a/tests/python/CMakeLists.txt +++ b/tests/python/CMakeLists.txt @@ -538,7 +538,7 @@ if(WITH_CYCLES) ) endif() endmacro() - if(WITH_OPENGL_TESTS) + if(WITH_OPENGL_RENDER_TESTS) add_cycles_render_test(opengl) endif() add_cycles_render_test(bake) @@ -562,6 +562,52 @@ if(WITH_CYCLES) endif() endif() +if(WITH_OPENGL_DRAW_TESTS) + if(OPENIMAGEIO_IDIFF AND EXISTS "${TEST_SRC_DIR}/opengl") + macro(add_opengl_draw_test subject) + if(MSVC) + add_test( + NAME opengl_draw_${subject}_test + COMMAND + "$<TARGET_FILE_DIR:blender>/${BLENDER_VERSION_MAJOR}.${BLENDER_VERSION_MINOR}/python/bin/python$<$<CONFIG:Debug>:_d>" + ${CMAKE_CURRENT_LIST_DIR}/opengl_draw_tests.py + -blender "$<TARGET_FILE:blender>" + -testdir "${TEST_SRC_DIR}/${subject}" + -idiff "${OPENIMAGEIO_IDIFF}" + -outdir "${TEST_OUT_DIR}/opengl_draw" + ) + else() + add_test( + NAME opengl_draw_${subject}_test + COMMAND ${CMAKE_CURRENT_LIST_DIR}/opengl_draw_tests.py + -blender "$<TARGET_FILE:blender>" + -testdir "${TEST_SRC_DIR}/${subject}" + -idiff "${OPENIMAGEIO_IDIFF}" + -outdir "${TEST_OUT_DIR}/opengl_draw" + ) + endif() + endmacro() + + function(add_opengl_draw_tests) + # Use all test folders + file(GLOB children RELATIVE ${TEST_SRC_DIR} ${TEST_SRC_DIR}/*) + foreach(child ${children}) + if(IS_DIRECTORY ${TEST_SRC_DIR}/${child}) + file(GLOB blends ${TEST_SRC_DIR}/${child}/*.blend) + if(blends) + add_opengl_draw_test(${child}) + endif() + endif() + endforeach() + endfunction() + + add_opengl_draw_tests() + else() + MESSAGE(STATUS "Disabling OpenGL tests because tests folder does not exist") + endif() +endif() + + if(WITH_ALEMBIC) find_package_wrapper(Alembic) if(NOT ALEMBIC_FOUND) diff --git a/tests/python/modules/render_report.py b/tests/python/modules/render_report.py index 930a08282e8..5ccd5076fbc 100755 --- a/tests/python/modules/render_report.py +++ b/tests/python/modules/render_report.py @@ -49,12 +49,11 @@ def print_message(message, type=None, status=''): sys.stdout.flush() -def blend_list(path): - for dirpath, dirnames, filenames in os.walk(path): - for filename in filenames: - if filename.lower().endswith(".blend"): - filepath = os.path.join(dirpath, filename) - yield filepath +def blend_list(dirpath): + for filename in os.listdir(dirpath): + if filename.lower().endswith(".blend"): + filepath = os.path.join(dirpath, filename) + yield filepath def test_get_name(filepath): filename = os.path.basename(filepath) 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() |