package com.limegroup.gnutella.metadata;
import java.io.File;
import java.util.List;
import junit.framework.Test;
import org.limewire.gnutella.tests.LimeTestCase;
import org.limewire.gnutella.tests.LimeTestUtils;
import org.limewire.util.NameValue;
import org.limewire.util.TestUtils;
import com.google.inject.Injector;
import com.limegroup.bittorrent.metadata.TorrentMetaData;
public class MetaDataFactoryImplTest extends LimeTestCase {
private MetaDataFactoryImpl metaDataFactory;
public MetaDataFactoryImplTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(MetaDataFactoryImplTest.class);
}
@Override
protected void setUp() throws Exception {
Injector injector = LimeTestUtils.createInjectorNonEagerly();
metaDataFactory = (MetaDataFactoryImpl) injector.getInstance(MetaDataFactory.class);
}
/**
* Integration test to ensure {@link TorrentMetaReaderFactory} is registered
* with {@link MetaDataFactoryImpl} and multi file torrents are parsed correctly.
*/
@SuppressWarnings("null")
public void testReadsMultiFileTorrentMetaData() throws Exception {
File torrentFile = TestUtils.getResourceInPackage("messages.torrent", getClass());
assertTrue(torrentFile.exists());
MetaData metaData = metaDataFactory.parse(torrentFile);
assertTrue(metaData instanceof TorrentMetaData);
List<NameValue<String>> values = metaData.toNameValueList();
String filepaths = null;
for (NameValue<String> value : values) {
if (value.getName().equals(TorrentMetaData.FILE_PATHS)) {
filepaths = value.getValue();
break;
}
}
assertNotNull(filepaths);
String[] fileUris = filepaths.split("\t");
assertEquals(9, fileUris.length);
}
/**
* Integration test to ensure {@link TorrentMetaReaderFactory} is registered
* with {@link MetaDataFactoryImpl} and single file torrents are parsed correctly.
*/
public void testReadsSingleFileTorrentMetaData() throws Exception {
File torrentFile = TestUtils.getResourceInPackage("bthavetest.torrent", getClass());
assertTrue(torrentFile.exists());
MetaData metaData = metaDataFactory.parse(torrentFile);
assertTrue(metaData instanceof TorrentMetaData);
List<NameValue<String>> values = metaData.toNameValueList();
String name = null;
for (NameValue<String> value : values) {
if (value.getName().equals(TorrentMetaData.NAME)) {
name = value.getValue();
break;
}
}
assertEquals("BTHaveTest.class", name);
}
}