Base64VariantTest.java

package tools.jackson.core.unittest;

import org.junit.jupiter.api.Test;

import tools.jackson.core.Base64Variant;
import tools.jackson.core.util.BufferRecycler;
import tools.jackson.core.util.ByteArrayBuilder;

import static org.junit.jupiter.api.Assertions.*;

/**
 * Unit tests for class {@link Base64Variant}.
 *
 * @see Base64Variant
 */
@SuppressWarnings("resource")
public class Base64VariantTest extends JacksonCoreTestBase
{
    @Test
    public void testDecodeTaking2ArgumentsThrowsIllegalArgumentException() {
        Base64Variant base64Variant = new Base64Variant("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                false,
                'x',
                'x');

        assertEquals(120, base64Variant.getMaxLineLength());
        assertEquals("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", base64Variant.toString());
        assertFalse(base64Variant.usesPadding());
        assertEquals("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", base64Variant.getName());
        assertEquals((byte) 120, base64Variant.getPaddingByte());
        assertEquals('x', base64Variant.getPaddingChar());

        ByteArrayBuilder byteArrayBuilder = new ByteArrayBuilder();

        try {
            base64Variant.decode("-%8en$9m=>$m", byteArrayBuilder);
            fail("Expecting exception: IllegalArgumentException");
        } catch (IllegalArgumentException e) {
            assertEquals(Base64Variant.class.getName(), e.getStackTrace()[0].getClassName());
        }
    }

    @Test
    public void test_reportInvalidBase64ThrowsIllegalArgumentException() {
        Base64Variant base64Variant = new Base64Variant("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                false,
                'L',
                3);

        assertEquals("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", base64Variant.getName());
        assertFalse(base64Variant.usesPadding());
        assertEquals("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", base64Variant.toString());
        assertEquals((byte) 76, base64Variant.getPaddingByte());
        assertEquals(3, base64Variant.getMaxLineLength());
        assertEquals('L', base64Variant.getPaddingChar());
    }

    @Test
    public void testEquals() {
        Base64Variant base64Variant = new Base64Variant("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                true,
                ':',
                ':');

        Object bogus = new BufferRecycler();
        assertFalse(base64Variant.equals(bogus));
        assertTrue(base64Variant.equals(base64Variant));

    }

    @Test
    public void testDecodeTaking2ArgumentsOne() {
        Base64Variant base64Variant = new Base64Variant("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                false,
                'R',
                4);
        BufferRecycler bufferRecycler = new BufferRecycler();
        ByteArrayBuilder byteArrayBuilder = new ByteArrayBuilder(bufferRecycler);

        base64Variant.decode("PEM", byteArrayBuilder);

        assertFalse(base64Variant.usesPadding());
        assertEquals('R', base64Variant.getPaddingChar());
        assertEquals(4, base64Variant.getMaxLineLength());
        assertEquals("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", base64Variant.toString());
        assertEquals("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", base64Variant.getName());
        assertEquals((byte) 82, base64Variant.getPaddingByte());
    }

    @Test
    public void testEncodeTaking2ArgumentsWithTrue() {
        Base64Variant base64Variant = new Base64Variant("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                false,
                'L',
                3);
        byte[] byteArray = new byte[9];
        String encoded = base64Variant.encode(byteArray, true);

        assertArrayEquals(new byte[]{(byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0}, byteArray);
        assertEquals("\"AAAA\\nAAAA\\nAAAA\\n\"", encoded);
    }
}