bt2: remove _GenericMessageIterator abstraction level
[babeltrace.git] / tests / bindings / python / bt2 / test_message_iterator.py
index 2d4ab43850774131ffa9982355639079aa3f518b..752682bc9267045d6a8b4ea874ea4447ec44b56b 100644 (file)
@@ -292,9 +292,8 @@ class UserMessageIteratorTestCase(unittest.TestCase):
             def _user_seek_beginning(self):
                 self._upstream_iter.seek_beginning()
 
-            @property
             def _user_can_seek_beginning(self):
-                return self._upstream_iter.can_seek_beginning
+                return self._upstream_iter.can_seek_beginning()
 
         class MyFilter(bt2._UserFilterComponent, message_iterator_class=MyFilterIter):
             def __init__(self, params, obj):
@@ -345,7 +344,7 @@ def _setup_seek_test(sink_cls, user_seek_beginning=None, user_can_seek_beginning
         MySourceIter._user_seek_beginning = user_seek_beginning
 
     if user_can_seek_beginning is not None:
-        MySourceIter._user_can_seek_beginning = property(user_can_seek_beginning)
+        MySourceIter._user_can_seek_beginning = user_can_seek_beginning
 
     class MySource(bt2._UserSourceComponent, message_iterator_class=MySourceIter):
         def __init__(self, params, obj):
@@ -364,9 +363,8 @@ def _setup_seek_test(sink_cls, user_seek_beginning=None, user_can_seek_beginning
         def __next__(self):
             return next(self._upstream_iter)
 
-        @property
         def _user_can_seek_beginning(self):
-            return self._upstream_iter.can_seek_beginning
+            return self._upstream_iter.can_seek_beginning()
 
         def _user_seek_beginning(self):
             self._upstream_iter.seek_beginning()
@@ -392,7 +390,7 @@ class UserMessageIteratorSeekBeginningTestCase(unittest.TestCase):
 
             def _user_consume(self):
                 nonlocal can_seek_beginning
-                can_seek_beginning = self._msg_iter.can_seek_beginning
+                can_seek_beginning = self._msg_iter.can_seek_beginning()
 
         def _user_can_seek_beginning(self):
             nonlocal input_port_iter_can_seek_beginning
@@ -426,7 +424,7 @@ class UserMessageIteratorSeekBeginningTestCase(unittest.TestCase):
 
             def _user_consume(self):
                 nonlocal can_seek_beginning
-                can_seek_beginning = self._msg_iter.can_seek_beginning
+                can_seek_beginning = self._msg_iter.can_seek_beginning()
 
         def _user_seek_beginning(self):
             pass
@@ -450,13 +448,67 @@ class UserMessageIteratorSeekBeginningTestCase(unittest.TestCase):
 
             def _user_consume(self):
                 nonlocal can_seek_beginning
-                can_seek_beginning = self._msg_iter.can_seek_beginning
+                can_seek_beginning = self._msg_iter.can_seek_beginning()
 
         graph = _setup_seek_test(MySink)
         can_seek_beginning = None
         graph.run_once()
         self.assertFalse(can_seek_beginning)
 
+    def test_can_seek_beginning_user_error(self):
+        class MySink(bt2._UserSinkComponent):
+            def __init__(self, params, obj):
+                self._add_input_port('in')
+
+            def _user_graph_is_configured(self):
+                self._msg_iter = self._create_input_port_message_iterator(
+                    self._input_ports['in']
+                )
+
+            def _user_consume(self):
+                # This is expected to raise.
+                self._msg_iter.can_seek_beginning()
+
+        def _user_can_seek_beginning(self):
+            raise ValueError('moustiquaire')
+
+        graph = _setup_seek_test(
+            MySink, user_can_seek_beginning=_user_can_seek_beginning
+        )
+
+        with self.assertRaises(bt2._Error) as ctx:
+            graph.run_once()
+
+        cause = ctx.exception[0]
+        self.assertIn('ValueError: moustiquaire', cause.message)
+
+    def test_can_seek_beginning_wrong_return_value(self):
+        class MySink(bt2._UserSinkComponent):
+            def __init__(self, params, obj):
+                self._add_input_port('in')
+
+            def _user_graph_is_configured(self):
+                self._msg_iter = self._create_input_port_message_iterator(
+                    self._input_ports['in']
+                )
+
+            def _user_consume(self):
+                # This is expected to raise.
+                self._msg_iter.can_seek_beginning()
+
+        def _user_can_seek_beginning(self):
+            return 'Amqui'
+
+        graph = _setup_seek_test(
+            MySink, user_can_seek_beginning=_user_can_seek_beginning
+        )
+
+        with self.assertRaises(bt2._Error) as ctx:
+            graph.run_once()
+
+        cause = ctx.exception[0]
+        self.assertIn("TypeError: 'str' is not a 'bool' object", cause.message)
+
     def test_seek_beginning(self):
         class MySink(bt2._UserSinkComponent):
             def __init__(self, params, obj):
This page took 0.025083 seconds and 4 git commands to generate.