xml-rpc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rho...@apache.org
Subject cvs commit: xml-rpc/src/test/org/apache/xmlrpc Base64Test.java
Date Sat, 01 Feb 2003 22:29:37 GMT
rhoegg      2003/02/01 14:29:37

  Modified:    .        Tag: XMLRPC_1_2_BRANCH build.xml
               src/java/org/apache/xmlrpc Tag: XMLRPC_1_2_BRANCH
                        Base64.java
               src/test/org/apache/xmlrpc Tag: XMLRPC_1_2_BRANCH
                        Base64Test.java
  Log:
  Brought Base64 up to date with HEAD.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.20.2.1  +1 -1      xml-rpc/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-rpc/build.xml,v
  retrieving revision 1.20
  retrieving revision 1.20.2.1
  diff -u -r1.20 -r1.20.2.1
  --- build.xml	10 Oct 2002 00:33:24 -0000	1.20
  +++ build.xml	1 Feb 2003 22:29:37 -0000	1.20.2.1
  @@ -3,7 +3,7 @@
   <project name="xmlrpc" default="jar" basedir=".">
   
     <!-- Properties which are not allowed to be overridden -->
  -  <property name="version" value="1.2-a3-dev"/>
  +  <property name="version" value="1.2-b1-dev"/>
   
     <!-- Allow any user specific values to override the defaults -->
     <property file="${user.home}/build.properties" />
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.2.1   +32 -8     xml-rpc/src/java/org/apache/xmlrpc/Base64.java
  
  Index: Base64.java
  ===================================================================
  RCS file: /home/cvs/xml-rpc/src/java/org/apache/xmlrpc/Base64.java,v
  retrieving revision 1.4
  retrieving revision 1.4.2.1
  diff -u -r1.4 -r1.4.2.1
  --- Base64.java	1 Nov 2002 22:06:10 -0000	1.4
  +++ Base64.java	1 Feb 2003 22:29:37 -0000	1.4.2.1
  @@ -79,6 +79,9 @@
    */
   public final class  Base64
   {
  +    static final int CHUNK_SIZE = 76;
  +    static final byte[] CHUNK_SEPARATOR = "\n".getBytes();
  +
       static private final int  BASELENGTH         = 255;
       static private final int  LOOKUPLENGTH       = 64;
       static private final int  TWENTYFOURBITGROUP = 24;
  @@ -167,24 +170,34 @@
           int      fewerThan24bits   = lengthDataBits%TWENTYFOURBITGROUP;
           int      numberTriplets    = lengthDataBits/TWENTYFOURBITGROUP;
           byte     encodedData[]     = null;
  -
  +	int      encodedDataLength = 0;
   
           if (fewerThan24bits != 0)
           {
               //data not divisible by 24 bit
  -            encodedData = new byte[ (numberTriplets + 1 ) * 4 ];
  +            encodedDataLength = (numberTriplets + 1 ) * 4;
           }
           else
           {
               // 16 or 8 bit
  -            encodedData = new byte[ numberTriplets * 4 ];
  +            encodedDataLength = numberTriplets * 4;
           }
   
  +	// allow extra length for the separator
  +        int nbrChunks = (CHUNK_SEPARATOR.length == 0 ? 0 :
  +                         (int) Math.ceil((float) encodedDataLength / CHUNK_SIZE));
  +
  +	encodedDataLength += (nbrChunks - 1) * CHUNK_SEPARATOR.length;
  +	encodedData = new byte[encodedDataLength];
  +
           byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
   
           int encodedIndex = 0;
           int dataIndex   = 0;
           int i           = 0;
  +	int nextSeparatorIndex = CHUNK_SIZE;
  +	int chunksSoFar = 0;
  +
           //log.debug("number of triplets = " + numberTriplets);
           for ( i = 0; i<numberTriplets; i++ )
           {
  @@ -198,7 +211,6 @@
               l  = (byte)(b2 & 0x0f);
               k  = (byte)(b1 & 0x03);
   
  -            encodedIndex = i * 4;
               byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
               byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
               byte val3 = ((b3 & SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc);
  @@ -212,11 +224,23 @@
               encodedData[encodedIndex+2] =
                   lookUpBase64Alphabet[ (l <<2 ) | val3 ];
               encodedData[encodedIndex+3] = lookUpBase64Alphabet[ b3 & 0x3f ];
  +
  +	    encodedIndex += 4;
  +
  +	    // this assumes that CHUNK_SIZE % 4 == 0
  +	    if(encodedIndex == nextSeparatorIndex){
  +		System.arraycopy(CHUNK_SEPARATOR, 0, encodedData,
  +                                 encodedIndex, CHUNK_SEPARATOR.length);
  +		chunksSoFar++;
  +		nextSeparatorIndex = (CHUNK_SIZE * (chunksSoFar + 1)) + 
  +                                     (chunksSoFar * CHUNK_SEPARATOR.length);
  +		encodedIndex += CHUNK_SEPARATOR.length;
  +	    }
           }
   
           // form integral number of 6-bit groups
           dataIndex    = i*3;
  -        encodedIndex = i*4;
  +
           if (fewerThan24bits == EIGHTBIT )
           {
               b1 = binaryData[dataIndex];
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.7.2.1   +7 -4      xml-rpc/src/test/org/apache/xmlrpc/Base64Test.java
  
  Index: Base64Test.java
  ===================================================================
  RCS file: /home/cvs/xml-rpc/src/test/org/apache/xmlrpc/Base64Test.java,v
  retrieving revision 1.7
  retrieving revision 1.7.2.1
  diff -u -r1.7 -r1.7.2.1
  --- Base64Test.java	1 Nov 2002 22:06:10 -0000	1.7
  +++ Base64Test.java	1 Feb 2003 22:29:37 -0000	1.7.2.1
  @@ -131,9 +131,8 @@
                   assertEquals(TEST_DATA[i], new String(decoded));
               }
   
  -            // FIXME: The Base64.encode() function doesn't wrap at 76 chars.
  -            //assertEquals(Base64.encode(UNENCODED.getBytes()),
  -            //             ENCODED.getBytes());
  +            assertEquals(Base64.encode(UNENCODED.getBytes()),
  +                         ENCODED.getBytes());
               assertEquals(UNENCODED.getBytes(),
                            Base64.decode(ENCODED.getBytes()));
           }
  @@ -149,11 +148,15 @@
        */
       private void assertEquals(byte[] a, byte[] b)
       {
  +        if (a.length != b.length)
  +        {
  +            fail("Byte arrays have different lengths (" + a.length + " != " + b.length
+ ")");
  +        }
           for (int i = 0; i < a.length; i++)
           {
               if (a[i] != b[i])
               {
  -                fail("Byte arrays not equal (" + a[i] + " != " + b[i] + ")");
  +                fail("Byte arrays not equal (" + a[i] + " != " + b[i] + " at position +
" + i + ")");
               }
           }
       }
  
  
  

Mime
View raw message