package com.twelvemonkeys.io.enc;

import org.junit.Test;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import static org.junit.Assert.*;

/**
 * Base64EncoderTest
 * <p/>
 *
 * @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a>
 * @version $Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/test/java/com/twelvemonkeys/io/enc/Base64EncoderTestCase.java#1 $
 */
public class Base64EncoderTestCase extends EncoderAbstractTestCase {

    protected Encoder createEncoder() {
        return new Base64Encoder();
    }

    protected Decoder createCompatibleDecoder() {
        return new Base64Decoder();
    }

    @Test
    public void testEmptyEncode() throws IOException {
        String data = "";

        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        OutputStream out = new EncoderStream(bytes, createEncoder(), true);
        out.write(data.getBytes());

        assertEquals("Strings does not match", "", new String(bytes.toByteArray()));
    }

    @Test
    public void testShortEncode() throws IOException {
        String data = "test";

        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        OutputStream out = new EncoderStream(bytes, createEncoder(), true);
        out.write(data.getBytes());

        assertEquals("Strings does not match", "dGVzdA==", new String(bytes.toByteArray()));
    }

    @Test
    public void testLongEncode() throws IOException {
        String data = "Lorem ipsum dolor sit amet, consectetuer adipiscing " +
                "elit. Fusce est. Morbi luctus consectetuer justo. Vivamus " +
                "dapibus laoreet purus. Nunc viverra dictum nisl. Integer " +
                "ullamcorper, nisi in dictum amet.";

        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        OutputStream out = new EncoderStream(bytes, createEncoder(), true);
        out.write(data.getBytes());

        assertEquals("Strings does not match",
                     "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuIEZ1" +
                    "c2NlIGVzdC4gTW9yYmkgbHVjdHVzIGNvbnNlY3RldHVlciBqdXN0by4gVml2YW11cyBkYXBpYnVzIGxh" +
                    "b3JlZXQgcHVydXMuIE51bmMgdml2ZXJyYSBkaWN0dW0gbmlzbC4gSW50ZWdlciB1bGxhbWNvcnBlciwg" +
                    "bmlzaSBpbiBkaWN0dW0gYW1ldC4=",
                     new String(bytes.toByteArray()));
    }
}
