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