/*
* Copyright 2014, The Sporting Exchange Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.betfair.cougar.util.stream;
import java.io.ByteArrayOutputStream;
import junit.framework.TestCase;
public class ByteCountingOutputStreamTest extends TestCase {
private byte[] source = "ABCDESGHIJKLMNOPQRSTUVWXYZ".getBytes();
private ByteArrayOutputStream destination = new ByteArrayOutputStream();
public void testWriteSingleCount() throws Exception {
ByteCountingOutputStream bcos = new ByteCountingOutputStream(destination);
int bytesWritten = 0;
for (int i = 0; i < source.length; i++) {
bcos.write(source[i]);
assertEquals(++bytesWritten, bcos.getCount());
}
assertEquals(source.length, bcos.getCount());
int count=0;
for (byte b: source) {
assertEquals(destination.toByteArray()[count++], b);
}
}
public void testWriteFullArray() throws Exception {
ByteCountingOutputStream bcos = new ByteCountingOutputStream(destination);
int bytesWritten = 0;
int numberToCopy = 8;
for (int i = 0; i < source.length; i+=numberToCopy) {
if (numberToCopy + i > source.length) {
numberToCopy = source.length - i;
}
byte[] src = new byte[numberToCopy];
System.arraycopy(source, i, src, 0, numberToCopy);
bcos.write(src);
bytesWritten += numberToCopy;
assertEquals(bytesWritten, bcos.getCount());
}
assertEquals(source.length, bcos.getCount());
int count=0;
for (byte b: source) {
assertEquals(destination.toByteArray()[count++], b);
}
}
public void testWritePartArray() throws Exception {
ByteCountingOutputStream bcos = new ByteCountingOutputStream(destination);
int bytesWritten = 0;
int numberToCopy = 5;
for (int i = 0; i < source.length; i+=numberToCopy) {
byte[] src = new byte[8];
if (numberToCopy + i > source.length) {
numberToCopy = source.length - i;
}
System.arraycopy(source, i, src, 1, numberToCopy);
bcos.write(src, 1, numberToCopy);
bytesWritten += numberToCopy;
assertEquals(bytesWritten, bcos.getCount());
}
assertEquals(source.length, bcos.getCount());
int count=0;
for (byte b: source) {
assertEquals(destination.toByteArray()[count++], b);
}
}
}