[libcamera-devel,v2,4/5] py: unittests.py: Add weakref helpers and use del
diff mbox series

Message ID 20230530120133.99033-5-tomi.valkeinen@ideasonboard.com
State Accepted
Headers show
Series
  • py: Misc changes & move to mainline pybind11
Related show

Commit Message

Tomi Valkeinen May 30, 2023, 12:01 p.m. UTC
Add helpers to check if a weakref or a list of weakrefs is alive or
dead.

Also use 'del' for local variables instead of setting the variable to
None. This makes debugging the test easier as the locals will be gone
from locals() dict.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 test/py/unittests.py | 60 ++++++++++++++++++++++++++------------------
 1 file changed, 36 insertions(+), 24 deletions(-)

Patch
diff mbox series

diff --git a/test/py/unittests.py b/test/py/unittests.py
index 0057ec92..fe1e8ef0 100755
--- a/test/py/unittests.py
+++ b/test/py/unittests.py
@@ -18,6 +18,18 @@  class BaseTestCase(unittest.TestCase):
     def assertZero(self, a, msg=None):
         self.assertEqual(a, 0, msg)
 
+    def assertIsAlive(self, wr, msg='object not alive'):
+        self.assertIsNotNone(wr(), msg)
+
+    def assertIsDead(self, wr, msg='object not dead'):
+        self.assertIsNone(wr(), msg)
+
+    def assertIsAllAlive(self, wr_list, msg='object not alive'):
+        self.assertTrue(all([wr() for wr in wr_list]), msg)
+
+    def assertIsAllDead(self, wr_list, msg='object not dead'):
+        self.assertTrue(all([not wr() for wr in wr_list]), msg)
+
 
 class SimpleTestMethods(BaseTestCase):
     def test_get_ref(self):
@@ -28,14 +40,14 @@  class SimpleTestMethods(BaseTestCase):
         self.assertIsNotNone(cam)
         wr_cam = weakref.ref(cam)
 
-        cm = None
+        del cm
         gc.collect()
-        self.assertIsNotNone(wr_cm())
+        self.assertIsAlive(wr_cm)
 
-        cam = None
+        del cam
         gc.collect()
-        self.assertIsNone(wr_cm())
-        self.assertIsNone(wr_cam())
+        self.assertIsDead(wr_cm)
+        self.assertIsDead(wr_cam)
 
     def test_acquire_release(self):
         cm = libcam.CameraManager.singleton()
@@ -93,8 +105,8 @@  class CameraTesterBase(BaseTestCase):
         self.cam = None
         self.cm = None
 
-        self.assertIsNone(self.wr_cm())
-        self.assertIsNone(self.wr_cam())
+        self.assertIsDead(self.wr_cm)
+        self.assertIsDead(self.wr_cam)
 
 
 class AllocatorTestMethods(CameraTesterBase):
@@ -114,11 +126,11 @@  class AllocatorTestMethods(CameraTesterBase):
         wr_stream = weakref.ref(stream)
 
         # stream should keep streamconfig and camconfig alive
-        streamconfig = None
-        camconfig = None
+        del streamconfig
+        del camconfig
         gc.collect()
-        self.assertIsNotNone(wr_camconfig())
-        self.assertIsNotNone(wr_streamconfig())
+        self.assertIsAlive(wr_camconfig)
+        self.assertIsAlive(wr_streamconfig)
 
         allocator = libcam.FrameBufferAllocator(cam)
         num_bufs = allocator.allocate(stream)
@@ -127,29 +139,29 @@  class AllocatorTestMethods(CameraTesterBase):
 
         buffers = allocator.buffers(stream)
         self.assertIsNotNone(buffers)
-        buffers = None
+        del buffers
 
         buffer = allocator.buffers(stream)[0]
         self.assertIsNotNone(buffer)
         wr_buffer = weakref.ref(buffer)
 
-        allocator = None
+        del allocator
         gc.collect()
-        self.assertIsNotNone(wr_buffer())
-        self.assertIsNotNone(wr_allocator())
-        self.assertIsNotNone(wr_stream())
+        self.assertIsAlive(wr_buffer)
+        self.assertIsAlive(wr_allocator)
+        self.assertIsAlive(wr_stream)
 
-        buffer = None
+        del buffer
         gc.collect()
-        self.assertIsNone(wr_buffer())
-        self.assertIsNone(wr_allocator())
-        self.assertIsNotNone(wr_stream())
+        self.assertIsDead(wr_buffer)
+        self.assertIsDead(wr_allocator)
+        self.assertIsAlive(wr_stream)
 
-        stream = None
+        del stream
         gc.collect()
-        self.assertIsNone(wr_stream())
-        self.assertIsNone(wr_camconfig())
-        self.assertIsNone(wr_streamconfig())
+        self.assertIsDead(wr_stream)
+        self.assertIsDead(wr_camconfig)
+        self.assertIsDead(wr_streamconfig)
 
 
 class SimpleCaptureMethods(CameraTesterBase):