001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 *
017 */
018
019 package org.apache.commons.codec.binary;
020
021 import static org.junit.Assert.assertEquals;
022 import static org.junit.Assert.fail;
023
024 import java.util.Arrays;
025
026 import org.apache.commons.codec.Charsets;
027 import org.junit.Test;
028
029 public class Base32Test {
030
031 private static final String [][] BASE32_TEST_CASES = { // RFC 4648
032 {"" ,""},
033 {"f" ,"MY======"},
034 {"fo" ,"MZXQ===="},
035 {"foo" ,"MZXW6==="},
036 {"foob" ,"MZXW6YQ="},
037 {"fooba" ,"MZXW6YTB"},
038 {"foobar" ,"MZXW6YTBOI======"},
039 };
040
041 private static final String [][] BASE32HEX_TEST_CASES = { // RFC 4648
042 {"" ,""},
043 {"f" ,"CO======"},
044 {"fo" ,"CPNG===="},
045 {"foo" ,"CPNMU==="},
046 {"foob" ,"CPNMUOG="},
047 {"fooba" ,"CPNMUOJ1"},
048 {"foobar" ,"CPNMUOJ1E8======"},
049 };
050
051
052 private static final String [][] BASE32_TEST_CASES_CHUNKED = { //Chunked
053 {"" ,""},
054 {"f" ,"MY======\r\n"},
055 {"fo" ,"MZXQ====\r\n"},
056 {"foo" ,"MZXW6===\r\n"},
057 {"foob" ,"MZXW6YQ=\r\n"},
058 {"fooba" ,"MZXW6YTB\r\n"},
059 {"foobar" ,"MZXW6YTBOI======\r\n"},
060 };
061
062 @Test
063 public void testBase32Samples() throws Exception {
064 final Base32 codec = new Base32();
065 for (final String[] element : BASE32_TEST_CASES) {
066 assertEquals(element[1], codec.encodeAsString(element[0].getBytes(Charsets.UTF_8)));
067 }
068 }
069
070 @Test
071 public void testBase32HexSamples() throws Exception {
072 final Base32 codec = new Base32(true);
073 for (final String[] element : BASE32HEX_TEST_CASES) {
074 assertEquals(element[1], codec.encodeAsString(element[0].getBytes(Charsets.UTF_8)));
075 }
076 }
077
078 @Test
079 public void testBase32Chunked () throws Exception {
080 final Base32 codec = new Base32(20);
081 for (final String[] element : BASE32_TEST_CASES_CHUNKED) {
082 assertEquals(element[1], codec.encodeAsString(element[0].getBytes(Charsets.UTF_8)));
083 }
084 }
085
086 @Test
087 public void testSingleCharEncoding() {
088 for (int i = 0; i < 20; i++) {
089 Base32 codec = new Base32();
090 final BaseNCodec.Context context = new BaseNCodec.Context();
091 final byte unencoded[] = new byte[i];
092 final byte allInOne[] = codec.encode(unencoded);
093 codec = new Base32();
094 for (int j=0; j< unencoded.length; j++) {
095 codec.encode(unencoded, j, 1, context);
096 }
097 codec.encode(unencoded, 0, -1, context);
098 final byte singly[] = new byte[allInOne.length];
099 codec.readResults(singly, 0, 100, context);
100 if (!Arrays.equals(allInOne, singly)){
101 fail();
102 }
103 }
104 }
105
106 @Test
107 public void testRandomBytes() {
108 for (int i = 0; i < 20; i++) {
109 final Base32 codec = new Base32();
110 final byte[][] b = Base32TestData.randomData(codec, i);
111 assertEquals(""+i+" "+codec.lineLength,b[1].length,codec.getEncodedLength(b[0]));
112 //assertEquals(b[0],codec.decode(b[1]));
113 }
114 }
115
116 @Test
117 public void testRandomBytesChunked() {
118 for (int i = 0; i < 20; i++) {
119 final Base32 codec = new Base32(10);
120 final byte[][] b = Base32TestData.randomData(codec, i);
121 assertEquals(""+i+" "+codec.lineLength,b[1].length,codec.getEncodedLength(b[0]));
122 //assertEquals(b[0],codec.decode(b[1]));
123 }
124 }
125
126 @Test
127 public void testRandomBytesHex() {
128 for (int i = 0; i < 20; i++) {
129 final Base32 codec = new Base32(true);
130 final byte[][] b = Base32TestData.randomData(codec, i);
131 assertEquals(""+i+" "+codec.lineLength,b[1].length,codec.getEncodedLength(b[0]));
132 //assertEquals(b[0],codec.decode(b[1]));
133 }
134 }
135 }