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();    
      }
      
  }    
  
  

Reply via email to