package com.limegroup.gnutella.library;
import static com.limegroup.gnutella.library.FileManagerTestUtils.assertAdds;
import static com.limegroup.gnutella.library.FileManagerTestUtils.createNewTestFile;
import java.io.File;
import junit.framework.Test;
import org.limewire.gnutella.tests.LimeTestCase;
import org.limewire.gnutella.tests.LimeTestUtils;
import org.limewire.lifecycle.ServiceRegistry;
import com.google.inject.Injector;
/**
* FriendFileList tests
*/
//TODO: cleanup and remove sleeps
public class SharedFileCollectionImplTest extends LimeTestCase {
private LibraryImpl managedList;
private SharedFileCollectionImpl friendList;
private Injector injector;
private File f1;
public SharedFileCollectionImplTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(SharedFileCollectionImplTest.class);
}
@Override
protected void setUp() throws Exception {
injector = LimeTestUtils.createInjectorNonEagerly();
friendList = (SharedFileCollectionImpl)injector.getInstance(FileCollectionManager.class).createNewCollection("test");
managedList = (LibraryImpl)injector.getInstance(Library.class);
injector.getInstance(ServiceRegistry.class).initialize();
}
public void testNoFiles() {
assertEquals(0, friendList.size());
assertFalse(friendList.iterator().hasNext());
assertFalse(friendList.pausableIterable().iterator().hasNext());
}
/**
* Tests adding a single file to a friendList
*/
public void testAddFile() throws Exception {
assertEquals(friendList.size(), 0);
f1 = createNewTestFile(1, _scratchDir);
assertAdds(friendList, f1);
assertTrue(friendList.contains(f1));
assertEquals(f1, friendList.getFileDescForIndex(0).getFile());
assertEquals(friendList.size(), 1);
assertTrue(friendList.iterator().hasNext());
assertTrue(friendList.pausableIterable().iterator().hasNext());
}
/**
* Tests adding a FileDesc to friend list that is already managed
*/
public void testAddFileDesc() throws Exception {
assertEquals(friendList.size(), 0);
f1 = createNewTestFile(1, _scratchDir);
assertAdds(managedList, f1);
FileDesc fd = managedList.getFileDesc(f1);
assertTrue(friendList.add(fd));
assertTrue(friendList.contains(fd));
assertEquals(fd, friendList.getFileDesc(f1));
assertEquals(friendList.size(), 1);
assertTrue(friendList.iterator().hasNext());
assertTrue(friendList.pausableIterable().iterator().hasNext());
}
/**
* Tests that an IncompleteFileDesc cannot be added to this FriendList
*/
public void testAddIncompleteFileDesc() throws Exception {
assertEquals(friendList.size(), 0);
IncompleteFileDesc ifd = new IncompleteFileDescStub();
assertFalse(friendList.add(ifd));
assertFalse(friendList.contains(ifd));
assertEquals(friendList.size(), 0);
assertFalse(friendList.iterator().hasNext());
assertFalse(friendList.pausableIterable().iterator().hasNext());
}
/**
* Test removing a single file from friendList.
*/
public void testRemoveFile() throws Exception {
f1 = createNewTestFile(1, _scratchDir);
assertFalse(friendList.remove(f1));
assertAdds(friendList, f1);
assertEquals(f1, friendList.getFileDescForIndex(0).getFile());
assertEquals(1, friendList.size());
assertTrue(friendList.contains(f1));
assertTrue(friendList.remove(f1));
assertNull(friendList.getFileDescForIndex(0));
assertEquals(0, friendList.size());
assertFalse(friendList.contains(f1));
assertFalse(friendList.iterator().hasNext());
assertFalse(friendList.pausableIterable().iterator().hasNext());
}
/**
* Test removing a FileDesc from a friendList.
*/
public void testRemoveFileDesc() throws Exception {
f1 = createNewTestFile(1, _scratchDir);
assertFalse(friendList.remove(f1));
assertAdds(friendList, f1);
assertEquals(f1, friendList.getFileDescForIndex(0).getFile());
assertEquals(1, friendList.size());
FileDesc fd = friendList.getFileDesc(f1);
assertTrue(friendList.contains(fd));
assertTrue(friendList.remove(fd));
assertNull(friendList.getFileDescForIndex(0));
assertEquals(0, friendList.size());
assertFalse(friendList.contains(fd));
}
// public void testAddFolder() throws Exception {
// assertEquals(friendList.size(), 0);
//
// f1 = createNewExtensionTestFile(1, "wav", _scratchDir);
// f2 = createNewExtensionTestFile(3, "wav", _scratchDir);
//
// friendList.addFolder(_scratchDir);
// List<FileDesc> fdList;
//
// fdList = assertAddsFolder(managedList, _scratchDir);
// Thread.sleep(4000);
// assertContainsFiles(fdList, f1, f2);
// assertContainsFiles(managedList, f1, f2);
// assertAddsFolder(friendList, _scratchDir);
//
// assertEquals(2, friendList.size());
// assertEquals(f1, friendList.getFileDescForIndex(0).getFile());
// assertEquals(f2, friendList.getFileDescForIndex(1).getFile());
// assertTrue(friendList.iterator().hasNext());
// assertTrue(friendList.pausableIterable().iterator().hasNext());
// }
// /**
// * Tests that smart share categories are mutually
// * exclusive
// */
// public void testSmartSharingCategories() {
//
// assertFalse(friendList.isAddNewAudioAlways());
// assertFalse(friendList.isAddNewImageAlways());
// assertFalse(friendList.isAddNewVideoAlways());
//
// friendList.setAddNewAudioAlways(true);
//
// assertTrue(friendList.isAddNewAudioAlways());
// assertFalse(friendList.isAddNewImageAlways());
// assertFalse(friendList.isAddNewVideoAlways());
//
// friendList.setAddNewImageAlways(true);
//
// assertTrue(friendList.isAddNewAudioAlways());
// assertTrue(friendList.isAddNewImageAlways());
// assertFalse(friendList.isAddNewVideoAlways());
//
// friendList.setAddNewVideoAlways(true);
//
// assertTrue(friendList.isAddNewAudioAlways());
// assertTrue(friendList.isAddNewImageAlways());
// assertTrue(friendList.isAddNewVideoAlways());
// }
//
// /**
// * Tests smart sharing a category
// */
// public void testSmartSharing() throws Exception {
// assertEquals(friendList.size(), 0);
// assertFalse(friendList.isAddNewAudioAlways());
//
// f1 = createNewExtensionTestFile(1, "wav", _scratchDir);
// f2 = createNewExtensionTestFile(3, "txt", _scratchDir);
//
// assertAdds(managedList, f1);
//
// assertFalse(friendList.contains(f1));
// assertEquals(0, friendList.size());
//
// friendList.setAddNewAudioAlways(true);
// assertTrue(friendList.isAddNewAudioAlways());
//
// Thread.sleep(500);
//
// assertEquals(1, friendList.size());
// assertTrue(friendList.contains(f1));
// assertFalse(friendList.contains(f2));
//
// f3 = createNewExtensionTestFile(5, "wav", _scratchDir);
// assertAdds(managedList, f3);
//
// Thread.sleep(500);
//
// assertEquals(2, friendList.size());
// assertTrue(friendList.contains(f3));
// }
//
// /**
// * Tests stopping smart sharing a category
// */
// public void testStopSmartSharing() throws Exception {
// friendList.setAddNewAudioAlways(true);
// assertTrue(friendList.isAddNewAudioAlways());
//
//
// f1 = createNewExtensionTestFile(1, "wav", _scratchDir);
// f2 = createNewExtensionTestFile(3, "txt", _scratchDir);
//
// assertAdds(friendList, f1);
// assertAdds(friendList, f2);
//
// assertEquals(2, friendList.size());
//
// friendList.setAddNewAudioAlways(false);
// assertFalse(friendList.isAddNewAudioAlways());
//
// Thread.sleep(500);
//
// assertEquals(2, friendList.size());
//
// f3 = createNewExtensionTestFile(5, "wav", _scratchDir);
// assertAdds(managedList, f3);
//
// Thread.sleep(500);
//
// assertEquals(2, friendList.size());
// assertFalse(friendList.contains(f3));
// }
}