package org.limewire.core.impl.friend; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.lib.legacy.ClassImposteriser; import org.limewire.core.api.library.RemoteLibraryManager; import org.limewire.core.impl.friend.FriendPresenceLibraryAdder; import org.limewire.core.impl.friend.FriendPresenceLibraryAdder.FeatureListener; import org.limewire.friend.api.FriendPresence; import org.limewire.friend.api.feature.AddressFeature; import org.limewire.friend.api.feature.AuthTokenFeature; import org.limewire.friend.api.feature.Feature; import org.limewire.friend.api.feature.FeatureEvent; import org.limewire.friend.api.feature.FeatureEvent.Type; import org.limewire.listener.ListenerSupport; import org.limewire.util.BaseTestCase; public class FriendPresenceLibraryAdderTest extends BaseTestCase { public FriendPresenceLibraryAdderTest(String name) { super(name); } /** * Ensure that register adds a valid listener once. */ @SuppressWarnings("unchecked") public void testRegister() { Mockery context = new Mockery(); final ListenerSupport<FeatureEvent> featureSupport = context.mock(ListenerSupport.class); final FriendPresenceLibraryAdder adder = new FriendPresenceLibraryAdder(null); context.checking(new Expectations() { { exactly(1).of(featureSupport).addListener(with(any(FeatureListener.class))); }}); adder.register(featureSupport); } /** * Test the added event and make sure the presence is added when it has features. */ public void testHandleEventWithAdded() { Mockery context = new Mockery(); final FriendPresence presence1 = context.mock(FriendPresence.class); final FriendPresence presence2 = context.mock(FriendPresence.class); final RemoteLibraryManager manager = context.mock(RemoteLibraryManager.class); final FriendPresenceLibraryAdder adder = new FriendPresenceLibraryAdder(manager); final FeatureListener listener = adder.new FeatureListener(); final FeatureEvent e1 = new FeatureEvent(presence1, Type.ADDED, new Feature<Object>(new Object(), null)); final FeatureEvent e2 = new FeatureEvent(presence2, Type.ADDED, new Feature<Object>(new Object(), null)); context.checking(new Expectations() { { allowing(presence1).hasFeatures(AddressFeature.ID, AuthTokenFeature.ID); will(returnValue(true)); allowing(presence2).hasFeatures(AddressFeature.ID, AuthTokenFeature.ID); will(returnValue(false)); exactly(1).of(manager).addPresenceLibrary(presence1); } }); listener.handleEvent(e1); listener.handleEvent(e2); } /** * Test the removed event and make sure the presence is removed when it has not features. */ public void testHandleEventWithRemoved() { Mockery context = new Mockery(); final FriendPresence presence1 = context.mock(FriendPresence.class); final FriendPresence presence2 = context.mock(FriendPresence.class); final RemoteLibraryManager manager = context.mock(RemoteLibraryManager.class); final FriendPresenceLibraryAdder adder = new FriendPresenceLibraryAdder(manager); final FeatureListener listener = adder.new FeatureListener(); final FeatureEvent e1 = new FeatureEvent(presence1, Type.REMOVED, new Feature<Object>(new Object(), null)); final FeatureEvent e2 = new FeatureEvent(presence2, Type.REMOVED, new Feature<Object>(new Object(), null)); context.checking(new Expectations() { { allowing(presence1).hasFeatures(AddressFeature.ID, AuthTokenFeature.ID); will(returnValue(true)); allowing(presence2).hasFeatures(AddressFeature.ID, AuthTokenFeature.ID); will(returnValue(false)); exactly(1).of(manager).removePresenceLibrary(presence2); } }); listener.handleEvent(e1); listener.handleEvent(e2); } /** * Fire the event handler with a forced null event and ensure no actions * are made on presences. */ public void testHandleEventWithOther() { Mockery context = new Mockery() { { setImposteriser(ClassImposteriser.INSTANCE); } }; final FeatureEvent event = context.mock(FeatureEvent.class); final RemoteLibraryManager manager = context.mock(RemoteLibraryManager.class); final FriendPresenceLibraryAdder adder = new FriendPresenceLibraryAdder(manager); final FeatureListener listener = adder.new FeatureListener(); context.checking(new Expectations() { { allowing(event).getType(); will(returnValue(null)); allowing(event).getSource(); will(returnValue(null)); // Nothing else should happen } }); listener.handleEvent(event); } }