Signed-off-by: Rémi Achard <remiachard@gmail.com> Co-authored-by: Doug Walker <doug.walker@autodesk.com>
77 lines
3.1 KiB
Python
77 lines
3.1 KiB
Python
# SPDX-License-Identifier: BSD-3-Clause
|
|
# Copyright Contributors to the OpenColorIO Project.
|
|
|
|
import copy, unittest, os, sys
|
|
import PyOpenColorIO as OCIO
|
|
import inspect
|
|
|
|
class TransformsTest(unittest.TestCase):
|
|
|
|
def all_transforms_as_group(self):
|
|
# Default arguments for Transforms that can't be instantiated without arguments.
|
|
default_args = {
|
|
OCIO.FixedFunctionTransform: {
|
|
'style': OCIO.FIXED_FUNCTION_RGB_TO_HSV
|
|
},
|
|
OCIO.LogCameraTransform: {
|
|
'linSideBreak': [0.5, 0.5, 0.5]
|
|
}
|
|
}
|
|
|
|
allTransformsAsGroup = OCIO.GroupTransform()
|
|
# Search for all transform types in order to handle future transforms
|
|
for n, c in inspect.getmembers(OCIO):
|
|
if hasattr(c, 'getTransformType'):
|
|
try:
|
|
# Attempt to construct each Transform subclass, raising exception in order to
|
|
# filter the parent OCIO.Transform class
|
|
if c in default_args:
|
|
# Plug in kwargs if needed
|
|
allTransformsAsGroup.appendTransform(c(**default_args[c]))
|
|
else:
|
|
allTransformsAsGroup.appendTransform(c())
|
|
except TypeError as e:
|
|
# Ensure we only catch and filter for this specific error
|
|
self.assertEqual(
|
|
str(e),
|
|
'PyOpenColorIO.PyOpenColorIO.Transform: No constructor defined!',
|
|
'Unintended Error Raised: {0}'.format(e)
|
|
)
|
|
|
|
return allTransformsAsGroup
|
|
|
|
def test_copy(self):
|
|
"""
|
|
Test the deepcopy() method.
|
|
"""
|
|
for transform in self.all_transforms_as_group():
|
|
other = copy.deepcopy(transform)
|
|
self.assertFalse(other is transform)
|
|
|
|
self.assertEquals(other.getTransformType(), transform.getTransformType())
|
|
self.assertEquals(other.getDirection(), transform.getDirection())
|
|
# Not all OCIO.Transform have equals methods
|
|
if hasattr(transform, 'equals'):
|
|
self.assertTrue(other.equals(transform))
|
|
|
|
other.setDirection(OCIO.TRANSFORM_DIR_INVERSE)
|
|
self.assertNotEquals(other.getDirection(), transform.getDirection())
|
|
|
|
def test_binding_group_polymorphism(self):
|
|
"""
|
|
Tests polymorphism issue where transforms are cast as parent class when using
|
|
GroupTransforms. Flagged in https://github.com/AcademySoftwareFoundation/OpenColorIO/issues/1211
|
|
"""
|
|
for transform in self.all_transforms_as_group():
|
|
# Ensure no transforms have been cast as parent transform
|
|
self.assertNotEqual(
|
|
type(transform),
|
|
OCIO.Transform,
|
|
"""Transform has unintentionally been cast as parent class!
|
|
transform.getTransformType(): {0}
|
|
type(transform): {1}
|
|
|
|
Are there pybind polymorphic_type_hooks in src/bindings/PyOpenColorIO.h for this transform?
|
|
""".format(transform.getTransformType(), type(transform))
|
|
)
|