X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=tests%2Fbindings%2Fpython%2Fbt2%2Ftest_port.py;h=3ba46cdd1772cc4ae3d72b206c758d62ed89256d;hb=f002c045dc8f7a2f077e2ec4fa8a168f39c77619;hp=7e489d32c9ca350a754360f6446ac66b3a27a1f6;hpb=b20382e2b6f7f373c838a1eed82c2635d606a6b3;p=babeltrace.git diff --git a/tests/bindings/python/bt2/test_port.py b/tests/bindings/python/bt2/test_port.py index 7e489d32..3ba46cdd 100644 --- a/tests/bindings/python/bt2/test_port.py +++ b/tests/bindings/python/bt2/test_port.py @@ -18,6 +18,7 @@ import unittest import bt2 +from bt2 import port as bt2_port class PortTestCase(unittest.TestCase): @@ -31,25 +32,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, obj): + 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, obj): + 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') @@ -57,21 +55,20 @@ 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, obj): + 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, obj): + def __init__(comp_self, config, params, obj): port = comp_self._add_input_port('in') self.assertEqual(port.name, 'in') @@ -82,12 +79,10 @@ class PortTestCase(unittest.TestCase): 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, obj): + 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') @@ -98,12 +93,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, obj): + 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') @@ -114,12 +107,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, obj): + 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') @@ -131,7 +122,7 @@ class PortTestCase(unittest.TestCase): def test_user_sink_input_ports_getitem(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + 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') @@ -145,12 +136,10 @@ class PortTestCase(unittest.TestCase): 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, obj): + 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') @@ -161,12 +150,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, obj): + 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') @@ -177,12 +164,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, obj): + 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') @@ -194,7 +179,7 @@ class PortTestCase(unittest.TestCase): def test_user_sink_input_ports_getitem_invalid_key(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + 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') @@ -208,12 +193,10 @@ class PortTestCase(unittest.TestCase): 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, obj): + 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') @@ -222,12 +205,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, obj): + 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') @@ -236,12 +217,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, obj): + 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') @@ -251,7 +230,7 @@ class PortTestCase(unittest.TestCase): def test_user_sink_input_ports_len(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + 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') @@ -263,12 +242,10 @@ class PortTestCase(unittest.TestCase): 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, obj): + 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') @@ -287,12 +264,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, obj): + 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') @@ -311,12 +286,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, obj): + 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') @@ -336,7 +309,7 @@ class PortTestCase(unittest.TestCase): def test_user_sink_input_ports_iter(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + 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') @@ -358,16 +331,14 @@ class PortTestCase(unittest.TestCase): 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, obj): + 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') @@ -382,16 +353,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, obj): + 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') @@ -406,16 +375,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, obj): + 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,7 +402,7 @@ class PortTestCase(unittest.TestCase): port3 = None class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + 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') @@ -453,12 +420,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, obj): + 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') @@ -469,12 +434,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, obj): + 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') @@ -485,12 +448,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, obj): + 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') @@ -502,7 +463,7 @@ class PortTestCase(unittest.TestCase): def test_gen_sink_input_ports_getitem_invalid_key(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + 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') @@ -519,12 +480,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, obj): + 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') @@ -533,12 +492,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, obj): + 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') @@ -547,12 +504,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, obj): + 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') @@ -562,7 +517,7 @@ class PortTestCase(unittest.TestCase): def test_gen_sink_input_ports_len(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + 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') @@ -574,16 +529,14 @@ class PortTestCase(unittest.TestCase): 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, obj): + 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') @@ -606,16 +559,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, obj): + 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') @@ -638,16 +589,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, obj): + 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') @@ -675,7 +624,7 @@ class PortTestCase(unittest.TestCase): port3 = None class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + 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') @@ -702,7 +651,7 @@ class PortTestCase(unittest.TestCase): def test_name(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + def __init__(comp_self, config, params, obj): comp_self._add_input_port('clear') def _user_consume(self): @@ -713,7 +662,7 @@ class PortTestCase(unittest.TestCase): def test_connection_none(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + def __init__(comp_self, config, params, obj): comp_self._add_input_port('clear') def _user_consume(self): @@ -724,7 +673,7 @@ class PortTestCase(unittest.TestCase): def test_is_connected_false(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + def __init__(comp_self, config, params, obj): comp_self._add_input_port('clear') def _user_consume(self): @@ -735,7 +684,7 @@ class PortTestCase(unittest.TestCase): def test_self_name(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + def __init__(comp_self, config, params, obj): port = comp_self._add_input_port('clear') self.assertEqual(port.name, 'clear') @@ -746,7 +695,7 @@ class PortTestCase(unittest.TestCase): def test_self_connection_none(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + def __init__(comp_self, config, params, obj): port = comp_self._add_input_port('clear') self.assertIsNone(port.connection) @@ -757,7 +706,7 @@ class PortTestCase(unittest.TestCase): def test_self_is_connected_false(self): class MySink(bt2._UserSinkComponent): - def __init__(comp_self, params, obj): + def __init__(comp_self, config, params, obj): port = comp_self._add_input_port('clear') self.assertFalse(port.is_connected) @@ -767,65 +716,115 @@ class PortTestCase(unittest.TestCase): self._create_comp(MySink) def test_source_self_port_user_data(self): - class MyIter(bt2._UserMessageIterator): - def __next__(self): - raise bt2.Stop - - class MySource(bt2._UserFilterComponent, message_iterator_class=MyIter): - def __init__(comp_self, params, obj): + 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(user_datas, [None, 2]) + 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) - def test_filter_self_port_user_data(self): - class MyIter(bt2._UserMessageIterator): - def __next__(self): - raise bt2.Stop + # Verify that the user data gets freed. + self.assertEqual(objects_deleted, 0) + del user_datas + del comp + self.assertEqual(objects_deleted, 1) - class MyFilter(bt2._UserFilterComponent, message_iterator_class=MyIter): - def __init__(comp_self, params, obj): + 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('port3') + 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('port4', user_data={'user data': 'dict'}) + 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( - user_datas, [None, 'user data string', None, {'user data': 'dict'}] - ) + 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 MyIter(bt2._UserMessageIterator): - def __next__(self): - raise bt2.Stop + class MyUserData: + def __del__(self): + nonlocal objects_deleted + objects_deleted += 1 - class MySink(bt2._UserFilterComponent, message_iterator_class=MyIter): - def __init__(comp_self, params, obj): + 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', set()) + 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(user_datas, [None, set()]) + 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()