package com.limegroup.gnutella.xml;
import java.util.List;
import junit.framework.Test;
import com.limegroup.gnutella.util.BaseTestCase;
/**
* Tests the LimeXMLDocumentHelper logic.
*/
public class DocumentHelperTest extends BaseTestCase {
public DocumentHelperTest(String name){
super(name);
}
public static Test suite() {
return buildTestSuite(DocumentHelperTest.class);
}
/**
* tests getting a list of documents from catenated xml
*/
public void testGetDocuments() throws Exception {
// test short-circuiting
assertEquals(0,LimeXMLDocumentHelper.getDocuments(null,1).size());
assertEquals(0,LimeXMLDocumentHelper.getDocuments("",1).size());
assertEquals(0,LimeXMLDocumentHelper.getDocuments("asfd",0).size());
// test a valid document
String threeResp = "<?xml version=\"1.0\"?>"+
"<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+
"<audio genre=\"Rock\" identifier=\"def1.txt\" bitrate=\"190\" index=\"0\"/>"+
"<audio genre=\"Classical\" identifier=\"def2.txt\" bitrate=\"2192\" index=\"1\"/>"+
"<audio genre=\"Blues\" identifier=\"def.txt\" bitrate=\"192\" index=\"2\"/></audios>";
List l = LimeXMLDocumentHelper.getDocuments(threeResp,3);
assertEquals(1,l.size());
LimeXMLDocument []docs = (LimeXMLDocument [])l.get(0);
assertEquals(3,docs.length);
for (int i = 0;i<docs.length;i++)
assertNotNull(docs[i]);
// test not enough xml
l = LimeXMLDocumentHelper.getDocuments(threeResp,4);
assertEquals(1,l.size());
docs = (LimeXMLDocument [])l.get(0);
assertEquals(4,docs.length);
assertNull(docs[3]);
// test too much xml
l = LimeXMLDocumentHelper.getDocuments(threeResp,2);
assertEquals(0,l.size());
//test identical indices
String identical = "<?xml version=\"1.0\"?>"+
"<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+
"<audio genre=\"Rock\" identifier=\"def1.txt\" bitrate=\"190\" index=\"1\"/>"+
"<audio genre=\"Classical\" identifier=\"def2.txt\" bitrate=\"2192\" index=\"1\"/>"+
"<audio genre=\"Blues\" identifier=\"def.txt\" bitrate=\"192\" index=\"0\"/></audios>";
l = LimeXMLDocumentHelper.getDocuments(identical,3);
assertEquals(1,l.size());
docs = (LimeXMLDocument [])l.get(0);
assertEquals(3,docs.length);
assertNotNull(docs[0]);
assertNotNull(docs[1]);
assertNull(docs[2]);
// test invalid indices
String invalidIndex =
"<?xml version=\"1.0\"?>"+
"<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+
"<audio genre=\"Blues\" identifier=\"def.txt\" bitrate=\"192\" index=\"asdf\"/></audios>";
l = LimeXMLDocumentHelper.getDocuments(invalidIndex,1);
assertEquals(0,l.size());
invalidIndex =
"<?xml version=\"1.0\"?>"+
"<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+
"<audio genre=\"Blues\" identifier=\"def.txt\" bitrate=\"192\" index=\"-2\"/></audios>";
l = LimeXMLDocumentHelper.getDocuments(invalidIndex,1);
assertEquals(0,l.size());
invalidIndex =
"<?xml version=\"1.0\"?>"+
"<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+
"<audio genre=\"Blues\" identifier=\"def.txt\" bitrate=\"192\"/></audios>";
l = LimeXMLDocumentHelper.getDocuments(invalidIndex,1);
assertEquals(0,l.size());
// test invalid xml
String invalidXML =
"<?xml version=\"1.0\"?>"+
"<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+
"<audio genre=\"Blues\" identifier=\"def.txt\" bitrate=\"192\"/>";
l = LimeXMLDocumentHelper.getDocuments(invalidIndex,1);
assertEquals(0,l.size());
// test valid documented catenated to an invalid one
String oneValidOneNot =
threeResp+invalidXML;
l = LimeXMLDocumentHelper.getDocuments(oneValidOneNot,3);
assertEquals(1,l.size());
docs = (LimeXMLDocument [])l.get(0);
assertEquals(3,docs.length);
for (int i = 0;i<docs.length;i++)
assertNotNull(docs[i]);
// test two valid documents
String twoValid = threeResp+identical;
l = LimeXMLDocumentHelper.getDocuments(twoValid,3);
assertEquals(2,l.size());
docs = (LimeXMLDocument [])l.get(0);
assertEquals(3,docs.length);
for (int i = 0;i<docs.length;i++)
assertNotNull(docs[i]);
docs = (LimeXMLDocument [])l.get(1);
assertEquals(3,docs.length);
assertNotNull(docs[0]);
assertNotNull(docs[1]);
assertNull(docs[2]);
}
}