
Do not do much for now, but would have been enough to catch the crash introduced the other day in linking code...
109 lines
2.9 KiB
Python
109 lines
2.9 KiB
Python
# Apache License, Version 2.0
|
|
|
|
# ./blender.bin --background -noaudio --python tests/python/bl_blendfile_liblink.py
|
|
import bpy
|
|
import os
|
|
import pprint
|
|
|
|
|
|
class TestHelper:
|
|
|
|
@staticmethod
|
|
def id_to_uid(id_data):
|
|
return (type(id_data).__name__,
|
|
id_data.name,
|
|
id_data.users,
|
|
id_data.library.filepath if id_data.library else None)
|
|
|
|
@classmethod
|
|
def blender_data_to_tuple(cls, bdata):
|
|
return sorted(tuple((cls.id_to_uid(k), sorted(tuple(cls.id_to_uid(vv) for vv in v)))
|
|
for k, v in bdata.user_map().items()))
|
|
|
|
@staticmethod
|
|
def ensure_path(path):
|
|
if not os.path.exists(path):
|
|
os.makedirs(path)
|
|
|
|
def run_all_tests(self):
|
|
for inst_attr_id in dir(self):
|
|
if not inst_attr_id.startswith("test_"):
|
|
continue
|
|
inst_attr = getattr(self, inst_attr_id)
|
|
if callable(inst_attr):
|
|
inst_attr()
|
|
|
|
|
|
class TestBlendLibLinkSaveLoadBasic(TestHelper):
|
|
|
|
def __init__(self, args):
|
|
self.args = args
|
|
|
|
def test_link_save_load(self):
|
|
bpy.ops.wm.read_factory_settings()
|
|
me = bpy.data.meshes.new("LibMesh")
|
|
me.use_fake_user = True
|
|
|
|
output_dir = self.args.output_dir
|
|
self.ensure_path(output_dir)
|
|
output_path = os.path.join(output_dir, "blendlib.blend")
|
|
|
|
bpy.ops.wm.save_as_mainfile(filepath=output_path, check_existing=False, compress=False)
|
|
|
|
bpy.ops.wm.read_factory_settings()
|
|
bpy.data.orphans_purge()
|
|
|
|
link_dir = os.path.join(output_path, "Mesh")
|
|
bpy.ops.wm.link(directory=link_dir, filename="LibMesh")
|
|
|
|
orig_data = self.blender_data_to_tuple(bpy.data)
|
|
|
|
output_path = os.path.join(output_dir, "blendfile.blend")
|
|
bpy.ops.wm.save_as_mainfile(filepath=output_path, check_existing=False, compress=False)
|
|
bpy.ops.wm.open_mainfile(filepath=output_path, load_ui=False)
|
|
|
|
read_data = self.blender_data_to_tuple(bpy.data)
|
|
|
|
assert(orig_data == read_data)
|
|
|
|
|
|
|
|
TESTS = (
|
|
TestBlendLibLinkSaveLoadBasic,
|
|
)
|
|
|
|
|
|
def argparse_create():
|
|
import argparse
|
|
|
|
# When --help or no args are given, print this help
|
|
description = "Test basic IO of blend file."
|
|
parser = argparse.ArgumentParser(description=description)
|
|
parser.add_argument(
|
|
"--output-dir",
|
|
dest="output_dir",
|
|
default=".",
|
|
help="Where to output temp saved 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 [])
|
|
try:
|
|
main()
|
|
except:
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|