package org.iharder; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.Random; import junit.framework.TestCase; 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, Base64.NO_OPTIONS); 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)); } 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); } } }