You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by tn...@apache.org on 2002/05/21 20:41:41 UTC

cvs commit: xml-xerces/c/tests/DOM/DeprecatedDOMCount DeprecatedDOMCount.cpp DeprecatedDOMCount.hpp Makefile.in

tng         02/05/21 11:41:41

  Added:       c/tests/DOM/DeprecatedDOMCount DeprecatedDOMCount.cpp
                        DeprecatedDOMCount.hpp Makefile.in
  Log:
  Test case update:
  1. add test case deprecatedDOMCount.
  2. remove DOMIDTest.
  3. modify dom test case to use the latest DOM interface
  (and thus idom related test case are removed).
  
  Revision  Changes    Path
  1.1                  xml-xerces/c/tests/DOM/DeprecatedDOMCount/DeprecatedDOMCount.cpp
  
  Index: DeprecatedDOMCount.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xerces" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache\@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation, and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com .  For more information
   * on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * $Id: DeprecatedDOMCount.cpp,v 1.1 2002/05/21 18:41:41 tng Exp $
   */
  
  // ---------------------------------------------------------------------------
  //  Includes
  // ---------------------------------------------------------------------------
  #include <xercesc/util/PlatformUtils.hpp>
  #include <xercesc/sax/SAXException.hpp>
  #include <xercesc/sax/SAXParseException.hpp>
  #include <xercesc/dom/deprecated/DOMParser.hpp>
  #include <xercesc/dom/deprecated/DOM_DOMException.hpp>
  #include "DeprecatedDOMCount.hpp"
  #include <string.h>
  #include <stdlib.h>
  #include <fstream.h>
  
  
  
  // ---------------------------------------------------------------------------
  //  This is a simple program which invokes the DOMParser to build a DOM
  //  tree for the specified input file. It then walks the tree and counts
  //  the number of elements. The element count is then printed.
  // ---------------------------------------------------------------------------
  void usage()
  {
      cout << "\nUsage:\n"
              "    DeprecatedDOMCount [options] <XML file | List file>\n\n"
              "This program invokes the DOM parser, builds the DOM tree,\n"
              "and then prints the number of elements found in each XML file.\n\n"
              "Options:\n"
              "    -l          Indicate the input file is a List File that has a list of xml files.\n"
              "                Default to off (Input file is an XML file).\n"
              "    -v=xxx      Validation scheme [always | never | auto*].\n"
              "    -n          Enable namespace processing. Defaults to off.\n"
              "    -s          Enable schema processing. Defaults to off.\n"
              "    -f          Enable full schema constraint checking. Defaults to off.\n"
  		      "    -?          Show this help.\n\n"
              "  * = Default if not provided explicitly.\n"
           << endl;
  }
  
  
  int main(int argC, char* argV[])
  {
      // Initialize the XML4C system
      try
      {
          XMLPlatformUtils::Initialize();
      }
  
      catch (const XMLException& toCatch)
      {
           cerr << "Error during initialization! :\n"
                << StrX(toCatch.getMessage()) << endl;
           return 1;
      }
  
      // Check command line and extract arguments.
      if (argC < 2)
      {
          usage();
          XMLPlatformUtils::Terminate();
          return 1;
      }
  
      const char*              xmlFile = 0;
      DOMParser::ValSchemes    valScheme = DOMParser::Val_Auto;
      bool                     doNamespaces       = false;
      bool                     doSchema           = false;
      bool                     schemaFullChecking = false;
      bool                     doList = false;
      bool                     errorOccurred = false;
  
      int argInd;
      for (argInd = 1; argInd < argC; argInd++)
      {
          // Break out on first parm not starting with a dash
          if (argV[argInd][0] != '-')
              break;
  
          // Watch for special case help request
          if (!strcmp(argV[argInd], "-?"))
          {
              usage();
              XMLPlatformUtils::Terminate();
              return 2;
          }
           else if (!strncmp(argV[argInd], "-v=", 3)
                ||  !strncmp(argV[argInd], "-V=", 3))
          {
              const char* const parm = &argV[argInd][3];
  
              if (!strcmp(parm, "never"))
                  valScheme = DOMParser::Val_Never;
              else if (!strcmp(parm, "auto"))
                  valScheme = DOMParser::Val_Auto;
              else if (!strcmp(parm, "always"))
                  valScheme = DOMParser::Val_Always;
              else
              {
                  cerr << "Unknown -v= value: " << parm << endl;
                  return 2;
              }
          }
           else if (!strcmp(argV[argInd], "-n")
                ||  !strcmp(argV[argInd], "-N"))
          {
              doNamespaces = true;
          }
           else if (!strcmp(argV[argInd], "-s")
                ||  !strcmp(argV[argInd], "-S"))
          {
              doSchema = true;
          }
           else if (!strcmp(argV[argInd], "-f")
                ||  !strcmp(argV[argInd], "-F"))
          {
              schemaFullChecking = true;
          }
           else if (!strcmp(argV[argInd], "-l")
                ||  !strcmp(argV[argInd], "-L"))
          {
              doList = true;
          }
           else
          {
              cerr << "Unknown option '" << argV[argInd]
                   << "', ignoring it\n" << endl;
          }
      }
  
      //
      //  There should be only one and only one parameter left, and that
      //  should be the file name.
      //
      if (argInd != argC - 1)
      {
          usage();
          return 1;
      }
  
      // Instantiate the DOM parser.
      DOMParser* parser = new DOMParser;
      parser->setValidationScheme(valScheme);
      parser->setDoNamespaces(doNamespaces);
      parser->setDoSchema(doSchema);
      parser->setValidationSchemaFullChecking(schemaFullChecking);
  
      // And create our error handler and install it
      DeprecatedDOMCountErrorHandler errorHandler;
      parser->setErrorHandler(&errorHandler);
  
      //
      //  Get the starting time and kick off the parse of the indicated
      //  file. Catch any exceptions that might propogate out of it.
      //
      unsigned long duration;
  
      bool more = true;
      ifstream fin;
  
      // the input is a list file
      if (doList)
          fin.open(argV[argInd]);
  
      while (more)
      {
          char fURI[1000];
          //initialize the array to zeros
          memset(fURI,0,sizeof(fURI));
  
          if (doList) {
              if (! fin.eof() ) {
                  fin.getline (fURI, sizeof(fURI));
                  if (!*fURI)
                      continue;
                  else {
                      xmlFile = fURI;
                      cerr << "==Parsing== " << xmlFile << endl;
                  }
              }
              else
                  break;
          }
          else {
              xmlFile = argV[argInd];
              more = false;
          }
  
          //reset error count first
          errorHandler.resetErrors();
  
          try
          {
              const unsigned long startMillis = XMLPlatformUtils::getCurrentMillis();
              parser->parse(xmlFile);
              const unsigned long endMillis = XMLPlatformUtils::getCurrentMillis();
              duration = endMillis - startMillis;
          }
  
          catch (const XMLException& toCatch)
          {
              cerr << "\nError during parsing: '" << xmlFile << "'\n"
                   << "Exception message is:  \n"
                   << StrX(toCatch.getMessage()) << "\n" << endl;
              errorOccurred = true;
              continue;
          }
          catch (const DOM_DOMException& toCatch)
          {
              cerr << "\nDOM Error during parsing: '" << xmlFile << "'\n"
                   << "DOMException code is:  \n"
                   << toCatch.code << "\n" << endl;
              errorOccurred = true;
              continue;
          }
          catch (...)
          {
              cerr << "\nUnexpected exception during parsing: '" << xmlFile << "'\n";
              errorOccurred = true;
              continue;
          }
  
          //
          //  Extract the DOM tree, get the list of all the elements and report the
          //  length as the count of elements.
          //
          if (errorHandler.getSawErrors())
          {
              cout << "\nErrors occurred, no output available\n" << endl;
              errorOccurred = true;
          }
           else
          {
              DOM_Document doc = parser->getDocument();
              unsigned int elementCount = doc.getElementsByTagName("*").getLength();
  
              // Print out the stats that we collected and time taken.
              cout << xmlFile << ": " << duration << " ms ("
                   << elementCount << " elems)." << endl;
          }
      }
  
      if (doList)
          fin.close();
  
      //
      //  Delete the parser itself.  Must be done prior to calling Terminate, below.
      //
      delete parser;
  
      // And call the termination method
      XMLPlatformUtils::Terminate();
  
      if (errorOccurred)
          return 4;
      else
          return 0;
  
  }
  
  
  DeprecatedDOMCountErrorHandler::DeprecatedDOMCountErrorHandler() :
  
      fSawErrors(false)
  {
  }
  
  DeprecatedDOMCountErrorHandler::~DeprecatedDOMCountErrorHandler()
  {
  }
  
  
  // ---------------------------------------------------------------------------
  //  DeprecatedDOMCountHandlers: Overrides of the SAX ErrorHandler interface
  // ---------------------------------------------------------------------------
  void DeprecatedDOMCountErrorHandler::error(const SAXParseException& e)
  {
      fSawErrors = true;
      cerr << "\nError at file " << StrX(e.getSystemId())
           << ", line " << e.getLineNumber()
           << ", char " << e.getColumnNumber()
           << "\n  Message: " << StrX(e.getMessage()) << endl;
  }
  
  void DeprecatedDOMCountErrorHandler::fatalError(const SAXParseException& e)
  {
      fSawErrors = true;
      cerr << "\nFatal Error at file " << StrX(e.getSystemId())
           << ", line " << e.getLineNumber()
           << ", char " << e.getColumnNumber()
           << "\n  Message: " << StrX(e.getMessage()) << endl;
  }
  
  void DeprecatedDOMCountErrorHandler::warning(const SAXParseException& e)
  {
      cerr << "\nWarning at file " << StrX(e.getSystemId())
           << ", line " << e.getLineNumber()
           << ", char " << e.getColumnNumber()
           << "\n  Message: " << StrX(e.getMessage()) << endl;
  }
  
  void DeprecatedDOMCountErrorHandler::resetErrors()
  {
      fSawErrors = false;
  }
  
  
  
  1.1                  xml-xerces/c/tests/DOM/DeprecatedDOMCount/DeprecatedDOMCount.hpp
  
  Index: DeprecatedDOMCount.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xerces" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache\@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation, and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com .  For more information
   * on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * $Id: DeprecatedDOMCount.hpp,v 1.1 2002/05/21 18:41:41 tng Exp $
   */
  
  // ---------------------------------------------------------------------------
  //  Includes
  // ---------------------------------------------------------------------------
  #include <xercesc/sax/ErrorHandler.hpp>
  #include <iostream.h>
  
  class SAXParseException;
  
  
  // ---------------------------------------------------------------------------
  //  Simple error handler deriviative to install on parser
  // ---------------------------------------------------------------------------
  class DeprecatedDOMCountErrorHandler : public ErrorHandler
  {
  public:
      // -----------------------------------------------------------------------
      //  Constructors and Destructor
      // -----------------------------------------------------------------------
      DeprecatedDOMCountErrorHandler();
      ~DeprecatedDOMCountErrorHandler();
  
  
      // -----------------------------------------------------------------------
      //  Getter methods
      // -----------------------------------------------------------------------
      bool getSawErrors() const;
  
  
      // -----------------------------------------------------------------------
      //  Implementation of the SAX ErrorHandler interface
      // -----------------------------------------------------------------------
      void warning(const SAXParseException& e);
      void error(const SAXParseException& e);
      void fatalError(const SAXParseException& e);
      void resetErrors();
  
  
  private :
      // -----------------------------------------------------------------------
      //  Unimplemented constructors and operators
      // -----------------------------------------------------------------------
      DeprecatedDOMCountErrorHandler(const DeprecatedDOMCountErrorHandler&);
      void operator=(const DeprecatedDOMCountErrorHandler&);
  
  
      // -----------------------------------------------------------------------
      //  Private data members
      //
      //  fSawErrors
      //      This is set if we get any errors, and is queryable via a getter
      //      method. Its used by the main code to suppress output if there are
      //      errors.
      // -----------------------------------------------------------------------
      bool    fSawErrors;
  };
  
  
  // ---------------------------------------------------------------------------
  //  This is a simple class that lets us do easy (though not terribly efficient)
  //  trancoding of XMLCh data to local code page for display.
  // ---------------------------------------------------------------------------
  class StrX
  {
  public :
      // -----------------------------------------------------------------------
      //  Constructors and Destructor
      // -----------------------------------------------------------------------
      StrX(const XMLCh* const toTranscode)
      {
          // Call the private transcoding method
          fLocalForm = XMLString::transcode(toTranscode);
      }
  
      ~StrX()
      {
          delete [] fLocalForm;
      }
  
  
      // -----------------------------------------------------------------------
      //  Getter methods
      // -----------------------------------------------------------------------
      const char* localForm() const
      {
          return fLocalForm;
      }
  
  private :
      // -----------------------------------------------------------------------
      //  Private data members
      //
      //  fLocalForm
      //      This is the local code page form of the string.
      // -----------------------------------------------------------------------
      char*   fLocalForm;
  };
  
  inline ostream& operator<<(ostream& target, const StrX& toDump)
  {
      target << toDump.localForm();
      return target;
  }
  
  inline bool DeprecatedDOMCountErrorHandler::getSawErrors() const
  {
      return fSawErrors;
  }
  
  
  
  1.1                  xml-xerces/c/tests/DOM/DeprecatedDOMCount/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  #
  # The Apache Software License, Version 1.1
  #
  # Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  # reserved.
  #
  # Redistribution and use in source and binary forms, with or without
  # modification, are permitted provided that the following conditions
  # are met:
  #
  # 1. Redistributions of source code must retain the above copyright
  #    notice, this list of conditions and the following disclaimer.
  #
  # 2. Redistributions in binary form must reproduce the above copyright
  #    notice, this list of conditions and the following disclaimer in
  #    the documentation and/or other materials provided with the
  #    distribution.
  #
  # 3. The end-user documentation included with the redistribution,
  #    if any, must include the following acknowledgment:
  #       "This product includes software developed by the
  #        Apache Software Foundation (http://www.apache.org/)."
  #    Alternately, this acknowledgment may appear in the software itself,
  #    if and wherever such third-party acknowledgments normally appear.
  #
  # 4. The names "Xerces" and "Apache Software Foundation" must
  #    not be used to endorse or promote products derived from this
  #    software without prior written permission. For written
  #    permission, please contact apache\@apache.org.
  #
  # 5. Products derived from this software may not be called "Apache",
  #    nor may "Apache" appear in their name, without prior written
  #    permission of the Apache Software Foundation.
  #
  # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  # DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  # ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  # SUCH DAMAGE.
  # ====================================================================
  #
  # This software consists of voluntary contributions made by many
  # individuals on behalf of the Apache Software Foundation, and was
  # originally based on software copyright (c) 1999, International
  # Business Machines, Inc., http://www.ibm.com .  For more information
  # on the Apache Software Foundation, please see
  # <http://www.apache.org/>.
  #
  #
  # $Id: Makefile.in,v 1.1 2002/05/21 18:41:41 tng Exp $
  #
  #
  
  ###################################################################
  #                    IMPORTANT NOTE                               #
  ###################################################################
  # If you are going to do the OS390BATCH build, make sure you have #
  # the OS390BATCH environment variable set.                        #
  #                                                                 #
  #   export OS390BATCH=1                                           #
  #                                                                 #
  ###################################################################
  
  PLATFORM = @platform@
  COMPILER = @compiler@
  CXXFLAGS = @cxxflags@
  CFLAGS = @cflags@
  LDFLAGS = @ldflags@
  PREFIX = @prefix@
  THREADS = @threads@
  EXTRA_LIBS = @extra_libs@
  
  include ../../../version.incl
  include ../../Makefile.incl
  
  APP_NAME=DeprecatedDOMCount
  APP_DIR=DOM/DeprecatedDOMCount
  
  OUTDIR= ${XERCESCROOT}/tests/${APP_DIR}
  EXEC=	${XERCESCROOT}/bin
  OBJS=	${OUTDIR}/DeprecatedDOMCount.o
  SRC=	${XERCESCROOT}/tests/${APP_DIR}
  HEADER_FILES=${SRC}/DeprecatedDOMCount.hpp
  INCLUDE = ${INCLUDES}
  
  ## OS390BATCH
  ifeq (${OS390BATCH},1)
  BATCH_TARGET= "//'${LOADMOD}(DEPRECAT)'"
  all:: makedir ${BATCH_TARGET}
  else
  all:: makedir ${EXEC}/${APP_NAME}
  endif
  
  makedir::
  	-mkdir -p $(OUTDIR)
  
  ${EXEC}/${APP_NAME}:: ${OBJS}
  	${LINK} ${PLATFORM_LIB_LINK_OPTIONS} ${OBJS} -o $@ ${LIBRARY_SEARCH_PATHS} ${LIBRARY_NAMES} ${EXTRA_LINK_OPTIONS}
  ${BATCH_TARGET}:: ${OBJS}
  	${LINK} ${PLATFORM_LIB_LINK_OPTIONS} ${OBJS} -o $@ ${LIBRARY_SEARCH_PATHS} ${LIBRARY_NAMES} ${EXTRA_LINK_OPTIONS}
  
  $(OUTDIR)/DeprecatedDOMCount.o:: ${SRC}/DeprecatedDOMCount.cpp ${HEADER_FILES}
  	${CC} ${CMP} $(INCLUDE) -o $(OUTDIR)/DeprecatedDOMCount.o ${SRC}/DeprecatedDOMCount.cpp
  
  clean::
  	rm -f ${OBJS} ${EXEC}/${APP_NAME}
  
  distclean::	clean
  	rm -f Makefile
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org