/*
* The MIT License (MIT)
*
* Copyright (c) 2007-2015 Broad Institute
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package biz.source_code.base64Coder;
// Tests for the Base64Coder class.
import java.util.Random;
import static org.junit.Assert.fail;
import org.junit.Test;
public class TestBase64Coder {
// Test Base64Coder with constant strings.
@Test
public void test1() {
check("Aladdin:open sesame", "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="); // example from RFC 2617
check("", "");
check("1", "MQ==");
check("22", "MjI=");
check("333", "MzMz");
check("4444", "NDQ0NA==");
check("55555", "NTU1NTU=");
check("abc:def", "YWJjOmRlZg==");
}
private static void check(String plainText, String base64Text) {
String s1 = Base64Coder.encodeString(plainText);
String s2 = Base64Coder.decodeString(base64Text);
if (!s1.equals(base64Text) || !s2.equals(plainText))
fail("Check failed for \"" + plainText + "\" / \"" + base64Text + "\".");
}
// THE TESTS BELOW ARE COMMENTED OUT BECAUSE NOT ALL PLATFORMS HAVE THE SUN PACKAGE.
// Test Base64Coder against sun.misc.BASE64Encoder/Decoder with random data.
// Line length below 76.
// @Test
// public void test2() throws Exception {
// final int maxLineLen = 76 - 1; // the Sun encoder adds a CR/LF when a line is longer
// final int maxDataBlockLen = (maxLineLen * 3) / 4;
// sun.misc.BASE64Encoder sunEncoder = new sun.misc.BASE64Encoder();
// sun.misc.BASE64Decoder sunDecoder = new sun.misc.BASE64Decoder();
// Random rnd = new Random(0x538afb92);
// for (int i = 0; i < 50000; i++) {
// int len = rnd.nextInt(maxDataBlockLen + 1);
// byte[] b0 = new byte[len];
// rnd.nextBytes(b0);
// String e1 = new String(Base64Coder.encode(b0));
// String e2 = sunEncoder.encode(b0);
// assertEquals(e2, e1);
// byte[] b1 = Base64Coder.decode(e1);
// byte[] b2 = sunDecoder.decodeBuffer(e2);
// assertArrayEquals(b0, b1);
// assertArrayEquals(b0, b2);
// }
// }
//
// // Test Base64Coder line encoding/decoding against sun.misc.BASE64Encoder/Decoder
//// with random data.
// @Test
// public void test3() throws Exception {
// final int maxDataBlockLen = 512;
// sun.misc.BASE64Encoder sunEncoder = new sun.misc.BASE64Encoder();
// sun.misc.BASE64Decoder sunDecoder = new sun.misc.BASE64Decoder();
// Random rnd = new Random(0x39ac7d6e);
// for (int i = 0; i < 10000; i++) {
// int len = rnd.nextInt(maxDataBlockLen + 1);
// byte[] b0 = new byte[len];
// rnd.nextBytes(b0);
// String e1 = new String(Base64Coder.encodeLines(b0));
// String e2 = sunEncoder.encodeBuffer(b0);
// assertEquals(e2, e1);
// byte[] b1 = Base64Coder.decodeLines(e1);
// byte[] b2 = sunDecoder.decodeBuffer(e2);
// assertArrayEquals(b0, b1);
// assertArrayEquals(b0, b2);
// }
// }
//
//
// @Test
// public void test4() throws Exception {
// final int maxDataBlockLen = 512;
// sun.misc.BASE64Encoder sunEncoder = new sun.misc.BASE64Encoder();
// sun.misc.BASE64Decoder sunDecoder = new sun.misc.BASE64Decoder();
// Random rnd = new Random(0x39ac7d6e);
// for (int i = 0; i < 10000; i++) {
// int len = rnd.nextInt(maxDataBlockLen + 1);
// byte[] b0 = new byte[len];
// rnd.nextBytes(b0);
// String e1 = (new String(Base64Coder.encodeLines(b0))).trim();
// String e2 = sunEncoder.encode(b0).trim();
// assertEquals(e2, e1);
// byte[] b1 = Base64Coder.decodeLines(e1);
// byte[] b2 = sunDecoder.decodeBuffer(e2);
// assertArrayEquals(b0, b1);
// assertArrayEquals(b0, b2);
// }
// }
} // end class TestBase64Coder