You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by ju...@apache.org on 2002/08/19 13:12:17 UTC

cvs commit: jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor StringResponseBodyAssert.java StreamResponseBodyAssert.java XMLStreamResponseBodyAssert.java

juergen     2002/08/19 04:12:17

  Modified:    testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor
                        StreamResponseBodyAssert.java
                        XMLStreamResponseBodyAssert.java
  Added:       testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor
                        StringResponseBodyAssert.java
  Log:
  the xml content diff function is now based on strings, instead of bytes.
  
  Revision  Changes    Path
  1.8       +12 -11    jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/StreamResponseBodyAssert.java
  
  Index: StreamResponseBodyAssert.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/StreamResponseBodyAssert.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- StreamResponseBodyAssert.java	19 Jun 2002 07:08:56 -0000	1.7
  +++ StreamResponseBodyAssert.java	19 Aug 2002 11:12:17 -0000	1.8
  @@ -198,7 +198,7 @@
               "A", "B", "C", "D", "E", "F"};
       
       
  -    private static String convertHexDigit( byte toEncode ) {
  +    protected static String convertHexDigit( byte toEncode ) {
           String result;
           int low = (int) (toEncode & 0x0f);
           int high = (int) ((toEncode & 0xf0) >> 4);
  @@ -211,7 +211,7 @@
       /**
        * get a byte as decimal and (try) as character
        */
  -    private String getStreamCharByte(byte[] input){
  +    protected String getStreamCharByte(byte[] input){
           return " " + new String(input) + "   [" + convertHexDigit(input[0]) + "]";
       }
       
  @@ -219,7 +219,7 @@
       /**
        * get a byte as decimal and (try) as character with prefix
        */
  -    private String getStreamCharByte(int counter, byte[] input){
  +    protected String getStreamCharByte(int counter, byte[] input){
           return getPrefixStreamCharByte(counter) + getStreamCharByte(input);
       }
       
  @@ -228,19 +228,20 @@
       /**
        * get a byte as decimal and (try) as character with prefix
        */
  -    private String getStreamCharByte(int counter, byte[] exp, byte[] rec){
  +    protected String getStreamCharByte(int counter, byte[] exp, byte[] rec){
           if (exp[0] == rec[0]) return getPrefixStreamCharByte(counter) +
                                        getStreamCharByte(exp);
           else                  return getPrefixStreamCharByte(counter) +
                                        getStreamCharByte(exp) +
  -                                     " " + getStreamCharByte(rec);
  +                                     " " + getStreamCharByte(rec) +
  +                                     " Difference";
       }
       
       
       /**
        * get a prefix string for printing
        */
  -    private String getPrefixStreamCharByte(int position){
  +    protected String getPrefixStreamCharByte(int position){
           return " " + position + ": \t" ;
       }
       
  @@ -249,7 +250,7 @@
       /**
        * Print the final stream content a prefix string for printing
        */
  -    private void printPostfixStreamCharByte(int counter, byte[] buffer, InputStream input){
  +    protected void printPostfixStreamCharByte(int counter, byte[] buffer, InputStream input){
           try {
               System.out.println(getStreamCharByte(++counter, buffer));
               int bytesRead;
  
  
  
  1.5       +14 -14    jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/XMLStreamResponseBodyAssert.java
  
  Index: XMLStreamResponseBodyAssert.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/XMLStreamResponseBodyAssert.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XMLStreamResponseBodyAssert.java	8 Aug 2002 16:38:43 -0000	1.4
  +++ XMLStreamResponseBodyAssert.java	19 Aug 2002 11:12:17 -0000	1.5
  @@ -87,11 +87,9 @@
    * @author Software AG
    * @version $Revision$
    */
  -public abstract class XMLStreamResponseBodyAssert extends StreamResponseBodyAssert {
  +public abstract class XMLStreamResponseBodyAssert extends StringResponseBodyAssert {
       
       
  -    private final static boolean extendedPrintlnsrequested = false;
  -    
       
       
       /** constructer
  @@ -113,27 +111,29 @@
       protected boolean compareStreams(InputStream receivedBody, InputStream expectedBody)  {
           byte[] receivedCopy = null;
           byte[] expectedCopy = null;
  -        InputStream received = null;
  -        InputStream expected = null;
           try
           {
               receivedCopy = readFromStream(receivedBody);
               expectedCopy = readFromStream(expectedBody);
               
  -            received = new StringBufferInputStream(new XMLOutputter("", false, "UTF-8").outputString(new SAXBuilder().build(new ByteArrayInputStream(receivedCopy))));
  -            expected = new StringBufferInputStream(new XMLOutputter("", false, "UTF-8").outputString(new SAXBuilder().build(new ByteArrayInputStream(expectedCopy))));
  +            // copare on a string base
  +            String received = new XMLOutputter("", false, "UTF-8").outputString(new SAXBuilder().build(new ByteArrayInputStream(receivedCopy)));
  +            String expected = new XMLOutputter("", false, "UTF-8").outputString(new SAXBuilder().build(new ByteArrayInputStream(expectedCopy)));
  +            return super.compareStrings(received, expected);
           }
           
           catch (JDOMException e) {
  -            received = new ByteArrayInputStream(receivedCopy);
  -            expected = new ByteArrayInputStream(expectedCopy);
  +            // if not XML compare it on a binary base
  +            return super.compareStreams(new ByteArrayInputStream(receivedCopy),
  +                                        new ByteArrayInputStream(expectedCopy));
           }
           catch (Exception e) {
               e.printStackTrace();
               xmlresult.writeException(e);
           }
           
  -        return super.compareStreams(received, expected);
  +        // return false in case of an exception
  +        return false;
       }
       
       // -------------------------------------------------------- Private Methods
  
  
  
  1.1                  jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/StringResponseBodyAssert.java
  
  Index: StringResponseBodyAssert.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/StringResponseBodyAssert.java,v 1.1 2002/08/19 11:12:17 juergen Exp $
   * $Revision: 1.1 $
   * $Date: 2002/08/19 11:12:17 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 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 acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Slide", 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 names without prior written
   *    permission of the Apache Group.
   *
   * 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.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * [Additional notices, if required by prior licensing conditions]
   *
   */
  
  package org.apache.slide.testsuite.testtools.tprocessor;
  
  //java
  import java.io.*;
  import java.util.*;
  // Slide
  import org.apache.webdav.lib.methods.*;
  import org.apache.commons.httpclient.*;
  //test package
  import org.apache.slide.testsuite.testtools.tutil.*;
  
  
  
  /**
   * Abstract root class to perform the necessary checks for the received and expected stream body
   *
   * @author Software AG
   * @version $Revision: 1.1 $
   */
  public abstract class StringResponseBodyAssert extends StreamResponseBodyAssert{
      
      
      private final static boolean extendedPrintlnsrequested = true;
      
      
      protected HttpMethod    method;
      protected InputStream   expectedBody;
      protected InputStream   receivedBody;
      
      /** constructer
       * @param WebdavMethodBase Element
       */
      public StringResponseBodyAssert(HttpMethod method, InputStream expectedBody, XConf xconf, XMLOutput xmlresult){
          
      
          super(method, expectedBody, xconf, xmlresult);
          
          this.method = method;
          this.expectedBody = expectedBody;
          // ugly quick hack to read the body
          try {
              if (method.hasResponseBody() && method instanceof GetMethod) {
                  this.receivedBody = ((GetMethod)method).getData();
              }
          }
          catch (Exception e) {
              e.printStackTrace();
              xmlresult.writeException(e);
          }
          
          
      }
      
      
      
      
      /**
       * checks if Expected Response and Response are same
       */
      public boolean assertResponseBody(){
          if (method.getStatusCode() < 200  || method.getStatusCode() > 300  ){
              return true;
          }
          
          if (receivedBody == null ||
              expectedBody == null  )
              return true;
          return compareStreams(receivedBody, expectedBody);
      }
      
      
      /**
       * checks if Expected and the received Response bodies are identical
       */
      protected boolean compareStrings(String receivedBody, String expectedBody){
          
          if (receivedBody.equals(expectedBody)) return false;
  
          if (receivedBody.length() != expectedBody.length()) {
              xmlresult.writeElement("ContentLengthError", "Received = " + receivedBody.length() +
                                                           " Expected = " + expectedBody.length() );
  if (extendedPrintlnsrequested) System.out.println( "ContentLengthError " + "Received = " + receivedBody.length() +
                                                           " Expected = " + expectedBody.length());
          }
          
          String contentValueProblem = null;
          int charsRead = 0;
          while (charsRead <= receivedBody.length() &&
                 charsRead <= expectedBody.length()) {
              
              charsRead++;
              
              char receivedChar = receivedBody.charAt(charsRead);
              char expectedChar = expectedBody.charAt(charsRead);
              
  if (extendedPrintlnsrequested) System.out.println(getStreamCharByte(charsRead, receivedChar, expectedChar) );
  
              if (receivedChar != expectedChar) {
                  if (contentValueProblem == null) {
                      contentValueProblem = "Position = " + charsRead;
                  } else {
                      if (contentValueProblem.length() < 1024)
                          contentValueProblem += " ," + charsRead;
                  }
              }
              }
  
          if (contentValueProblem != null) {
              xmlresult.writeElement("ContentValueError", contentValueProblem);
          }
  
          // length or value are not identical
          return false;
      }
      
  //////////////////////////////////////////////
  //   some debugging printlns and methods    //
  //////////////////////////////////////////////
  
      
      /**
       * get a byte as decimal and (try) as character with prefix
       */
      protected String getStreamCharByte(int counter, char exp, char rec){
          return getStreamCharByte(counter, getBytes(exp), getBytes(rec));
      }
      /**
       * get a prefix string for printing
       */
      protected byte[] getBytes(char character){
          try
          {
              return new Character(character).toString().getBytes("UTF-8");
          }
          catch (UnsupportedEncodingException e) { return new byte[]{0x00};}
      }
      
      
      
  }
  
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>