Test for prop_factory.
This commit is contained in:
parent
ad97d29f51
commit
9fbf1e5115
153
tests/test_prop_factory.py
Normal file
153
tests/test_prop_factory.py
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
# 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')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user