package com.limegroup.gnutella.xml; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import junit.framework.Test; import com.limegroup.gnutella.Assert; import com.limegroup.gnutella.util.BaseTestCase; /** * Tests for the XMLParsingUtils class */ public class XMLParsingUtilsTest extends BaseTestCase { public XMLParsingUtilsTest(String name) { super(name); } public static Test suite() { return buildTestSuite(XMLParsingUtilsTest.class); } public void testSplit() throws Exception { String xml1 = "<?xml version='1.0'><text>one</text>"; String xml2 = "<?xml version='1.0'><text>two</text>"; String xml3 = "<?xml version='1.0'><text>three</text>"; Iterator i = XMLParsingUtils.split(xml1+xml2+xml3).iterator(); Assert.that(i.next().equals(xml1)); Assert.that(i.next().equals(xml2)); Assert.that(i.next().equals(xml3)); Assert.that(!i.hasNext()); assertEquals(3,XMLParsingUtils.split("<?xml<?xml<?xml").size()); assertEquals(1,XMLParsingUtils.split("<xml?xml<?xml<?xm").size()); assertTrue(XMLParsingUtils.split("<xml ?><<><?xm>l").isEmpty()); } public void testParseValid() throws Exception { String xml = "<?xml version=\"1.0\"?>"+ "<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+ "<audio genre=\"Rock\" identifier=\"def1.txt\" bitrate=\"190\"/>"+ "<audio genre=\"Classical\" identifier=\"def2.txt\" bitrate=\"2192\"/>"+ "<audio genre=\"Blues\" identifier=\"def.txt\" bitrate=\"192\"/></audios>"; XMLParsingUtils.ParseResult r = XMLParsingUtils.parse(xml,3); Assert.that(r.schemaURI.equals("http://www.limewire.com/schemas/audio.xsd")); Assert.that(r.type.equals("audio")); Assert.that(r.canonicalKeyPrefix.equals("audios__audio__")); List list = new ArrayList(); HashMap map = new HashMap(); map.put("audios__audio__genre__","Rock"); map.put("audios__audio__identifier__","def1.txt"); map.put("audios__audio__bitrate__","190"); list.add(map); map = new HashMap(); map.put("audios__audio__genre__","Classical"); map.put("audios__audio__identifier__","def2.txt"); map.put("audios__audio__bitrate__","2192"); list.add(map); map = new HashMap(); map.put("audios__audio__genre__","Blues"); map.put("audios__audio__identifier__","def.txt"); map.put("audios__audio__bitrate__","192"); list.add(map); Assert.that(r.equals(list)); String invalid = "<?xml version=\"1.0\"?>"+ "<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+ "<video something=\"something\"/></audios>"; r = XMLParsingUtils.parse(invalid,1); assertFalse(r.isEmpty()); assertNotNull(r.canonicalKeyPrefix); assertNotNull(r.schemaURI); String nested ="<?xml version=\"1.0\"?>"+ "<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+ "<audio genre=\"Rock\" identifier=\"def1.txt\" bitrate=\"190\">"+ "<audio genre=\"Classical\" identifier=\"def2.txt\" bitrate=\"2192\">"+ "<audio genre=\"Blues\" identifier=\"def.txt\" bitrate=\"192\"/></audio></audio></audios>"; r = XMLParsingUtils.parse(nested,3); assertFalse(r.isEmpty()); assertNotNull(r.canonicalKeyPrefix); assertNotNull(r.schemaURI); Assert.that(r.equals(list)); String empty1 = "<?xml version=\"1.0\"?>"+ "<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+ "</audios>"; r = XMLParsingUtils.parse(empty1,1); assertTrue(r.isEmpty()); assertNotNull(r.canonicalKeyPrefix); assertNull(r.schemaURI); String empty2 = "<?xml version=\"1.0\"?>"+ "<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\"/>"; r = XMLParsingUtils.parse(empty2,1); assertTrue(r.isEmpty()); assertNotNull(r.canonicalKeyPrefix); assertNull(r.schemaURI); } public void testParseInvalid() throws Exception { XMLParsingUtils.ParseResult result; String invalid = "<?xml asdf asdf>"; try { result = XMLParsingUtils.parse(invalid,1); fail("parsed invalid xml"); }catch(SAXException expected){} invalid = "<?xml version=\"1.0\"?>"+ "<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+ "<audio genre=\"Rock\" identifier=\"def1.txt\" bitrate=\"190\"/>"; try { result = XMLParsingUtils.parse(invalid,1); fail("parsed w/o closing audios tag"); }catch(SAXException expected){} invalid = "<?xml version=\"1.0\"?>"+ "<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+ "<audio genre=\"Rock\" identifier=\"def1.txt\" bitrate=\"190\"></audios>"; try { result = XMLParsingUtils.parse(invalid,1); fail("parsed with non-null not-closed audio element"); }catch(SAXException expected){} invalid = "<?xml version=\"1.0\"?>"+ "<audios xsi:noNamespaceSchemaLocation=\"http://www.limewire.com/schemas/audio.xsd\">"+ "<audio genre=\"Rock\" identifier=\"def1.txt bitrate=\"190\"/></audios>"; try { result = XMLParsingUtils.parse(invalid,1); fail("parsed with malformed attribute"); }catch(SAXException expected){} } }