gianugo 2002/12/25 12:53:30
Added: java/tests/src/org/apache/xindice/xml/sax SAXEventGeneratorTest.java Log: Added a first test for SAXEventGenerator Revision Changes Path 1.1 xml-xindice/java/tests/src/org/apache/xindice/xml/sax/SAXEventGeneratorTest.java Index: SAXEventGeneratorTest.java =================================================================== package org.apache.xindice.xml.sax; import java.io.StringReader; import java.util.ArrayList; import javax.xml.parsers.SAXParserFactory; import junit.framework.TestCase; import org.apache.xindice.xml.dom.DOMParser; import org.w3c.dom.Document; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.ext.LexicalHandler; /** * This is a simple test to verify that the output of XIndice internal SAX * parser and a generic Jaxp parser is the same. * * @author <a href="mailto:[EMAIL PROTECTED]">Gianugo Rabellino</a> */ public class SAXEventGeneratorTest extends TestCase { private static final String XML = "<?xml version=\"1.0\"?>" + "<n1:n1 " + "xmlns:n1=\"http://apache.org/xindice/mockns/n1\" " + "xmlns:n2=\"http://apache.org/xindice/mockns/n1/n2\" " + "xmlns:n3=\"http://apache.org/xindice/mockns/n1/n3\" " + "xmlns:n4=\"http://apache.org/xindice/mockns/n1/n4\" " + "xmlns:n5=\"http://apache.org/xindice/mockns/n1/n5\" " + "xmlns:n6=\"http://apache.org/xindice/mockns/n1/n6\" " + "xmlns:n7=\"http://apache.org/xindice/mockns/n7\" " + "n7:aaa=\"n1\" " + "n7:bbb=\"something\">" + "" + "" + "<n2:aaa />" + "<n2:bbb />" + "<n2:ccc with=\"an attribute\">Whatever</n2:ccc>" + "<n2:ddd>Hello World!</n2:ddd>" + "<n2:eee />" + "<n1:aaa>0</n1:aaa>" + "<n1:bbb>More text</n1:bbb>" + "<n3:aaa />" + "<n3:bbb />" + "<n4:aaa />" + "<n4:bbb />" + "<n5:aaa>Even more text, with newlines\n and stuff</n5:aaa>" + "<n6:aaa />" + "</n1:n1>"; Document doc; SAXEventGenerator generator; LoggingContentHandler xindiceHandler; LoggingContentHandler jaxpHandler; /** * Setup the test, build the parsers and let them parse * the document. * * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { // Xindice parsing doc = DOMParser.toDocument(XML); generator = new SAXEventGenerator(doc); xindiceHandler = new LoggingContentHandler(); generator.setContentHandler(xindiceHandler); generator.start(); // Jaxp Parsing SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(true); XMLReader reader = factory.newSAXParser().getXMLReader(); jaxpHandler = new LoggingContentHandler(); reader.setContentHandler(jaxpHandler); reader.setFeature("http://xml.org/sax/features/namespace-prefixes", true); reader.parse(new InputSource(new StringReader(XML))); } public void testStartElement() { assertEquals(jaxpHandler.startElementCount, xindiceHandler.startElementCount); } public void testEndElement() { assertEquals(jaxpHandler.endElementCount, xindiceHandler.endElementCount); } public void testNameSpaces() { assertEquals(jaxpHandler.nameSpacesList.size(), xindiceHandler.nameSpacesList.size()); } public void testAttributesCount() { assertEquals(jaxpHandler.attributesCount, xindiceHandler.attributesCount); } public void testCharacters() { assertEquals(jaxpHandler.charactersCount, xindiceHandler.charactersCount); } public void testStartPrefixMapping() { assertEquals(jaxpHandler.startPrefixMappingCount, xindiceHandler.startPrefixMappingCount); } public void testEndPrefixMapping() { assertEquals(jaxpHandler.endPrefixMappingCount, xindiceHandler.endPrefixMappingCount); } public void testStartCDATA() { assertEquals(jaxpHandler.startCDATACount, xindiceHandler.startCDATACount); } public void testEndCDATA() { assertEquals(jaxpHandler.endCDATACount, xindiceHandler.endCDATACount); } public void testComment() { assertEquals(jaxpHandler.commentCount, xindiceHandler.commentCount); } } /** * Horrible hack to quickly check if two parsers have (roughly) * the same output. * * @author <a href="mailto:[EMAIL PROTECTED]">Gianugo Rabellino</a> */ class LoggingContentHandler implements ContentHandler, LexicalHandler { int startElementCount = 0; int endElementCount = 0; int attributesCount = 0; int startPrefixMappingCount = 0; int endPrefixMappingCount = 0; int charactersCount = 0; int ignorableWhitespaceCount = 0; int startEntityCount = 0; int endEntityCount = 0; int startCDATACount = 0; int endCDATACount = 0; int commentCount = 0; ArrayList nameSpacesList = new ArrayList(); /** * @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator) */ public void setDocumentLocator(Locator arg0) { } /** * @see org.xml.sax.ContentHandler#startDocument() */ public void startDocument() throws SAXException { } /** * @see org.xml.sax.ContentHandler#endDocument() */ public void endDocument() throws SAXException { } /** * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String, java.lang.String) */ public void startPrefixMapping(String arg0, String arg1) throws SAXException { startPrefixMappingCount++; } /** * @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String) */ public void endPrefixMapping(String arg0) throws SAXException { endPrefixMappingCount++; } /** * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) */ public void startElement( String nsUri, String localName, String name, Attributes attrs) throws SAXException { startElementCount++; if (!nameSpacesList.contains(nsUri)) nameSpacesList.add(nsUri); attributesCount += attrs.getLength(); } /** * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String) */ public void endElement( String nsUri, String localName, String name) throws SAXException { endElementCount++; } /** * @see org.xml.sax.ContentHandler#characters(char[], int, int) */ public void characters(char[] ch, int start, int end) throws SAXException { charactersCount += new String(ch, start, end).length(); } /** * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int) */ public void ignorableWhitespace(char[] arg0, int arg1, int arg2) throws SAXException { } /** * @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String, java.lang.String) */ public void processingInstruction(String arg0, String arg1) throws SAXException { } /** * @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String) */ public void skippedEntity(String arg0) throws SAXException { } /** * @see org.xml.sax.ext.LexicalHandler#startDTD(java.lang.String, java.lang.String, java.lang.String) */ public void startDTD(String arg0, String arg1, String arg2) throws SAXException { } /** * @see org.xml.sax.ext.LexicalHandler#endDTD() */ public void endDTD() throws SAXException { } /** * @see org.xml.sax.ext.LexicalHandler#startEntity(java.lang.String) */ public void startEntity(String arg0) throws SAXException { } /** * @see org.xml.sax.ext.LexicalHandler#endEntity(java.lang.String) */ public void endEntity(String arg0) throws SAXException { } /** * @see org.xml.sax.ext.LexicalHandler#startCDATA() */ public void startCDATA() throws SAXException { } /** * @see org.xml.sax.ext.LexicalHandler#endCDATA() */ public void endCDATA() throws SAXException { } /** * @see org.xml.sax.ext.LexicalHandler#comment(char[], int, int) */ public void comment(char[] ch, int start, int end) throws SAXException { commentCount += new String(ch, start, end).length(); } }