import unittest
import bt2
+from bt2 import port as bt2_port
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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):
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):
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):
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')
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)
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)
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
- self._create_comp(MySource)
- self.assertEqual(user_datas, [None, 2])
+ 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)
- 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
- self._create_comp(MyFilter)
- self.assertEqual(
- user_datas, [None, 'user data string', None, {'user data': 'dict'}]
- )
+ 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 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
- self._create_comp(MySink)
- self.assertEqual(user_datas, [None, set()])
+ 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()