153 lines
4.4 KiB
Python
153 lines
4.4 KiB
Python
|
# test_prop_factory
|
||
|
"""
|
||
|
Test custom Blender property-group factory module.
|
||
|
"""
|
||
|
|
||
|
import unittest, os, textwrap, io
|
||
|
|
||
|
# This is the most ridiculous work-around, but it seems to be necessary to
|
||
|
# get Python 3 to import the modules for testing
|
||
|
import sys
|
||
|
print("__file__ = ", __file__)
|
||
|
sys.path.append(os.path.normpath(os.path.join(__file__, '..', '..')))
|
||
|
|
||
|
import yaml
|
||
|
|
||
|
import bpy
|
||
|
|
||
|
from abx import prop_factory
|
||
|
|
||
|
|
||
|
class TestPropertyGroupFactory(unittest.TestCase):
|
||
|
SIMPLE = textwrap.dedent("""\
|
||
|
---
|
||
|
my_custom_property_group:
|
||
|
- code: prop1
|
||
|
name: prop1
|
||
|
type: str
|
||
|
maxlen: 20
|
||
|
default: default
|
||
|
desc: My test property.
|
||
|
""")
|
||
|
|
||
|
SAMPLER = textwrap.dedent("""\
|
||
|
---
|
||
|
sampler:
|
||
|
- code: str_prop
|
||
|
name: MyString
|
||
|
type: str
|
||
|
maxlen: 20
|
||
|
default: str_prop
|
||
|
desc: A string property example.
|
||
|
|
||
|
- code: int_prop
|
||
|
name: MyInteger
|
||
|
type: int
|
||
|
min: 0
|
||
|
max: 100
|
||
|
soft_min: 0
|
||
|
soft_max: 10
|
||
|
default: 1
|
||
|
desc: An integer property example.
|
||
|
|
||
|
- code: float_prop
|
||
|
name: MyFloat
|
||
|
type: float
|
||
|
min: -10.0
|
||
|
max: 10.0
|
||
|
soft_min: 0.0
|
||
|
soft_max: 1.0
|
||
|
precision: 3
|
||
|
unit: 'LENGTH'
|
||
|
default: 1.0
|
||
|
desc: A float property example.
|
||
|
|
||
|
- code: bool_prop
|
||
|
name: MyBoolean
|
||
|
type: bool
|
||
|
default: False
|
||
|
desc: A boolean property example.
|
||
|
|
||
|
- code: enum_prop1
|
||
|
name: MyEnum1
|
||
|
type: enum
|
||
|
items_from: enum1_list
|
||
|
default: 'unknown'
|
||
|
desc: An enumerated property using a list reference.
|
||
|
|
||
|
enum1_list:
|
||
|
- unknown
|
||
|
- option1
|
||
|
- option2
|
||
|
""")
|
||
|
|
||
|
def assertHasAttr(self, ob, attr):
|
||
|
self.assertTrue(hasattr(ob,attr),
|
||
|
msg="Object %s has no attribute %s." % (ob, attr))
|
||
|
|
||
|
def test_creating_simple_yaml_example(self):
|
||
|
schema = yaml.safe_load(io.StringIO(self.SIMPLE))
|
||
|
cpg = prop_factory.PropertyGroupFactory(
|
||
|
'my_custom_property_group', schema)
|
||
|
|
||
|
self.assertHasAttr(cpg, 'prop1')
|
||
|
|
||
|
def test_attach_simple_yaml_to_scene(self):
|
||
|
schema = yaml.safe_load(io.StringIO(self.SIMPLE))
|
||
|
cpg = prop_factory.PropertyGroupFactory(
|
||
|
'my_custom_property_group', schema)
|
||
|
|
||
|
bpy.types.Scene.my_custom_property_group = bpy.props.PointerProperty(type=cpg)
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.my_custom_property_group.prop1,
|
||
|
'default')
|
||
|
|
||
|
def test_creating_complex_sampler(self):
|
||
|
schema = yaml.safe_load(io.StringIO(self.SAMPLER))
|
||
|
sampler = prop_factory.PropertyGroupFactory(
|
||
|
'sampler', schema)
|
||
|
bpy.types.Scene.sampler = bpy.props.PointerProperty(type=sampler)
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.sampler.str_prop, 'str_prop')
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.sampler.int_prop, 1)
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.sampler.float_prop, 1.0)
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.sampler.bool_prop, False)
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.sampler.enum_prop1, 'unknown')
|
||
|
|
||
|
bpy.context.scene.sampler.str_prop = 'my string'
|
||
|
bpy.context.scene.sampler.int_prop = 2
|
||
|
bpy.context.scene.sampler.float_prop = 0.7
|
||
|
bpy.context.scene.sampler.bool_prop = True
|
||
|
bpy.context.scene.sampler.enum_prop1 = 'option1'
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.sampler.str_prop, 'my string')
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.sampler.int_prop, 2)
|
||
|
|
||
|
self.assertAlmostEqual(
|
||
|
bpy.context.scene.sampler.float_prop, 0.7)
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.sampler.bool_prop, True)
|
||
|
|
||
|
self.assertEqual(
|
||
|
bpy.context.scene.sampler.enum_prop1, 'option1')
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|