| package com.fasterxml.jackson.core.base64; |
| |
| import org.junit.Assert; |
| |
| import com.fasterxml.jackson.core.*; |
| |
| public class Base64CodecTest |
| extends com.fasterxml.jackson.core.BaseTest |
| { |
| public void testVariantAccess() |
| { |
| for (Base64Variant var : new Base64Variant[] { |
| Base64Variants.MIME, |
| Base64Variants.MIME_NO_LINEFEEDS, |
| Base64Variants.MODIFIED_FOR_URL, |
| Base64Variants.PEM |
| }) { |
| assertSame(var, Base64Variants.valueOf(var.getName())); |
| } |
| |
| try { |
| Base64Variants.valueOf("foobar"); |
| fail("Should not pass"); |
| } catch (IllegalArgumentException e) { |
| verifyException(e, "No Base64Variant with name 'foobar'"); |
| } |
| } |
| |
| public void testProps() |
| { |
| Base64Variant std = Base64Variants.MIME; |
| // let's verify basic props of std cocec |
| assertEquals("MIME", std.getName()); |
| assertEquals("MIME", std.toString()); |
| assertTrue(std.usesPadding()); |
| assertFalse(std.usesPaddingChar('X')); |
| assertEquals('=', std.getPaddingChar()); |
| assertTrue(std.usesPaddingChar('=')); |
| assertEquals((byte) '=', std.getPaddingByte()); |
| assertEquals(76, std.getMaxLineLength()); |
| } |
| |
| public void testCharEncoding() throws Exception |
| { |
| Base64Variant std = Base64Variants.MIME; |
| assertEquals(Base64Variant.BASE64_VALUE_INVALID, std.decodeBase64Char('?')); |
| assertEquals(Base64Variant.BASE64_VALUE_INVALID, std.decodeBase64Char((int) '?')); |
| assertEquals(Base64Variant.BASE64_VALUE_INVALID, std.decodeBase64Char((char) 0xA0)); |
| assertEquals(Base64Variant.BASE64_VALUE_INVALID, std.decodeBase64Char(0xA0)); |
| |
| assertEquals(Base64Variant.BASE64_VALUE_INVALID, std.decodeBase64Byte((byte) '?')); |
| assertEquals(Base64Variant.BASE64_VALUE_INVALID, std.decodeBase64Byte((byte) 0xA0)); |
| |
| assertEquals(0, std.decodeBase64Char('A')); |
| assertEquals(1, std.decodeBase64Char((int) 'B')); |
| assertEquals(2, std.decodeBase64Char((byte)'C')); |
| |
| assertEquals(0, std.decodeBase64Byte((byte) 'A')); |
| assertEquals(1, std.decodeBase64Byte((byte) 'B')); |
| assertEquals(2, std.decodeBase64Byte((byte)'C')); |
| |
| assertEquals('/', std.encodeBase64BitsAsChar(63)); |
| assertEquals((byte) 'b', std.encodeBase64BitsAsByte(27)); |
| |
| String EXP_STR = "HwdJ"; |
| int TRIPLET = 0x1F0749; |
| StringBuilder sb = new StringBuilder(); |
| std.encodeBase64Chunk(sb, TRIPLET); |
| assertEquals(EXP_STR, sb.toString()); |
| |
| byte[] exp = EXP_STR.getBytes("UTF-8"); |
| byte[] act = new byte[exp.length]; |
| std.encodeBase64Chunk(TRIPLET, act, 0); |
| Assert.assertArrayEquals(exp, act); |
| } |
| |
| public void testConvenienceMethods() throws Exception |
| { |
| Base64Variant std = Base64Variants.MIME; |
| |
| byte[] input = new byte[] { 1, 2, 34, 127, -1 }; |
| String encoded = std.encode(input, false); |
| byte[] decoded = std.decode(encoded); |
| Assert.assertArrayEquals(input, decoded); |
| |
| assertEquals(quote(encoded), std.encode(input, true)); |
| } |
| |
| @SuppressWarnings("unused") |
| public void testErrors() throws Exception |
| { |
| try { |
| Base64Variant b = new Base64Variant("foobar", "xyz", false, '!', 24); |
| fail("Should not pass"); |
| } catch (IllegalArgumentException iae) { |
| verifyException(iae, "length must be exactly"); |
| } |
| |
| try { |
| Base64Variants.MIME.decode("!@##@%$#%&*^(&)(*"); |
| fail("Should not pass"); |
| } catch (IllegalArgumentException iae) { |
| verifyException(iae, "Illegal character"); |
| } |
| } |
| } |