102 lines
3.4 KiB
Python
102 lines
3.4 KiB
Python
# SPDX-FileCopyrightText: 2023 Blender Authors
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# ./blender.bin --background -noaudio --python tests/python/bl_blendfile_versioning.py ..
|
|
import bpy
|
|
import os
|
|
import sys
|
|
|
|
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
|
|
from bl_blendfile_utils import TestHelper
|
|
|
|
|
|
class TestBlendFileOpenAllTestFiles(TestHelper):
|
|
|
|
def __init__(self, args):
|
|
self.args = args
|
|
# Some files are known broken currently.
|
|
# Each file in this list should either be the source of a bug report,
|
|
# or removed from tests repo.
|
|
self.excluded_paths = {
|
|
# tests/modifier_stack/explode_modifier.blend
|
|
# BLI_assert failed: source/blender/blenlib/BLI_ordered_edge.hh:41, operator==(), at 'e1.v_low < e1.v_high'
|
|
"explode_modifier.blend",
|
|
|
|
# tests/depsgraph/deg_anim_camera_dof_driving_material.blend
|
|
# ERROR (bke.fcurve):
|
|
# source/blender/blenkernel/intern/fcurve_driver.cc:188 dtar_get_prop_val:
|
|
# Driver Evaluation Error: cannot resolve target for OBCamera ->
|
|
# data.dof_distance
|
|
"deg_anim_camera_dof_driving_material.blend",
|
|
|
|
# tests/depsgraph/deg_driver_shapekey_same_datablock.blend
|
|
# Error: Not freed memory blocks: 4, total unfreed memory 0.000427 MB
|
|
"deg_driver_shapekey_same_datablock.blend",
|
|
|
|
# tests/physics/fluidsim.blend
|
|
# Error: Not freed memory blocks: 3, total unfreed memory 0.003548 MB
|
|
"fluidsim.blend",
|
|
|
|
# tests/opengl/ram_glsl.blend
|
|
# Error: Not freed memory blocks: 4, total unfreed memory 0.000427 MB
|
|
"ram_glsl.blend",
|
|
}
|
|
|
|
@classmethod
|
|
def iter_blendfiles_from_directory(cls, root_path):
|
|
for dir_entry in os.scandir(root_path):
|
|
if dir_entry.is_dir(follow_symlinks=False):
|
|
yield from cls.iter_blendfiles_from_directory(dir_entry.path)
|
|
elif dir_entry.is_file(follow_symlinks=False):
|
|
if os.path.splitext(dir_entry.path)[1] == ".blend":
|
|
yield dir_entry.path
|
|
|
|
def test_open(self):
|
|
import subprocess
|
|
blendfile_paths = [p for p in self.iter_blendfiles_from_directory(self.args.src_test_dir)]
|
|
# `os.scandir()` used by `iter_blendfiles_from_directory` does not
|
|
# guarantee any form of order.
|
|
blendfile_paths.sort()
|
|
for bfp in blendfile_paths:
|
|
if os.path.basename(bfp) in self.excluded_paths:
|
|
continue
|
|
bpy.ops.wm.read_homefile(use_empty=True, use_factory_startup=True)
|
|
bpy.ops.wm.open_mainfile(filepath=bfp, load_ui=False)
|
|
|
|
|
|
TESTS = (
|
|
TestBlendFileOpenAllTestFiles,
|
|
)
|
|
|
|
|
|
def argparse_create():
|
|
import argparse
|
|
|
|
# When --help or no args are given, print this help
|
|
description = ("Test basic versioning code by opening all blend files "
|
|
"in `lib/tests` directory.")
|
|
parser = argparse.ArgumentParser(description=description)
|
|
parser.add_argument(
|
|
"--src-test-dir",
|
|
dest="src_test_dir",
|
|
default="..",
|
|
help="Root tests directory to search for blendfiles",
|
|
required=False,
|
|
)
|
|
|
|
return parser
|
|
|
|
|
|
def main():
|
|
args = argparse_create().parse_args()
|
|
|
|
for Test in TESTS:
|
|
Test(args).run_all_tests()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import sys
|
|
sys.argv = [__file__] + (sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else [])
|
|
main()
|