package org.limewire.ui.swing.filter;
import java.util.Collections;
import java.util.Map;
import org.limewire.friend.api.Friend;
import org.limewire.friend.api.FriendPresence;
import org.limewire.friend.api.IncomingChatListener;
import org.limewire.friend.api.MessageReader;
import org.limewire.friend.api.MessageWriter;
import org.limewire.friend.api.Network;
import org.limewire.friend.api.PresenceEvent;
import org.limewire.listener.EventListener;
import org.limewire.util.BaseTestCase;
/**
* JUnit test case for SourceMatcher.
*/
public class SourceMatcherTest extends BaseTestCase {
/** Instance of class to be tested. */
private SourceMatcher<MockFilterableItem> sourceMatcher;
/**
* Constructs a test case for the specified method name.
*/
public SourceMatcherTest(String name) {
super(name);
}
@Override
protected void setUp() throws Exception {
super.setUp();
sourceMatcher = new SourceMatcher<MockFilterableItem>(SourceItem.ANONYMOUS_SOURCE);
}
@Override
protected void tearDown() throws Exception {
sourceMatcher = null;
super.tearDown();
}
/** Tests method to match item with anonymous source. */
public void testMatchesAnonymous() {
// Create test item.
MockFilterableItem item = new MockFilterableItem("Test Item");
// Verify anonymous item matches.
boolean actualReturn = sourceMatcher.matches(item);
assertTrue("matches anonymous", actualReturn);
}
/** Tests method to match item with any friend. */
public void testMatchesAnyFriend() {
// Create matcher for any friend.
sourceMatcher = new SourceMatcher<MockFilterableItem>(SourceItem.ANY_FRIEND_SOURCE);
// Create test item.
MockFilterableItem item = new MockFilterableItem("Test Item");
item.addFriend(new TestFriend("Vulcan", false));
// Verify any friend matches.
boolean actualReturn = sourceMatcher.matches(item);
assertTrue("matches any friend", actualReturn);
}
/** Tests method to match item with specific friend. */
public void testMatchesFriend() {
// Create matcher for specific friend.
SourceItem friendSource = new SourceItem(SourceItem.Type.FRIEND, "Vulcan");
sourceMatcher = new SourceMatcher<MockFilterableItem>(friendSource);
// Create test item.
MockFilterableItem item = new MockFilterableItem("Test Item");
item.addFriend(new TestFriend("Vulcan", false));
// Verify same friend matches.
boolean actualReturn = sourceMatcher.matches(item);
assertTrue("matches same friend", actualReturn);
// Create 2nd test item.
MockFilterableItem item2 = new MockFilterableItem("Test Item");
item2.addFriend(new TestFriend("Klingon", false));
// Verify different friend does not match.
actualReturn = sourceMatcher.matches(item2);
assertFalse("matches different friend", actualReturn);
}
/**
* Test friend.
*/
private static class TestFriend implements Friend {
private boolean anonymous;
private String name;
public TestFriend(String name, boolean anonymous) {
this.name = name;
this.anonymous = anonymous;
}
@Override
public String getFirstName() {
return name;
}
@Override
public String getId() {
return name;
}
@Override
public String getName() {
return name;
}
@Override
public Network getNetwork() {
return new Network() {
@Override
public String getCanonicalizedLocalID() {
return name;
}
@Override
public String getNetworkName() {
return "";
}
@Override
public Type getType() {
return null;
}
};
}
@Override
public String getRenderName() {
return name;
}
@Override
public boolean isAnonymous() {
return anonymous;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void addPresenceListener(EventListener<PresenceEvent> presenceListener) {
}
@Override
public MessageWriter createChat(MessageReader reader) {
return null;
}
@Override
public FriendPresence getActivePresence() {
return null;
}
@Override
public Map<String, FriendPresence> getPresences() {
return Collections.emptyMap();
}
@Override
public boolean hasActivePresence() {
return false;
}
@Override
public boolean isSignedIn() {
return false;
}
@Override
public boolean isSubscribed() {
return false;
}
@Override
public void removeChatListener() {
}
@Override
public void setChatListenerIfNecessary(IncomingChatListener listener) {
}
}
}