/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.kernel.io.unsync;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Shuyang Zhou
*/
public class UnsyncByteArrayOutputStreamTest {
@Test
public void testBlockWrite() {
UnsyncByteArrayOutputStream unsyncByteArrayOutputStream =
new UnsyncByteArrayOutputStream();
unsyncByteArrayOutputStream.write(_BUFFER);
Assert.assertEquals(_BUFFER_SIZE, unsyncByteArrayOutputStream.size());
Assert.assertTrue(
Arrays.equals(_BUFFER, unsyncByteArrayOutputStream.toByteArray()));
}
@Test
public void testConstructor() {
UnsyncByteArrayOutputStream unsyncByteArrayOutputStream =
new UnsyncByteArrayOutputStream();
Assert.assertEquals(0, unsyncByteArrayOutputStream.size());
unsyncByteArrayOutputStream = new UnsyncByteArrayOutputStream(64);
Assert.assertEquals(0, unsyncByteArrayOutputStream.size());
}
@Test
public void testSizeAndReset() {
UnsyncByteArrayOutputStream unsyncByteArrayOutputStream =
new UnsyncByteArrayOutputStream();
Assert.assertEquals(0, unsyncByteArrayOutputStream.size());
unsyncByteArrayOutputStream.write(0);
Assert.assertEquals(1, unsyncByteArrayOutputStream.size());
unsyncByteArrayOutputStream.write(1);
Assert.assertEquals(2, unsyncByteArrayOutputStream.size());
unsyncByteArrayOutputStream.reset();
Assert.assertEquals(0, unsyncByteArrayOutputStream.size());
unsyncByteArrayOutputStream.write(0);
Assert.assertEquals(1, unsyncByteArrayOutputStream.size());
unsyncByteArrayOutputStream.write(1);
Assert.assertEquals(2, unsyncByteArrayOutputStream.size());
}
@Test
public void testToByteArray() {
UnsyncByteArrayOutputStream unsyncByteArrayOutputStream =
new UnsyncByteArrayOutputStream();
unsyncByteArrayOutputStream.write(_BUFFER);
byte[] bytes1 = unsyncByteArrayOutputStream.toByteArray();
Assert.assertTrue(Arrays.equals(_BUFFER, bytes1));
byte[] bytes2 = unsyncByteArrayOutputStream.toByteArray();
Assert.assertTrue(Arrays.equals(_BUFFER, bytes2));
Assert.assertNotSame(bytes1, bytes2);
}
@Test
public void testToString() throws UnsupportedEncodingException {
UnsyncByteArrayOutputStream unsyncByteArrayOutputStream =
new UnsyncByteArrayOutputStream();
unsyncByteArrayOutputStream.write(_BUFFER);
Assert.assertEquals(
new String(_BUFFER), unsyncByteArrayOutputStream.toString());
String charsetName1 = "UTF-16BE";
String charsetName2 = "UTF-16LE";
Assert.assertFalse(
new String(_BUFFER, charsetName1).equals(
unsyncByteArrayOutputStream.toString(charsetName2)));
Assert.assertEquals(
new String(_BUFFER, charsetName1),
unsyncByteArrayOutputStream.toString(charsetName1));
Assert.assertEquals(
new String(_BUFFER, charsetName2),
unsyncByteArrayOutputStream.toString(charsetName2));
}
@Test
public void testUnsafeGetByteArray() {
UnsyncByteArrayOutputStream unsyncByteArrayOutputStream =
new UnsyncByteArrayOutputStream();
unsyncByteArrayOutputStream.write(_BUFFER);
byte[] bytes1 = unsyncByteArrayOutputStream.unsafeGetByteArray();
Assert.assertTrue(Arrays.equals(_BUFFER, bytes1));
Assert.assertSame(unsyncByteArrayOutputStream.buffer, bytes1);
byte[] bytes2 = unsyncByteArrayOutputStream.unsafeGetByteArray();
Assert.assertTrue(Arrays.equals(_BUFFER, bytes2));
Assert.assertSame(bytes1, bytes2);
}
@Test
public void testWrite() {
UnsyncByteArrayOutputStream unsyncByteArrayOutputStream =
new UnsyncByteArrayOutputStream();
for (int i = 0; i < _BUFFER_SIZE; i++) {
unsyncByteArrayOutputStream.write(i);
Assert.assertEquals(i + 1, unsyncByteArrayOutputStream.size());
}
Assert.assertTrue(
Arrays.equals(_BUFFER, unsyncByteArrayOutputStream.toByteArray()));
}
@Test
public void testWriteTo() throws IOException {
UnsyncByteArrayOutputStream unsyncByteArrayOutputStream =
new UnsyncByteArrayOutputStream();
unsyncByteArrayOutputStream.write(_BUFFER);
ByteArrayOutputStream byteArrayOutputStream =
new ByteArrayOutputStream();
unsyncByteArrayOutputStream.writeTo(byteArrayOutputStream);
Assert.assertTrue(
Arrays.equals(_BUFFER, byteArrayOutputStream.toByteArray()));
}
private static final byte[] _BUFFER =
new byte[UnsyncByteArrayOutputStreamTest._BUFFER_SIZE];
private static final int _BUFFER_SIZE = 64;
static {
for (int i = 0; i < _BUFFER_SIZE; i++) {
_BUFFER[i] = (byte)i;
}
}
}