def test_removing_a_callback_multiple_times(self): """Guard against incorrect implementations which store their callbacks in an array.""" input_ = InputCell(1) output = ComputeCell([input_], lambda inputs: inputs[0] + 1) cb1_observer, cb2_observer = [], [] callback1 = self.callback_factory(cb1_observer) callback2 = self.callback_factory(cb2_observer) output.add_callback(callback1) output.add_callback(callback2) output.remove_callback(callback1) output.remove_callback(callback1) output.remove_callback(callback1) input_.value = 2 self.assertEqual(cb1_observer, []) self.assertEqual(cb2_observer[-1], 3)
def test_callbacks_can_be_added_and_removed(self): input_ = InputCell(11) output = ComputeCell([input_], lambda inputs: inputs[0] + 1) cb1_observer, cb2_observer, cb3_observer = [], [], [] callback1 = self.callback_factory(cb1_observer) callback2 = self.callback_factory(cb2_observer) callback3 = self.callback_factory(cb3_observer) output.add_callback(callback1) output.add_callback(callback2) input_.value = 31 self.assertEqual(cb1_observer[-1], 32) self.assertEqual(cb2_observer[-1], 32) output.remove_callback(callback1) output.add_callback(callback3) input_.value = 41 self.assertEqual(cb2_observer[-1], 42) self.assertEqual(cb3_observer[-1], 42) # Expect callback1 not to be called. self.assertEqual(len(cb1_observer), 1)