+# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2019 EfficiOS Inc.
#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; only version 2
-# of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
import unittest
import bt2
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
):
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)
+
+ # 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
):
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('port4', user_data={'user data': 'dict'})
+ 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
- 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 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', 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__':