Move to kernel style SPDX license identifiers
[babeltrace.git] / tests / bindings / python / bt2 / test_port.py
index 2d203784624418925db5d55ff6d2f79ee0409304..c4b7674c0960bf95c31e7b628bfaa658896a4391 100644 (file)
@@ -1,5 +1,11 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2019 EfficiOS Inc.
+#
+
 import unittest
 import bt2
+from bt2 import port as bt2_port
 
 
 class PortTestCase(unittest.TestCase):
@@ -13,27 +19,22 @@ class PortTestCase(unittest.TestCase):
         return graph.add_component(comp_cls, name)
 
     def test_src_add_output_port(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MySource(
+            bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 port = comp_self._add_output_port('out')
                 self.assertEqual(port.name, 'out')
 
         comp = self._create_comp(MySource)
         self.assertEqual(len(comp.output_ports), 1)
+        self.assertIs(type(comp.output_ports['out']), bt2_port._OutputPortConst)
 
     def test_flt_add_output_port(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 port = comp_self._add_output_port('out')
                 self.assertEqual(port.name, 'out')
 
@@ -41,39 +42,34 @@ class PortTestCase(unittest.TestCase):
         self.assertEqual(len(comp.output_ports), 1)
 
     def test_flt_add_input_port(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 port = comp_self._add_input_port('in')
                 self.assertEqual(port.name, 'in')
 
         comp = self._create_comp(MyFilter)
         self.assertEqual(len(comp.input_ports), 1)
+        self.assertIs(type(comp.input_ports['in']), bt2_port._InputPortConst)
 
     def test_sink_add_input_port(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 port = comp_self._add_input_port('in')
                 self.assertEqual(port.name, 'in')
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         comp = self._create_comp(MySink)
         self.assertEqual(len(comp.input_ports), 1)
 
     def test_user_src_output_ports_getitem(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MySource(
+            bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 port1 = comp_self._add_output_port('clear')
                 port2 = comp_self._add_output_port('print')
                 port3 = comp_self._add_output_port('insert')
@@ -84,13 +80,10 @@ class PortTestCase(unittest.TestCase):
         self._create_comp(MySource)
 
     def test_user_flt_output_ports_getitem(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 port1 = comp_self._add_output_port('clear')
                 port2 = comp_self._add_output_port('print')
                 port3 = comp_self._add_output_port('insert')
@@ -101,13 +94,10 @@ class PortTestCase(unittest.TestCase):
         self._create_comp(MyFilter)
 
     def test_user_flt_input_ports_getitem(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 port1 = comp_self._add_input_port('clear')
                 port2 = comp_self._add_input_port('print')
                 port3 = comp_self._add_input_port('insert')
@@ -119,7 +109,7 @@ class PortTestCase(unittest.TestCase):
 
     def test_user_sink_input_ports_getitem(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 port1 = comp_self._add_input_port('clear')
                 port2 = comp_self._add_input_port('print')
                 port3 = comp_self._add_input_port('insert')
@@ -127,19 +117,16 @@ class PortTestCase(unittest.TestCase):
                 self.assertEqual(port2.addr, comp_self._input_ports['print'].addr)
                 self.assertEqual(port1.addr, comp_self._input_ports['clear'].addr)
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         self._create_comp(MySink)
 
     def test_user_src_output_ports_getitem_invalid_key(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MySource(
+            bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_output_port('clear')
                 comp_self._add_output_port('print')
                 comp_self._add_output_port('insert')
@@ -150,13 +137,10 @@ class PortTestCase(unittest.TestCase):
         self._create_comp(MySource)
 
     def test_user_flt_output_ports_getitem_invalid_key(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_output_port('clear')
                 comp_self._add_output_port('print')
                 comp_self._add_output_port('insert')
@@ -167,13 +151,10 @@ class PortTestCase(unittest.TestCase):
         self._create_comp(MyFilter)
 
     def test_user_flt_input_ports_getitem_invalid_key(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
                 comp_self._add_input_port('print')
                 comp_self._add_input_port('insert')
@@ -185,7 +166,7 @@ class PortTestCase(unittest.TestCase):
 
     def test_user_sink_input_ports_getitem_invalid_key(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
                 comp_self._add_input_port('print')
                 comp_self._add_input_port('insert')
@@ -193,19 +174,16 @@ class PortTestCase(unittest.TestCase):
                 with self.assertRaises(KeyError):
                     comp_self._input_ports['hello']
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         self._create_comp(MySink)
 
     def test_user_src_output_ports_len(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MySource(
+            bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_output_port('clear')
                 comp_self._add_output_port('print')
                 comp_self._add_output_port('insert')
@@ -214,13 +192,10 @@ class PortTestCase(unittest.TestCase):
         self._create_comp(MySource)
 
     def test_user_flt_output_ports_len(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_output_port('clear')
                 comp_self._add_output_port('print')
                 comp_self._add_output_port('insert')
@@ -229,13 +204,10 @@ class PortTestCase(unittest.TestCase):
         self._create_comp(MyFilter)
 
     def test_user_flt_input_ports_len(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
                 comp_self._add_input_port('print')
                 comp_self._add_input_port('insert')
@@ -245,25 +217,22 @@ class PortTestCase(unittest.TestCase):
 
     def test_user_sink_input_ports_len(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
                 comp_self._add_input_port('print')
                 comp_self._add_input_port('insert')
                 self.assertEqual(len(comp_self._input_ports), 3)
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         self._create_comp(MySink)
 
     def test_user_src_output_ports_iter(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MySource(
+            bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 port1 = comp_self._add_output_port('clear')
                 port2 = comp_self._add_output_port('print')
                 port3 = comp_self._add_output_port('insert')
@@ -282,13 +251,10 @@ class PortTestCase(unittest.TestCase):
         self._create_comp(MySource)
 
     def test_user_flt_output_ports_iter(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 port1 = comp_self._add_output_port('clear')
                 port2 = comp_self._add_output_port('print')
                 port3 = comp_self._add_output_port('insert')
@@ -307,13 +273,10 @@ class PortTestCase(unittest.TestCase):
         self._create_comp(MyFilter)
 
     def test_user_flt_input_ports_iter(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 port1 = comp_self._add_input_port('clear')
                 port2 = comp_self._add_input_port('print')
                 port3 = comp_self._add_input_port('insert')
@@ -333,7 +296,7 @@ class PortTestCase(unittest.TestCase):
 
     def test_user_sink_input_ports_iter(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 port1 = comp_self._add_input_port('clear')
                 port2 = comp_self._add_input_port('print')
                 port3 = comp_self._add_input_port('insert')
@@ -349,23 +312,20 @@ class PortTestCase(unittest.TestCase):
                 self.assertEqual(ports[2][0], 'insert')
                 self.assertEqual(ports[2][1].addr, port3.addr)
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         self._create_comp(MySink)
 
     def test_gen_src_output_ports_getitem(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
         port1 = None
         port2 = None
         port3 = None
 
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MySource(
+            bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 nonlocal port1, port2, port3
                 port1 = comp_self._add_output_port('clear')
                 port2 = comp_self._add_output_port('print')
@@ -380,17 +340,14 @@ class PortTestCase(unittest.TestCase):
         del port3
 
     def test_gen_flt_output_ports_getitem(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
         port1 = None
         port2 = None
         port3 = None
 
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 nonlocal port1, port2, port3
                 port1 = comp_self._add_output_port('clear')
                 port2 = comp_self._add_output_port('print')
@@ -405,17 +362,14 @@ class PortTestCase(unittest.TestCase):
         del port3
 
     def test_gen_flt_input_ports_getitem(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
         port1 = None
         port2 = None
         port3 = None
 
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 nonlocal port1, port2, port3
                 port1 = comp_self._add_input_port('clear')
                 port2 = comp_self._add_input_port('print')
@@ -435,13 +389,13 @@ class PortTestCase(unittest.TestCase):
         port3 = None
 
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 nonlocal port1, port2, port3
                 port1 = comp_self._add_input_port('clear')
                 port2 = comp_self._add_input_port('print')
                 port3 = comp_self._add_input_port('insert')
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         comp = self._create_comp(MySink)
@@ -453,13 +407,10 @@ class PortTestCase(unittest.TestCase):
         del port3
 
     def test_gen_src_output_ports_getitem_invalid_key(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MySource(
+            bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_output_port('clear')
                 comp_self._add_output_port('print')
                 comp_self._add_output_port('insert')
@@ -470,13 +421,10 @@ class PortTestCase(unittest.TestCase):
             comp.output_ports['hello']
 
     def test_gen_flt_output_ports_getitem_invalid_key(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_output_port('clear')
                 comp_self._add_output_port('print')
                 comp_self._add_output_port('insert')
@@ -487,13 +435,10 @@ class PortTestCase(unittest.TestCase):
             comp.output_ports['hello']
 
     def test_gen_flt_input_ports_getitem_invalid_key(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
                 comp_self._add_input_port('print')
                 comp_self._add_input_port('insert')
@@ -505,7 +450,7 @@ class PortTestCase(unittest.TestCase):
 
     def test_gen_sink_input_ports_getitem_invalid_key(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
                 comp_self._add_input_port('print')
                 comp_self._add_input_port('insert')
@@ -513,7 +458,7 @@ class PortTestCase(unittest.TestCase):
                 with self.assertRaises(KeyError):
                     comp_self._input_ports['hello']
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         comp = self._create_comp(MySink)
@@ -522,13 +467,10 @@ class PortTestCase(unittest.TestCase):
             comp.input_ports['hello']
 
     def test_gen_src_output_ports_len(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MySource(
+            bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_output_port('clear')
                 comp_self._add_output_port('print')
                 comp_self._add_output_port('insert')
@@ -537,13 +479,10 @@ class PortTestCase(unittest.TestCase):
         self.assertEqual(len(comp.output_ports), 3)
 
     def test_gen_flt_output_ports_len(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_output_port('clear')
                 comp_self._add_output_port('print')
                 comp_self._add_output_port('insert')
@@ -552,13 +491,10 @@ class PortTestCase(unittest.TestCase):
         self.assertEqual(len(comp.output_ports), 3)
 
     def test_gen_flt_input_ports_len(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
                 comp_self._add_input_port('print')
                 comp_self._add_input_port('insert')
@@ -568,29 +504,26 @@ class PortTestCase(unittest.TestCase):
 
     def test_gen_sink_input_ports_len(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
                 comp_self._add_input_port('print')
                 comp_self._add_input_port('insert')
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         comp = self._create_comp(MySink)
         self.assertEqual(len(comp.input_ports), 3)
 
     def test_gen_src_output_ports_iter(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
         port1 = None
         port2 = None
         port3 = None
 
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MySource(
+            bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 nonlocal port1, port2, port3
                 port1 = comp_self._add_output_port('clear')
                 port2 = comp_self._add_output_port('print')
@@ -613,17 +546,14 @@ class PortTestCase(unittest.TestCase):
         del port3
 
     def test_gen_flt_output_ports_iter(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
         port1 = None
         port2 = None
         port3 = None
 
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 nonlocal port1, port2, port3
                 port1 = comp_self._add_output_port('clear')
                 port2 = comp_self._add_output_port('print')
@@ -646,17 +576,14 @@ class PortTestCase(unittest.TestCase):
         del port3
 
     def test_gen_flt_input_ports_iter(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
         port1 = None
         port2 = None
         port3 = None
 
-        class MyFilter(bt2._UserFilterComponent,
-                       message_iterator_class=MyIter):
-            def __init__(comp_self, params):
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
                 nonlocal port1, port2, port3
                 port1 = comp_self._add_input_port('clear')
                 port2 = comp_self._add_input_port('print')
@@ -684,13 +611,13 @@ class PortTestCase(unittest.TestCase):
         port3 = None
 
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 nonlocal port1, port2, port3
                 port1 = comp_self._add_input_port('clear')
                 port2 = comp_self._add_input_port('print')
                 port3 = comp_self._add_input_port('insert')
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         comp = self._create_comp(MySink)
@@ -711,10 +638,10 @@ class PortTestCase(unittest.TestCase):
 
     def test_name(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         comp = self._create_comp(MySink)
@@ -722,10 +649,10 @@ class PortTestCase(unittest.TestCase):
 
     def test_connection_none(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         comp = self._create_comp(MySink)
@@ -733,10 +660,10 @@ class PortTestCase(unittest.TestCase):
 
     def test_is_connected_false(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 comp_self._add_input_port('clear')
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         comp = self._create_comp(MySink)
@@ -744,33 +671,147 @@ class PortTestCase(unittest.TestCase):
 
     def test_self_name(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 port = comp_self._add_input_port('clear')
                 self.assertEqual(port.name, 'clear')
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         self._create_comp(MySink)
 
     def test_self_connection_none(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 port = comp_self._add_input_port('clear')
                 self.assertIsNone(port.connection)
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         self._create_comp(MySink)
 
     def test_self_is_connected_false(self):
         class MySink(bt2._UserSinkComponent):
-            def __init__(comp_self, params):
+            def __init__(comp_self, config, params, obj):
                 port = comp_self._add_input_port('clear')
                 self.assertFalse(port.is_connected)
 
-            def _consume(self):
+            def _user_consume(self):
                 pass
 
         self._create_comp(MySink)
+
+    def test_source_self_port_user_data(self):
+        class MyUserData:
+            def __del__(self):
+                nonlocal objects_deleted
+                objects_deleted += 1
+
+        class MySource(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
+                nonlocal user_datas
+
+                p = comp_self._add_output_port('port1')
+                user_datas.append(p.user_data)
+                p = comp_self._add_output_port('port2', 2)
+                user_datas.append(p.user_data)
+                p = comp_self._add_output_port('port3', MyUserData())
+                user_datas.append(p.user_data)
+
+        user_datas = []
+        objects_deleted = 0
+
+        comp = self._create_comp(MySource)
+        self.assertEqual(len(user_datas), 3)
+        self.assertIs(user_datas[0], None)
+        self.assertEqual(user_datas[1], 2)
+        self.assertIs(type(user_datas[2]), MyUserData)
+
+        # Verify that the user data gets freed.
+        self.assertEqual(objects_deleted, 0)
+        del user_datas
+        del comp
+        self.assertEqual(objects_deleted, 1)
+
+    def test_filter_self_port_user_data(self):
+        class MyUserData:
+            def __del__(self):
+                nonlocal objects_deleted
+                objects_deleted += 1
+
+        class MyFilter(
+            bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
+        ):
+            def __init__(comp_self, config, params, obj):
+                nonlocal user_datas
+
+                p = comp_self._add_output_port('port1')
+                user_datas.append(p.user_data)
+                p = comp_self._add_output_port('port2', 'user data string')
+                user_datas.append(p.user_data)
+                p = comp_self._add_output_port('port3', MyUserData())
+                user_datas.append(p.user_data)
+
+                p = comp_self._add_input_port('port4')
+                user_datas.append(p.user_data)
+                p = comp_self._add_input_port('port5', user_data={'user data': 'dict'})
+                user_datas.append(p.user_data)
+                p = comp_self._add_input_port('port6', MyUserData())
+                user_datas.append(p.user_data)
+
+        user_datas = []
+        objects_deleted = 0
+
+        comp = self._create_comp(MyFilter)
+        self.assertEqual(len(user_datas), 6)
+        self.assertIs(user_datas[0], None)
+        self.assertEqual(user_datas[1], 'user data string')
+        self.assertIs(type(user_datas[2]), MyUserData)
+        self.assertIs(user_datas[3], None)
+        self.assertEqual(user_datas[4], {'user data': 'dict'})
+        self.assertIs(type(user_datas[5]), MyUserData)
+
+        # Verify that the user data gets freed.
+        self.assertEqual(objects_deleted, 0)
+        del user_datas
+        del comp
+        self.assertEqual(objects_deleted, 2)
+
+    def test_sink_self_port_user_data(self):
+        class MyUserData:
+            def __del__(self):
+                nonlocal objects_deleted
+                objects_deleted += 1
+
+        class MySink(bt2._UserSinkComponent):
+            def __init__(comp_self, config, params, obj):
+                nonlocal user_datas
+
+                p = comp_self._add_input_port('port1')
+                user_datas.append(p.user_data)
+                p = comp_self._add_input_port('port2', MyUserData())
+                user_datas.append(p.user_data)
+
+            def _user_consume(self):
+                pass
+
+        user_datas = []
+        objects_deleted = 0
+
+        comp = self._create_comp(MySink)
+        self.assertEqual(len(user_datas), 2)
+        self.assertIs(user_datas[0], None)
+        self.assertIs(type(user_datas[1]), MyUserData)
+
+        # Verify that the user data gets freed.
+        self.assertEqual(objects_deleted, 0)
+        del user_datas
+        del comp
+        self.assertEqual(objects_deleted, 1)
+
+
+if __name__ == '__main__':
+    unittest.main()
This page took 0.032048 seconds and 4 git commands to generate.