package com.limegroup.gnutella.licenses;
import java.io.File;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import junit.framework.Test;
import org.limewire.util.NameValue;
import org.limewire.util.TestUtils;
import com.google.inject.Injector;
import com.limegroup.gnutella.LimeTestUtils;
import com.limegroup.gnutella.metadata.MetaDataFactory;
import com.limegroup.gnutella.metadata.audio.AudioMetaData;
import com.limegroup.gnutella.util.LimeTestCase;
import com.limegroup.gnutella.xml.LimeXMLDocument;
import com.limegroup.gnutella.xml.LimeXMLDocumentFactory;
public final class LicenseReadingTest extends LimeTestCase {
private LimeXMLDocumentFactory limeXMLDocumentFactory;
private MetaDataFactory metaDataFactory;
public LicenseReadingTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(LicenseReadingTest.class);
}
/**
* Runs this test individually.
*/
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
@Override
protected void setUp() throws Exception {
Injector injector = LimeTestUtils.createInjector();
limeXMLDocumentFactory = injector.getInstance(LimeXMLDocumentFactory.class);
metaDataFactory = injector.getInstance(MetaDataFactory.class);
}
public void testReadID3AndXML() throws Exception {
File f = TestUtils.getResourceFile("com/limegroup/gnutella/licenses/cc1.mp3");
assertTrue(f.exists());
AudioMetaData amd= (AudioMetaData) metaDataFactory.parse(f);
assertNotNull(amd);
boolean foundLicense = false;
List<NameValue<String>> nvList = amd.toNameValueList();
for(Iterator i = nvList.iterator(); i.hasNext(); ) {
NameValue nv = (NameValue)i.next();
assertFalse(AudioMetaData.isNonLimeAudioField(nv.getName()));
foundLicense |= nv.getName().equals("audios__audio__license__");
}
assertTrue(foundLicense);
assertEquals("2004 David Byrne Licensed to the " +
"public under http://creativecommons.org/licenses/sampling+/1.0/ " +
"verify at http://ccmixter.org/file/Wired/61",
amd.getLicense());
LimeXMLDocument doc = limeXMLDocumentFactory.createLimeXMLDocument(nvList, amd.getSchemaURI());
assertTrue(doc.isLicenseAvailable());
assertEquals(amd.getLicense(), doc.getLicenseString());
assertEquals("<?xml version=\"1.0\"?>" +
"<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">" +
"<audio title=\"My Fair Lady\" artist=\"David Byrne\" album=" +
"\"The Wired CD: Rip. Sample. Mash. Share.\" genre=\"Other\" licensetype=" +
"\"creativecommons.org/licenses/\" track=\"2\" year=\"2004\" seconds=\"208\"" +
" bitrate=\"138\" license=\"2004 David Byrne Licensed to the public under " +
"http://creativecommons.org/licenses/sampling+/1.0/ verify at " +
"http://ccmixter.org/file/Wired/61\"/></audios>", doc.getXMLString());
List<String> indivList = new LinkedList<String>();
indivList.add("creativecommons.org/licenses/");
assertEquals(indivList, doc.getKeyWordsIndivisible());
boolean licenseTypeFound = false;
for(Iterator i = doc.getNameValueSet().iterator(); i.hasNext(); ) {
Map.Entry next = (Map.Entry)i.next();
String name = (String)next.getKey();
if(name.equals("audios__audio__licensetype__")) {
licenseTypeFound = true;
assertEquals("creativecommons.org/licenses/", next.getValue());
}
}
assertTrue(licenseTypeFound);
License l = doc.getLicense();
assertNotNull(l);
assertEquals(CCLicense.class, l.getClass());
assertFalse(l.isVerified());
// don't validate -- don't wanna hit the web.
assertEquals("http://creativecommons.org/licenses/sampling+/1.0/",
l.getLicenseDeed(null).toString());
assertEquals("http://ccmixter.org/file/wired/61", l.getLicenseURI().toString());
}
public void testReadOGG() throws Exception {
File f = TestUtils.getResourceFile("com/limegroup/gnutella/licenses/ccverifytest0.ogg");
assertTrue(f.exists());
AudioMetaData amd= (AudioMetaData) metaDataFactory.parse(f);
assertNotNull(amd);
boolean foundLicense = false;
List nvList = amd.toNameValueList();
for(Iterator i = nvList.iterator(); i.hasNext(); ) {
NameValue nv = (NameValue)i.next();
assertFalse(AudioMetaData.isNonLimeAudioField(nv.getName()));
foundLicense |= nv.getName().equals("audios__audio__license__");
}
assertTrue(foundLicense);
assertEquals("2002 BM Relocation Program. Licensed to the public under " +
"http://creativecommons.org/licenses/by-sa/1.0/ verify at " +
"http://creativecommons.org/technology/verifytest/",
amd.getLicense());
f = TestUtils.getResourceFile("com/limegroup/gnutella/licenses/ccverifytest1.ogg");
assertTrue(f.exists());
amd = (AudioMetaData) metaDataFactory.parse(f);
assertNotNull(amd);
foundLicense = false;
nvList = amd.toNameValueList();
for(Iterator i = nvList.iterator(); i.hasNext(); ) {
NameValue nv = (NameValue)i.next();
assertFalse(AudioMetaData.isNonLimeAudioField(nv.getName()));
foundLicense |= nv.getName().equals("audios__audio__license__");
}
assertTrue(foundLicense);
assertEquals("2003 Okapi Guitars. Licensed to the public under " +
"http://creativecommons.org/licenses/by-nc-sa/1.0/ verify at " +
"http://creativecommons.org/technology/verifytest/",
amd.getLicense());
}
public void testReadWeed() throws Exception {
File f = TestUtils.getResourceFile("com/limegroup/gnutella/licenses/weed-PUSA-LoveEverybody.wma");
assertTrue(f.exists());
AudioMetaData amd= (AudioMetaData) metaDataFactory.parse(f);
assertNotNull(amd);
LimeXMLDocument doc = limeXMLDocumentFactory.createLimeXMLDocument(amd.toNameValueList(), amd.getSchemaURI());
assertTrue(doc.isLicenseAvailable());
assertEquals(amd.getLicenseType(), doc.getLicenseString());
assertEquals("<?xml version=\"1.0\"?>" +
"<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">" +
"<audio title=\"Love Everybody\" artist=\"The Presidents of the United States of America\" album=" +
"\"Love Everybody\" genre=\"Rock\" licensetype=" +
"\"http://www.shmedlic.com/license/3play.aspx cid: 214324 vid: 0000000000001370651\" " +
"track=\"1\" year=\"2004\" seconds=\"158\" bitrate=\"192\" license=\"2004 PUSA Inc.\"/></audios>",
doc.getXMLString());
List<String> indivList = new LinkedList<String>();
indivList.add("http://www.shmedlic.com/license/3play.aspx");
assertEquals(indivList, doc.getKeyWordsIndivisible());
boolean licenseTypeFound = false;
for(Iterator i = doc.getNameValueSet().iterator(); i.hasNext(); ) {
Map.Entry next = (Map.Entry)i.next();
String name = (String)next.getKey();
if(name.equals("audios__audio__licensetype__")) {
licenseTypeFound = true;
assertEquals("http://www.shmedlic.com/license/3play.aspx cid: 214324 vid: 0000000000001370651", next.getValue());
}
}
assertTrue(licenseTypeFound);
License l = doc.getLicense();
assertNotNull(l);
assertEquals(WeedLicense.class, l.getClass());
assertFalse(l.isVerified());
// don't validate -- don't wanna hit the web.
assertEquals("http://weedshare.com/company/policies/summary_usage_rights.aspx",
l.getLicenseDeed(null).toString());
assertEquals("http://www.weedshare.com/license/verify_usage_rights.aspx?" +
"versionid=0000000000001370651&contentid=214324", l.getLicenseURI().toString());
}
}