Files
OpenColorIO/tests/python/BuiltinConfigRegistryTest.py
Cédrik FuocoandDoug Walker 6fc9f1f8da Adsk Contrib - Adding CG and Studio config v2.3 (#1836)
* Adding CG and Studio config 2.3

Signed-off-by: Cédrik Fuoco <cedrik.fuoco@autodesk.com>

* Changing the configs for the 2.1.0 ones.

Signed-off-by: Cédrik Fuoco <cedrik.fuoco@autodesk.com>

* Adding OCIO_DEPRECATED for getDefaultBuiltinConfigName

Signed-off-by: Cédrik Fuoco <cedrik.fuoco@autodesk.com>

---------

Signed-off-by: Cédrik Fuoco <cedrik.fuoco@autodesk.com>
Co-authored-by: Doug Walker <doug.walker@autodesk.com>
2023-08-30 17:37:41 -04:00

180 lines
6.2 KiB
Python

# SPDX-License-Identifier: BSD-3-Clause
# Copyright Contributors to the OpenColorIO Project.
try:
from collections.abc import Iterable
except ImportError:
# Python 2
from collections import Iterable
from re import S
import unittest
from UnitTestUtils import STRING_TYPES
import PyOpenColorIO as OCIO
class BuiltinConfigRegistryTest(unittest.TestCase):
# BuiltinRegistry singleton.
REGISTRY = None
@classmethod
def setUpClass(cls):
cls.REGISTRY = OCIO.BuiltinConfigRegistry()
def test_builtin_config_iterable(self):
all_names = []
for name in self.REGISTRY:
self.assertIsInstance(name, STRING_TYPES)
self.assertIsInstance(self.REGISTRY[name], STRING_TYPES)
all_names.append(name)
# All names were iterated over, and __len__ and list() behave.
self.assertEqual(len(all_names), len(self.REGISTRY))
self.assertListEqual(all_names, list(self.REGISTRY))
# Test iterator instance.
iterator = iter(self.REGISTRY)
self.assertIsInstance(iterator, Iterable)
# Iterator size is available.
self.assertEqual(len(iterator), len(self.REGISTRY))
# Iterator supports range-based loop and indexing.
values = list(iterator)
for i in range(len(iterator)):
# Item at index matches list result
self.assertEqual(iterator[i], values[i])
self.assertIsInstance(iterator[i], STRING_TYPES)
def test_contains(self):
# Valid __contains__ for all names.
for name in self.REGISTRY:
self.assertTrue(name in self.REGISTRY)
self.assertFalse(name not in self.REGISTRY)
# Invalid __contains__ for non-name.
self.assertTrue("I do not exist" not in self.REGISTRY)
def test_get_builtin_configs(self):
# tuple iterator (like dict.items())
for item in self.REGISTRY.getBuiltinConfigs():
self.assertIsInstance(item, tuple)
# check if there are three items per tuple.
self.assertEqual(len(item), 4)
# name
self.assertIsInstance(item[0], STRING_TYPES)
# uiname
self.assertIsInstance(item[1], STRING_TYPES)
# isRecommended
self.assertIsInstance(item[2], bool)
# isDefault
self.assertIsInstance(item[3], bool)
# tuple unpacking support.
for name, uiname, isRecommended, isDefault in self.REGISTRY.getBuiltinConfigs():
self.assertIsInstance(name, STRING_TYPES)
self.assertIsInstance(uiname, STRING_TYPES)
self.assertIsInstance(isRecommended, bool)
self.assertIsInstance(isDefault, bool)
# Test iterator instance.
iterator = self.REGISTRY.getBuiltinConfigs()
self.assertIsInstance(iterator, Iterable)
# Iterator size is available.
self.assertEqual(len(iterator), len(self.REGISTRY))
# Iterator supports range-based loop and indexing.
values = list(iterator)
for i in range(len(iterator)):
# Item at index matches list result
self.assertEqual(iterator[i], values[i])
self.assertIsInstance(iterator[i], tuple)
self.assertEqual(len(iterator[i]), 4)
# name
self.assertIsInstance(iterator[i][0], STRING_TYPES)
# uiname
self.assertIsInstance(iterator[i][1], STRING_TYPES)
# isRecommended
self.assertIsInstance(iterator[i][2], bool)
# isDefault
self.assertIsInstance(iterator[i][3], bool)
# Config specific tests
# Test number of configs.
self.assertEqual(len(self.REGISTRY), 4)
# Test for the default built-in config.
self.assertEqual(
self.REGISTRY.getDefaultBuiltinConfigName(),
"cg-config-v2.1.0_aces-v1.3_ocio-v2.3"
)
# Test the CG configs.
# Name
self.assertEqual(values[0][0], "cg-config-v1.0.0_aces-v1.3_ocio-v2.1")
# UI name
self.assertEqual(
values[0][1],
("Academy Color Encoding System - CG Config [COLORSPACES v1.0.0] [ACES v1.3] "
"[OCIO v2.1]"))
# isRecommended
self.assertEqual(values[0][2], False)
# Name
self.assertEqual(values[1][0], "cg-config-v2.1.0_aces-v1.3_ocio-v2.3")
# UI name
self.assertEqual(
values[1][1],
("Academy Color Encoding System - CG Config [COLORSPACES v2.0.0] [ACES v1.3] "
"[OCIO v2.3]"))
# isRecommended
self.assertEqual(values[1][2], True)
# Test the Studio configs
# Name
self.assertEqual(values[2][0], "studio-config-v1.0.0_aces-v1.3_ocio-v2.1")
# UI name
self.assertEqual(
values[2][1],
("Academy Color Encoding System - Studio Config [COLORSPACES v1.0.0] [ACES v1.3] "
"[OCIO v2.1]"))
# isRecommended
self.assertEqual(values[2][2], False)
# Name
self.assertEqual(values[3][0], "studio-config-v2.1.0_aces-v1.3_ocio-v2.3")
# UI name
self.assertEqual(
values[3][1],
("Academy Color Encoding System - Studio Config [COLORSPACES v2.0.0] [ACES v1.3] "
"[OCIO v2.3]"))
# isRecommended
self.assertEqual(values[1][2], True)
def test_multi_reference(self):
# Registry is a singleton. Make sure multiple Python
# instances can be held.
instances = []
for i in range(10):
instances.append(OCIO.BuiltinConfigRegistry())
# Other instances should still function after deleting one. The
# underlying C++ object is not deleted.
instance_0 = instances.pop(0)
self.assertEqual(len(instances), 9)
del instance_0
# Variable is no longer defined
with self.assertRaises(NameError):
len(instance_0)
# Test underlying C++ reference validity by accessing registry
# data for each instance.
for instance in instances:
self.assertGreaterEqual(len(instance), 1)
self.assertEqual(len(instance), len(self.REGISTRY))