package com.eclipsesource.tabris.internal; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.Random; import junit.framework.TestCase; import org.junit.Test; public class Base64Test extends TestCase { private static final long SEED = 12345678; private static Random s_random = new Random( SEED ); private byte[] createData( int length ) throws Exception { byte[] bytes = new byte[ length ]; s_random.nextBytes( bytes ); return bytes; } private void runStreamTest( int length ) throws Exception { byte[] data = createData( length ); ByteArrayOutputStream out_bytes = new ByteArrayOutputStream(); OutputStream out = new Base64.OutputStream( out_bytes ); out.write( data ); out.close(); byte[] encoded = out_bytes.toByteArray(); byte[] decoded = Base64.decode( encoded, 0, encoded.length, 0 ); assertTrue( Arrays.equals( data, decoded ) ); Base64.InputStream in = new Base64.InputStream( new ByteArrayInputStream( encoded ) ); out_bytes = new ByteArrayOutputStream(); byte[] buffer = new byte[ 3 ]; for( int n = in.read( buffer ); n > 0; n = in.read( buffer ) ) { out_bytes.write( buffer, 0, n ); } out_bytes.close(); in.close(); decoded = out_bytes.toByteArray(); assertTrue( Arrays.equals( data, decoded ) ); } @Test public void testStreams() throws Exception { for( int i = 0; i < 100; ++i ) { runStreamTest( i ); } for( int i = 100; i < 2000; i += 250 ) { runStreamTest( i ); } for( int i = 2000; i < 80000; i += 1000 ) { runStreamTest( i ); } } }