def test_disconnect_listener(self): service = SelectionService() provider_id = 'Bogus' provider = BogusSelectionProvider(provider_id=provider_id) service.add_selection_provider(provider) listener = BogusListener() service.connect_selection_listener(provider_id, listener.on_selection_changed) service.disconnect_selection_listener(provider_id, listener.on_selection_changed) provider.trigger_selection([1, 2, 3]) self.assertEqual(len(listener.selections), 0)
def test_connect_listener(self): service = SelectionService() provider_id = 'Bogus' provider = BogusSelectionProvider(provider_id=provider_id) service.add_selection_provider(provider) listener = BogusListener() service.connect_selection_listener(provider_id, listener.on_selection_changed) content = [1, 2, 3] provider.trigger_selection(content) selections = listener.selections self.assertEqual(len(selections), 1) self.assertEqual(selections[0].provider_id, provider.provider_id) self.assertEqual(selections[0].content, content)
def test_disconnect_unknown_listener(self): service = SelectionService() provider_id = 'Bogus' provider = BogusSelectionProvider(provider_id=provider_id) service.add_selection_provider(provider) # First case: there are listeners to a provider, but not the one we # pass to the disconnect method listener_1 = BogusListener() service.connect_selection_listener(provider_id, listener_1.on_selection_changed) listener_2 = BogusListener() with self.assertRaises(ListenerNotConnectedError): service.disconnect_selection_listener( provider_id, listener_2.on_selection_changed) # Second case: there is no listener connected to the ID with self.assertRaises(ListenerNotConnectedError): service.disconnect_selection_listener( 'does-not-exists', listener_2.on_selection_changed)
def test_connect_listener_then_add_remove_provider(self): service = SelectionService() provider_id = 'Bogus' # Connect listener before provider is registered. listener = BogusListener() service.connect_selection_listener(provider_id, listener.on_selection_changed) # When the provider is first added, the listener should receive the # initial selection (as returned by provider.get_selection) provider = BogusSelectionProvider(provider_id=provider_id) expected = provider.get_selection() service.add_selection_provider(provider) selections = listener.selections self.assertEqual(len(selections), 1) self.assertEqual(selections[-1].content, expected.content) # When the provider changes the selection, the event arrive as usual. content = [1, 2, 3] provider.trigger_selection(content) self.assertEqual(len(selections), 2) self.assertEqual(selections[-1].content, content) # When we un-register the provider, a change in selection does not # generate a callback. service.remove_selection_provider(provider) provider.trigger_selection(content) self.assertEqual(len(selections), 2) # Finally, we register again and get the current selection. service.add_selection_provider(provider) self.assertEqual(len(selections), 3) self.assertEqual(selections[-1].content, expected.content)