BPY IDProp tests: test matching results from subscription and path_resolve.
Add (partially disabled) systematic tests that for all IDProp types, the returned value from direct idprop subscription and RNA-based `path_resolve` return the same data. NOTE: This does not work currently for 'composite' types (`IDP_ARRAY` and `IDP_GROUP`).
This commit is contained in:
parent
17332da834
commit
a799c84946
@ -37,100 +37,144 @@ class TestHelper:
|
||||
|
||||
|
||||
class TestIdPropertyCreation(TestHelper, unittest.TestCase):
|
||||
# Default testing idprop key identifier.
|
||||
key_id = "a"
|
||||
|
||||
def test_name_empty(self):
|
||||
self.id[""] = 4
|
||||
self.assertEqual(self.id[""], 4)
|
||||
key_id = ""
|
||||
value = 4
|
||||
self.id[key_id] = value
|
||||
self.assertEqual(self.id[key_id], value)
|
||||
|
||||
def test_name_too_long(self):
|
||||
with self.assertRaises(KeyError):
|
||||
self.id["name" * 30] = 4
|
||||
|
||||
def test_int(self):
|
||||
self.id["a"] = 2
|
||||
self.assertEqual(self.id["a"], 2)
|
||||
self.assertTrue(isinstance(self.id["a"], int))
|
||||
value = 2
|
||||
self.id[self.key_id] = 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)))
|
||||
|
||||
with self.assertRaises(OverflowError):
|
||||
self.id["a"] = 2 ** 31 # integer <= 2 ** 31-1
|
||||
self.id[self.key_id] = 2 ** 31 # integer <= 2 ** 31-1
|
||||
|
||||
def test_double(self):
|
||||
self.id["a"] = 2.5
|
||||
self.assertEqual(self.id["a"], 2.5)
|
||||
self.assertTrue(isinstance(self.id["a"], float))
|
||||
value = 2.5
|
||||
self.id[self.key_id] = 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):
|
||||
self.id["a"] = "Hello World"
|
||||
self.assertEqual(self.id["a"], "Hello World")
|
||||
self.assertTrue(isinstance(self.id["a"], str))
|
||||
value = "Hello World"
|
||||
self.id[self.key_id] = 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)))
|
||||
|
||||
def test_bytes(self):
|
||||
self.id["a"] = b"Hello World"
|
||||
self.assertEqual(self.id["a"], b"Hello World")
|
||||
self.assertTrue(isinstance(self.id["a"], bytes))
|
||||
value = b"Hello World"
|
||||
self.id[self.key_id] = value
|
||||
self.assertEqual(self.id[self.key_id], value)
|
||||
self.assertTrue(isinstance(self.id[self.key_id], bytes))
|
||||
self.assertEqual(self.id[self.key_id],
|
||||
self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_enum(self):
|
||||
self.id["a"] = 5
|
||||
self.assertEqual(self.id["a"], 5)
|
||||
self.assertTrue(isinstance(self.id["a"], int))
|
||||
# Note: Fake enum, this merely creates a PROP_INT idprop.
|
||||
value = 5
|
||||
self.id[self.key_id] = value
|
||||
self.assertEqual(self.id[self.key_id], value)
|
||||
self.assertEqual(self.id[self.key_id],
|
||||
self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_sequence_double_list(self):
|
||||
mylist = [1.2, 3.4, 5.6]
|
||||
self.id["a"] = mylist
|
||||
self.assertEqual(self.id["a"].to_list(), mylist)
|
||||
self.assertEqual(self.id["a"].typecode, "d")
|
||||
self.id[self.key_id] = mylist
|
||||
self.assertEqual(self.id[self.key_id].to_list(), mylist)
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_sequence_int_list(self):
|
||||
mylist = [1, 2, 3]
|
||||
self.id["a"] = mylist
|
||||
self.assertEqual(self.id["a"].to_list(), mylist)
|
||||
self.assertEqual(self.id["a"].typecode, "i")
|
||||
self.id[self.key_id] = mylist
|
||||
self.assertEqual(self.id[self.key_id].to_list(), mylist)
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_sequence_float_array(self):
|
||||
mylist = [1.2, 3.4, 5.6]
|
||||
self.id["a"] = array("f", mylist)
|
||||
self.assertAlmostEqualSeq(self.id["a"].to_list(), mylist)
|
||||
self.assertEqual(self.id["a"].typecode, "f")
|
||||
self.id[self.key_id] = array("f", mylist)
|
||||
self.assertAlmostEqualSeq(self.id[self.key_id].to_list(), mylist)
|
||||
self.assertEqual(self.id[self.key_id].typecode, "f")
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_sequence_double_array(self):
|
||||
mylist = [1.2, 3.4, 5.6]
|
||||
self.id["a"] = array("d", mylist)
|
||||
self.assertAlmostEqualSeq(self.id["a"].to_list(), mylist)
|
||||
self.assertEqual(self.id["a"].typecode, "d")
|
||||
self.id[self.key_id] = array("d", mylist)
|
||||
self.assertAlmostEqualSeq(self.id[self.key_id].to_list(), mylist)
|
||||
self.assertEqual(self.id[self.key_id].typecode, "d")
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_sequence_int_array(self):
|
||||
mylist = [1, 2, 3]
|
||||
self.id["a"] = array("i", mylist)
|
||||
self.assertAlmostEqualSeq(self.id["a"].to_list(), mylist)
|
||||
self.assertEqual(self.id["a"].typecode, "i")
|
||||
self.id[self.key_id] = array("i", mylist)
|
||||
self.assertAlmostEqualSeq(self.id[self.key_id].to_list(), mylist)
|
||||
self.assertEqual(self.id[self.key_id].typecode, "i")
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_sequence_other_array(self):
|
||||
mylist = [1, 2, 3]
|
||||
self.id["a"] = array("Q", mylist)
|
||||
self.assertEqual(self.id["a"].to_list(), mylist)
|
||||
self.id[self.key_id] = array("Q", mylist)
|
||||
self.assertEqual(self.id[self.key_id].to_list(), mylist)
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_sequence_mixed_numerical_type(self):
|
||||
self.id["a"] = [1, 2, 3.4, 5]
|
||||
self.assertAlmostEqualSeq(self.id["a"].to_list(), [1.0, 2.0, 3.4, 5.0])
|
||||
self.assertEqual(self.id["a"].typecode, "d")
|
||||
self.id[self.key_id] = [1, 2, 3.4, 5]
|
||||
self.assertAlmostEqualSeq(self.id[self.key_id].to_list(), [1.0, 2.0, 3.4, 5.0])
|
||||
self.assertEqual(self.id[self.key_id].typecode, "d")
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_sequence_str_list(self):
|
||||
# I'm a bit surprised that this works
|
||||
mylist = ["abc", "qwe"]
|
||||
self.id["a"] = mylist
|
||||
self.assertEqual(self.id["a"], mylist)
|
||||
self.id[self.key_id] = mylist
|
||||
self.assertEqual(self.id[self.key_id], mylist)
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_sequence_mixed_type(self):
|
||||
with self.assertRaises(TypeError):
|
||||
mylist = ["abc", 3, "qwe", 3.4]
|
||||
self.id["a"] = mylist
|
||||
self.id[self.key_id] = mylist
|
||||
|
||||
def test_mapping_simple(self):
|
||||
mydict = {"1": 10, "2": "20", "3": 30.5}
|
||||
self.id["a"] = mydict
|
||||
self.assertEqual(self.id["a"]["1"], mydict["1"])
|
||||
self.assertEqual(self.id["a"]["2"], mydict["2"])
|
||||
self.assertEqual(self.id["a"]["3"], mydict["3"])
|
||||
self.id[self.key_id] = mydict
|
||||
self.assertEqual(self.id[self.key_id]["1"], mydict["1"])
|
||||
self.assertEqual(self.id[self.key_id]["2"], mydict["2"])
|
||||
self.assertEqual(self.id[self.key_id]["3"], mydict["3"])
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
def test_mapping_complex(self):
|
||||
mydict = {
|
||||
@ -138,19 +182,22 @@ class TestIdPropertyCreation(TestHelper, unittest.TestCase):
|
||||
"2": {"1": "abc", "2": array("i", [4, 5, 6])},
|
||||
"3": {"1": {"1": 10}, "2": b"qwe"},
|
||||
}
|
||||
self.id["a"] = mydict
|
||||
self.assertEqual(self.id["a"]["1"].to_list(), [1, 2, 3])
|
||||
self.assertEqual(self.id["a"]["2"]["1"], "abc")
|
||||
self.assertEqual(self.id["a"]["2"]["2"].to_list(), [4, 5, 6])
|
||||
self.assertEqual(self.id["a"]["3"]["1"]["1"], 10)
|
||||
self.assertEqual(self.id["a"]["3"]["2"], b"qwe")
|
||||
self.id[self.key_id] = mydict
|
||||
self.assertEqual(self.id[self.key_id]["1"].to_list(), [1, 2, 3])
|
||||
self.assertEqual(self.id[self.key_id]["2"]["1"], "abc")
|
||||
self.assertEqual(self.id[self.key_id]["2"]["2"].to_list(), [4, 5, 6])
|
||||
self.assertEqual(self.id[self.key_id]["3"]["1"]["1"], 10)
|
||||
self.assertEqual(self.id[self.key_id]["3"]["2"], b"qwe")
|
||||
# Complex types currently return different object types.
|
||||
# self.assertEqual(self.id[self.key_id],
|
||||
# self.id.path_resolve('["%s"]' % bpy.utils.escape_identifier(self.key_id)))
|
||||
|
||||
with self.assertRaises(KeyError):
|
||||
a = self.id["a"]["2"]["a"]
|
||||
a = self.id[self.key_id]["2"]["a"]
|
||||
|
||||
def test_invalid_type(self):
|
||||
with self.assertRaises(TypeError):
|
||||
self.id["a"] = self
|
||||
self.id[self.key_id] = self
|
||||
|
||||
|
||||
class TestIdPropertyGroupView(TestHelper, unittest.TestCase):
|
||||
|
Loading…
Reference in New Issue
Block a user