/* See LICENSE for licensing and NOTICE for copyright. */ package org.cryptacular.codec; import java.nio.ByteBuffer; import java.nio.CharBuffer; import org.cryptacular.FailListener; import org.cryptacular.util.ByteUtil; import org.cryptacular.util.CodecUtil; import org.testng.annotations.DataProvider; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; /** * Unit test for {@link Base64Decoder}. * * @author Middleware Services */ @Listeners(FailListener.class) public class Base32DecoderTest { @DataProvider(name = "encoded-data") public Object[][] getEncodedData() { return new Object[][] { // Multiple of 40 bits new Object[] { new Base32Decoder(), "TQSN7XJ4", CodecUtil.hex("9c24dfdd3c"), }, // Final quantum of encoding input is exactly 8 bits new Object[] { new Base32Decoder(), "43H7CNN2EI======", CodecUtil.hex("e6cff135ba22"), }, // Final quantum of encoding input is exactly 16 bits new Object[] { new Base32Decoder(), "2NEK2FDJHXDQ====", CodecUtil.hex("d348ad14693dc7"), }, // Final quantum of encoding input is exactly 24 bits new Object[] { new Base32Decoder(), "LVVECZIT6F3MU===", CodecUtil.hex("5d6a416513f176ca"), }, // Final quantum of encoding input is exactly 32 bits new Object[] { new Base32Decoder(), "QN5Z7HN4PBY4G5Q=", CodecUtil.hex("837b9f9dbc7871c376"), }, }; } @Test(dataProvider = "encoded-data") public void testDecode(final Base32Decoder decoder, final String data, final byte[] expected) throws Exception { final CharBuffer input = CharBuffer.wrap(data); final ByteBuffer output = ByteBuffer.allocate(decoder.outputSize(input.length())); decoder.decode(input, output); decoder.finalize(output); output.flip(); assertEquals(ByteUtil.toArray(output), expected); } }