package org.limewire.core.impl.library;
import java.util.concurrent.atomic.AtomicBoolean;
import junit.framework.Test;
import org.limewire.core.api.library.SharedFileList;
import org.limewire.core.impl.tests.CoreGlueTestUtils;
import org.limewire.friend.api.Friend;
import org.limewire.gnutella.tests.LimeTestCase;
import org.limewire.gnutella.tests.LimeTestUtils;
import ca.odell.glazedlists.EventList;
import ca.odell.glazedlists.event.ListEvent;
import ca.odell.glazedlists.event.ListEventListener;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.limegroup.gnutella.LifecycleManager;
import com.limegroup.gnutella.library.FileCollectionManager;
import com.limegroup.gnutella.library.SharedFileCollection;
public class SharedFileListManagerImplTest extends LimeTestCase {
@Inject private Injector injector;
@Inject private SharedFileListManagerImpl listManager;
@Inject private FileCollectionManager collectionManager;
public SharedFileListManagerImplTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(SharedFileListManagerImplTest.class);
}
@Override
protected void setUp() throws Exception {
CoreGlueTestUtils.createInjectorAndStart(LimeTestUtils.createModule(this));
}
@Override
protected void tearDown() throws Exception {
injector.getInstance(LifecycleManager.class).shutdown();
}
public void testContainsDefaultCollection() throws Exception {
assertEquals(listManager.getModel().toString(), 1, listManager.getModel().size());
SharedFileList list = listManager.getModel().get(0);
assertEquals(1, list.getFriendIds().size());
assertEquals(Friend.P2P_FRIEND_ID, list.getFriendIds().get(0));
assertEquals(0, list.size());
assertEquals("Public Shared", list.getCollectionName());
assertFalse(list.isNameChangeAllowed());
}
public void testCreatingAndModifyingList() {
assertEquals(1, collectionManager.getSharedFileCollections().size());
listManager.createNewSharedFileList("Test List");
assertEquals(2, collectionManager.getSharedFileCollections().size());
assertEquals(2, listManager.getModel().size());
SharedFileList list = listManager.getModel().get(1);
assertEquals("Test List", list.getCollectionName());
assertEquals(0, list.getFriendIds().size());
SharedFileCollection collection = collectionManager.getSharedFileCollections().get(1);
assertEquals("Test List", collection.getName());
assertEquals(0, collection.getFriendList().size());
list.setCollectionName("List");
assertEquals("List", list.getCollectionName());
assertEquals("List", collection.getName());
assertTrue(list.isNameChangeAllowed());
list.addFriend("friend1");
assertEquals(1, list.getFriendIds().size());
assertEquals("friend1", list.getFriendIds().get(0));
assertEquals(1, collection.getFriendList().size());
assertEquals("friend1", collection.getFriendList().get(0));
list.removeFriend("not a friend");
assertEquals(1, list.getFriendIds().size());
assertEquals(1, collection.getFriendList().size());
list.removeFriend("friend1");
assertEquals(0, list.getFriendIds().size());
assertEquals(0, collection.getFriendList().size());
}
public void testNameChangeTriggersEvent() {
EventList<SharedFileList> model = listManager.getModel();
listManager.createNewSharedFileList("Test List");
assertEquals(2, model.size());
final SharedFileList list = model.get(1);
final AtomicBoolean triggered = new AtomicBoolean(false);
ListEventListener<SharedFileList> listener = new ListEventListener<SharedFileList>() {
@Override
public void listChanged(ListEvent<SharedFileList> listChanges) {
triggered.set(true);
assertTrue(listChanges.next());
assertEquals(ListEvent.UPDATE, listChanges.getType());
assertEquals(1, listChanges.getIndex());
assertSame(list, listChanges.getSourceList().get(1));
assertFalse(listChanges.next());
}
};
model.addListEventListener(listener);
assertEquals("Test List", list.getCollectionName());
list.setCollectionName("Another Name");
assertTrue(triggered.get());
assertEquals("Another Name", list.getCollectionName());
}
}