Files
OpenColorIO/tests/python/ExponentTransformTest.py
Mei ChuandPatrick Hodoul 99c5f40af4 Created a TransformsBaseTest module. (#1288)
* Created a TransformsBaseTest module.
Moving some unit testing of Transforms module to a base class.

Signed-off-by: Mei Chu <meimchu@gmail.com>

* Updated four transforms tests to use TransformsBaseTest.
- AllocationTransformTest
- BuiltinTranformTest
- CDLTransformTest
- ColorSpaceTransformTest
Updated to add a space at the end of TransformBaseTest per feedback.

Signed-off-by: Mei Chu <meimchu@gmail.com>

* Updated four transforms tests to use TransformsBaseTest.
- DisplayViewTransformTest
- ExponentTransformTest
- ExponentWithLinearTransformTest
- ExposureContrastTransformTest
- FileTransformTest
- FixedFunctionTransformTest
- LogTransformTest
- LookTransformTest

Signed-off-by: Mei Chu <meimchu@gmail.com>

* Address feedback https://github.com/AcademySoftwareFoundation/OpenColorIO/pull/1288#discussion_r565265034

Signed-off-by: Mei Chu <meimchu@gmail.com>

* Updated a few transforms unit tests with TransformsBaseTest.

Signed-off-by: Mei Chu <meimchu@gmail.com>

* Updated to prioritize setUp methods first in individual python unit tests.

Signed-off-by: Mei Chu <meimchu@gmail.com>

Co-authored-by: Patrick Hodoul <patrick.hodoul@autodesk.com>
2021-02-17 14:50:47 -05:00

141 lines
4.8 KiB
Python

# SPDX-License-Identifier: BSD-3-Clause
# Copyright Contributors to the OpenColorIO Project.
import unittest
import PyOpenColorIO as OCIO
from TransformsBaseTest import TransformsBaseTest
class ExponentTransformTest(unittest.TestCase, TransformsBaseTest):
TEST_ID = 'sample exponent'
TEST_VALUES = [1, 2, 3, 4]
TEST_NEGATIVE_STYLE = OCIO.NEGATIVE_MIRROR
TEST_DIRECTION = OCIO.TRANSFORM_DIR_INVERSE
def setUp(self):
self.tr = OCIO.ExponentTransform()
def test_transform_type(self):
"""
Test the getTransformType() method.
"""
self.assertEqual(self.tr.getTransformType(),
OCIO.TRANSFORM_TYPE_EXPONENT)
def test_format_metadata(self):
"""
Test the getFormatMetadata() method.
"""
format_metadata = self.tr.getFormatMetadata()
format_metadata.setName(self.TEST_ID)
self.assertIsInstance(format_metadata, OCIO.FormatMetadata)
self.assertEqual(format_metadata.getName(), self.TEST_ID)
format_metadata.setID(self.TEST_ID)
self.assertEqual(format_metadata.getID(), self.TEST_ID)
def test_negative_style(self):
"""
Test the setNegativeStyle() and getNegativeStyle() methods.
"""
# Default initialized negative style is clamp.
self.assertEqual(self.tr.getNegativeStyle(), OCIO.NEGATIVE_CLAMP)
# Linear negative extrapolation is not valid for basic exponent style.
for negative_style in OCIO.NegativeStyle.__members__.values():
if negative_style != OCIO.NEGATIVE_LINEAR:
self.tr.setNegativeStyle(negative_style)
self.assertEqual(
self.tr.getNegativeStyle(), negative_style)
else:
with self.assertRaises(OCIO.Exception):
self.tr.setNegativeStyle(negative_style)
def test_values(self):
"""
Test the setValue() and getValue() methods.
"""
# Default initialized vars value is [1, 1, 1, 1]
self.assertEqual(self.tr.getValue(), [1, 1, 1, 1])
self.tr.setValue(self.TEST_VALUES)
self.assertEqual(self.tr.getValue(), self.TEST_VALUES)
# Wrong type tests.
for invalid in (None, 'hello', [1, 2, 3]):
with self.assertRaises(TypeError):
self.tr.setValue(invalid)
def test_validate(self):
"""
Test the validate() method.
"""
# Validate should pass with default values.
self.tr.validate()
# Validate should pass with positive values.
self.tr.setValue([1, 2, 3, 4])
self.tr.validate()
# Validate should fail with lower bound value of 0.01.
self.tr.setValue([-1, -2, -3, -4])
with self.assertRaises(OCIO.Exception):
self.tr.validate()
# Validate should fail with higher bound value of 100.
self.tr.setValue([101, 1, 1, 1])
with self.assertRaises(OCIO.Exception):
self.tr.validate()
def test_constructor_with_keyword(self):
"""
Test ExponentTransform constructor with keywords and validate its values.
"""
# With keywords in their proper order.
exp_tr = OCIO.ExponentTransform(
value=self.TEST_VALUES,
negativeStyle=self.TEST_NEGATIVE_STYLE,
direction=self.TEST_DIRECTION)
self.assertEqual(exp_tr.getValue(), self.TEST_VALUES)
self.assertEqual(exp_tr.getNegativeStyle(), self.TEST_NEGATIVE_STYLE)
self.assertEqual(exp_tr.getDirection(), self.TEST_DIRECTION)
# With keywords not in their proper order.
exp_tr2 = OCIO.ExponentTransform(
negativeStyle=self.TEST_NEGATIVE_STYLE,
direction=self.TEST_DIRECTION,
value=self.TEST_VALUES)
self.assertEqual(exp_tr2.getValue(), self.TEST_VALUES)
self.assertEqual(exp_tr2.getNegativeStyle(), self.TEST_NEGATIVE_STYLE)
self.assertEqual(exp_tr2.getDirection(), self.TEST_DIRECTION)
def test_constructor_with_positional(self):
"""
Test ExponentTransform constructor without keywords and validate its values.
"""
exp_tr = OCIO.ExponentTransform(
self.TEST_VALUES,
self.TEST_NEGATIVE_STYLE,
self.TEST_DIRECTION)
self.assertEqual(exp_tr.getValue(), self.TEST_VALUES)
self.assertEqual(exp_tr.getNegativeStyle(), self.TEST_NEGATIVE_STYLE)
self.assertEqual(exp_tr.getDirection(), self.TEST_DIRECTION)
def test_constructor_wrong_parameter_type(self):
"""
Test ExponentTransform constructor with a wrong parameter type.
"""
for invalid in (None, 1):
with self.assertRaises(TypeError):
exp_tr = OCIO.ExponentTransform(invalid)