diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-05-11 02:40:41 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-05-14 17:36:49 +0300 |
commit | 265d97556aa0f0f2a0e4dd7584e3b8573bbddd54 (patch) | |
tree | 76ffd53c8853d68a5adb87bb8c0b4f80d0ee9a90 /tests | |
parent | 65f955081370e77a61d822da1fa78960c8a0149e (diff) |
PyAPI: use iterators for ID property methods (keys, values & items)
- Matches changes in Python 3.x dictionary methods.
- Iterating now raises a run-time error if the property-group changes
size during iteration.
- IDPropertyGroup.iteritems() has been removed.
- IDPropertyGroup View & Iterator types have been added.
- Some set functionality from dict_keys/values/items aren't yet
supported (isdisjoint method and boolean set style operations).
Proposed as part of T85675.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/python/bl_pyapi_idprop.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/python/bl_pyapi_idprop.py b/tests/python/bl_pyapi_idprop.py index 7b480f5fa16..1e570bf9a7f 100644 --- a/tests/python/bl_pyapi_idprop.py +++ b/tests/python/bl_pyapi_idprop.py @@ -2,6 +2,7 @@ # ./blender.bin --background -noaudio --python tests/python/bl_pyapi_idprop.py -- --verbose import bpy +import idprop import unittest import numpy as np from array import array @@ -139,6 +140,51 @@ class TestIdPropertyCreation(TestHelper, unittest.TestCase): with self.assertRaises(TypeError): self.id["a"] = self +class TestIdPropertyGroupView(TestHelper, unittest.TestCase): + + def test_type(self): + self.assertEqual(type(self.id.keys()), idprop.types.IDPropertyGroupViewKeys) + self.assertEqual(type(self.id.values()), idprop.types.IDPropertyGroupViewValues) + self.assertEqual(type(self.id.items()), idprop.types.IDPropertyGroupViewItems) + + self.assertEqual(type(iter(self.id.keys())), idprop.types.IDPropertyGroupIterKeys) + self.assertEqual(type(iter(self.id.values())), idprop.types.IDPropertyGroupIterValues) + self.assertEqual(type(iter(self.id.items())), idprop.types.IDPropertyGroupIterItems) + + def test_basic(self): + text = ["A", "B", "C"] + for i, ch in enumerate(text): + self.id[ch] = i + self.assertEqual(len(self.id.keys()), len(text)) + self.assertEqual(list(self.id.keys()), text) + self.assertEqual(list(reversed(self.id.keys())), list(reversed(text))) + + self.assertEqual(len(self.id.values()), len(text)) + self.assertEqual(list(self.id.values()), list(range(len(text)))) + self.assertEqual(list(reversed(self.id.values())), list(reversed(range(len(text))))) + + self.assertEqual(len(self.id.items()), len(text)) + self.assertEqual(list(self.id.items()), [(k, v) for v, k in enumerate(text)]) + self.assertEqual(list(reversed(self.id.items())), list(reversed([(k, v) for v, k in enumerate(text)]))) + + def test_contains(self): + # Check `idprop.types.IDPropertyGroupView{Keys/Values/Items}.__contains__` + text = ["A", "B", "C"] + for i, ch in enumerate(text): + self.id[ch] = i + + self.assertIn("A", self.id) + self.assertNotIn("D", self.id) + + self.assertIn("A", self.id.keys()) + self.assertNotIn("D", self.id.keys()) + + self.assertIn(2, self.id.values()) + self.assertNotIn(3, self.id.values()) + + self.assertIn(("A", 0), self.id.items()) + self.assertNotIn(("D", 3), self.id.items()) + class TestBufferProtocol(TestHelper, unittest.TestCase): |