def test_remove_destruction_listener_wrong_object(self): def on_trace_class_destruction(trace_class): pass trace_class_1 = get_default_trace_class() trace_class_2 = get_default_trace_class() handle1 = trace_class_1.add_destruction_listener( on_trace_class_destruction) with self.assertRaisesRegex( ValueError, r'This trace class destruction listener does not match the trace class object\.', ): trace_class_2.remove_destruction_listener(handle1)
def test_raise_in_destruction_listener(self): def on_trace_class_destruction(trace_class): raise ValueError('it hurts') trace_class = get_default_trace_class() trace_class.add_destruction_listener(on_trace_class_destruction) del trace_class
def test_remove_destruction_listener_wrong_type(self): trace_class = get_default_trace_class() with self.assertRaisesRegex( TypeError, r"'int' is not a '<class 'bt2.utils._ListenerHandle'>' object" ): trace_class.remove_destruction_listener(123)
def get_const_unsigned_integer_range(int_ranges): def range_setter(field): field.value = 12 tc = get_default_trace_class() fc = tc.create_unsigned_enumeration_field_class(32) fc.add_mapping('something', bt2.UnsignedIntegerRangeSet(int_ranges)) return create_const_field(tc, fc, range_setter).cls['something'].ranges
def test_remove_destruction_listener_twice(self): def on_trace_destruction(trace_class): pass trace_class = get_default_trace_class() trace = trace_class() handle = trace.add_destruction_listener(on_trace_destruction) trace.remove_destruction_listener(handle) with self.assertRaisesRegex( ValueError, r'This trace destruction listener was already removed\.'): trace.remove_destruction_listener(handle)
def setUp(self): self._tc = get_default_trace_class() self._context_fc = self._tc.create_structure_field_class() self._context_fc.append_member('allo', self._tc.create_string_field_class()) self._context_fc.append_member( 'zola', self._tc.create_signed_integer_field_class(18)) self._payload_fc = self._tc.create_structure_field_class() self._payload_fc.append_member('zoom', self._tc.create_string_field_class()) self._stream_class = self._tc.create_stream_class( assigns_automatic_event_class_id=True)
def test_destruction_listener(self): def on_trace_class_destruction(trace_class): nonlocal num_trace_class_destroyed_calls num_trace_class_destroyed_calls += 1 def on_trace_destruction(trace): nonlocal num_trace_destroyed_calls num_trace_destroyed_calls += 1 num_trace_class_destroyed_calls = 0 num_trace_destroyed_calls = 0 trace_class = get_default_trace_class() stream_class = trace_class.create_stream_class() trace = trace_class() stream = trace.create_stream(stream_class) trace_class.add_destruction_listener(on_trace_class_destruction) td_handle1 = trace.add_destruction_listener(on_trace_destruction) td_handle2 = trace.add_destruction_listener(on_trace_destruction) self.assertIs(type(td_handle1), bt2_utils._ListenerHandle) trace.remove_destruction_listener(td_handle2) self.assertEqual(num_trace_class_destroyed_calls, 0) self.assertEqual(num_trace_destroyed_calls, 0) del trace self.assertEqual(num_trace_class_destroyed_calls, 0) self.assertEqual(num_trace_destroyed_calls, 0) del stream self.assertEqual(num_trace_class_destroyed_calls, 0) self.assertEqual(num_trace_destroyed_calls, 1) del trace_class self.assertEqual(num_trace_class_destroyed_calls, 0) self.assertEqual(num_trace_destroyed_calls, 1) del stream_class self.assertEqual(num_trace_class_destroyed_calls, 1) self.assertEqual(num_trace_destroyed_calls, 1)
def test_destruction_listener(self): def on_trace_class_destruction(trace_class): nonlocal num_destruct_calls num_destruct_calls += 1 num_destruct_calls = 0 trace_class = get_default_trace_class() handle1 = trace_class.add_destruction_listener( on_trace_class_destruction) self.assertIs(type(handle1), bt2_utils._ListenerHandle) handle2 = trace_class.add_destruction_listener( on_trace_class_destruction) trace_class.remove_destruction_listener(handle2) self.assertEqual(num_destruct_calls, 0) del trace_class self.assertEqual(num_destruct_calls, 1)
def test_len(self): tc = get_default_trace_class() self.assertEqual(len(tc), 0) tc.create_stream_class() self.assertEqual(len(tc), 1)
def setUp(self): self._tc = get_default_trace_class()