From 65f68fe7fea4f0449fa4e0ab1c327386a7aeac83 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 10 Jun 2024 15:53:16 +0200 Subject: [PATCH] BPY IDProp tests: Add basic tests for 'UI data' system. This are not complete by far, mainly here to illustrate the issue reported in #122843 (mismatch returned value for 'enum' idprops). --- tests/python/bl_pyapi_idprop.py | 54 +++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tests/python/bl_pyapi_idprop.py b/tests/python/bl_pyapi_idprop.py index c86f5fb3302..73b083468e7 100644 --- a/tests/python/bl_pyapi_idprop.py +++ b/tests/python/bl_pyapi_idprop.py @@ -4,7 +4,9 @@ # ./blender.bin --background --python tests/python/bl_pyapi_idprop.py -- --verbose import bpy +import rna_prop_ui import idprop + import unittest from array import array @@ -200,6 +202,58 @@ class TestIdPropertyCreation(TestHelper, unittest.TestCase): self.id[self.key_id] = self +class TestIdPropertyUIData(TestHelper, unittest.TestCase): + # Default testing idprop key identifier. + key_id = "a" + + def test_int(self): + value = 2 + rna_prop_ui.rna_idprop_ui_create(self.id, self.key_id, default=value) + self.assertEqual(self.id[self.key_id], value) + self.assertTrue(isinstance(self.id[self.key_id], int)) + self.assertEqual(self.id[self.key_id], + self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id))) + + def test_double(self): + value = 2.5 + rna_prop_ui.rna_idprop_ui_create(self.id, self.key_id, default=value) + self.assertEqual(self.id[self.key_id], value) + self.assertTrue(isinstance(self.id[self.key_id], float)) + self.assertEqual(self.id[self.key_id], + self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id))) + + def test_unicode(self): + value = "Hello World" + rna_prop_ui.rna_idprop_ui_create(self.id, self.key_id, default=value) + self.assertEqual(self.id[self.key_id], value) + self.assertTrue(isinstance(self.id[self.key_id], str)) + self.assertEqual(self.id[self.key_id], + self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id))) + + # NOTE: Bytes strings are not supported currently. + + def test_enum(self): + value = 1 + items = [('A', '', ''), ('B', '', '')] + rna_prop_ui.rna_idprop_ui_create(self.id, self.key_id, default=value, items=items) + # 'Enum' 'type' of idprop currently returns integer value for direct subscription, + # and string key for `path_resolve` usage. See also #122843 . + self.assertEqual(self.id[self.key_id], value) + if False: # FIXME + self.assertEqual(self.id[self.key_id], + self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id))) + else: + self.assertEqual(self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)), 'B') + self.assertEqual(self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)), 'B') + self.id[self.key_id] = 0 + self.assertEqual(self.id[self.key_id], 0) + if False: # FIXME + self.assertEqual(self.id[self.key_id], + self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id))) + else: + self.assertEqual(self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)), 'A') + + class TestIdPropertyGroupView(TestHelper, unittest.TestCase): def test_type(self):