/* * Copyright (C) 2004 Joe Walnes. * Copyright (C) 2006, 2007 XStream Committers. * All rights reserved. * * The software in this package is published under the terms of the BSD * style license a copy of which has been included with this distribution in * the LICENSE.txt file. * * Created on 06. August 2004 by Joe Walnes */ package com.thoughtworks.xstream.core.util; import com.thoughtworks.acceptance.AbstractAcceptanceTest; public class Base64EncoderTest extends AbstractAcceptanceTest { private Base64Encoder encoder = new Base64Encoder(); public void testEncodesEntireByteArrayAsString() { byte input[] = "hello world".getBytes(); String expected = "aGVsbG8gd29ybGQ="; assertEquals(expected, encoder.encode(input)); assertByteArrayEquals(input, encoder.decode(expected)); } public void testWrapsLinesAt76Chars() { byte input[] = ("hello world. hello world. hello world. hello world. hello world. hello world. hello world. " + "hello world. hello world. hello world. hello world. hello world. hello world. hello world. ").getBytes(); String expected = "aGVsbG8gd29ybGQuIGhlbGxvIHdvcmxkLiBoZWxsbyB3b3JsZC4gaGVsbG8gd29ybGQuIGhlbGxv\n" + "IHdvcmxkLiBoZWxsbyB3b3JsZC4gaGVsbG8gd29ybGQuIGhlbGxvIHdvcmxkLiBoZWxsbyB3b3Js\n" + "ZC4gaGVsbG8gd29ybGQuIGhlbGxvIHdvcmxkLiBoZWxsbyB3b3JsZC4gaGVsbG8gd29ybGQuIGhl\n" + "bGxvIHdvcmxkLiA="; assertEquals(expected, encoder.encode(input)); assertByteArrayEquals(input, encoder.decode(expected)); } public void testPadsSingleMissingByteWhenNotMultipleOfThree() { byte input[] = { 1, 2, 3, 4, 5 }; String expected = "AQIDBAU="; assertEquals(expected, encoder.encode(input)); assertByteArrayEquals(input, encoder.decode(expected)); } public void testPadsDoubleMissingByteWhenNotMultipleOfThree() { byte input[] = { 1, 2, 3, 4 }; String expected = "AQIDBA=="; assertEquals(expected, encoder.encode(input)); assertByteArrayEquals(input, encoder.decode(expected)); } public void testDoesNotPadWhenMultipleOfThree() { byte input[] = { 1, 2, 3, 4, 5, 6 }; String expected = "AQIDBAUG"; assertEquals(expected, encoder.encode(input)); assertByteArrayEquals(input, encoder.decode(expected)); } public void testHandlesAllPositiveBytes() { byte input[] = new byte[127]; for (int i = 0; i < 126; i++) input[i] = (byte) (i + 1); String expected = "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5\n" + "Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFy\n" + "c3R1dnd4eXp7fH1+AA=="; assertEquals(expected, encoder.encode(input)); assertByteArrayEquals(input, encoder.decode(expected)); } public void testHandlesAllNegativeBytes() { byte input[] = new byte[128]; for (int i = 0; i < 127; i++) input[i] = (byte) (-1 - i); String expected = "//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjH\n" + "xsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+O\n" + "jYyLiomIh4aFhIOCgQA="; assertEquals(expected, encoder.encode(input)); assertByteArrayEquals(input, encoder.decode(expected)); } public void testHandlesZeroByte() { byte input[] = { 0, 0, 0, 0 }; String expected = "AAAAAA=="; assertEquals(expected, encoder.encode(input)); assertByteArrayEquals(input, encoder.decode(expected)); } public void testProducesEmptyStringWhenNoBytesGiven() { byte input[] = new byte[0]; String expected = ""; assertEquals(expected, encoder.encode(input)); assertByteArrayEquals(input, encoder.decode(expected)); } }