/**
* 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.IOException;
import java.io.StringWriter;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Shuyang Zhou
*/
public class UnsyncBufferedWriterTest {
@Test
public void testBlockWrite() throws IOException {
StringWriter stringWriter = new StringWriter();
UnsyncBufferedWriter unsyncBufferedWriter = new UnsyncBufferedWriter(
stringWriter, 3);
// Normal
unsyncBufferedWriter.write("ab".toCharArray());
Assert.assertEquals(2, unsyncBufferedWriter.count);
Assert.assertEquals('a', unsyncBufferedWriter.buffer[0]);
Assert.assertEquals('b', unsyncBufferedWriter.buffer[1]);
Assert.assertEquals(0, stringWriter.getBuffer().length());
// Auto flush
unsyncBufferedWriter.write("cd".toCharArray());
Assert.assertEquals(2, unsyncBufferedWriter.count);
Assert.assertEquals('c', unsyncBufferedWriter.buffer[0]);
Assert.assertEquals('d', unsyncBufferedWriter.buffer[1]);
Assert.assertEquals(2, stringWriter.getBuffer().length());
Assert.assertEquals("ab", stringWriter.getBuffer().toString());
// Direct with auto flush
unsyncBufferedWriter.write("efg".toCharArray());
Assert.assertEquals(0, unsyncBufferedWriter.count);
Assert.assertEquals(7, stringWriter.getBuffer().length());
Assert.assertEquals("abcdefg", stringWriter.getBuffer().toString());
// Direct without auto flush
unsyncBufferedWriter.write("hij".toCharArray());
Assert.assertEquals(0, unsyncBufferedWriter.count);
Assert.assertEquals(10, stringWriter.getBuffer().length());
Assert.assertEquals("abcdefghij", stringWriter.getBuffer().toString());
}
@Test
public void testClose() throws IOException {
UnsyncBufferedWriter unsyncBufferedWriter = new UnsyncBufferedWriter(
new StringWriter());
Assert.assertNotNull(unsyncBufferedWriter.buffer);
Assert.assertNotNull(unsyncBufferedWriter.writer);
unsyncBufferedWriter.close();
Assert.assertNull(unsyncBufferedWriter.buffer);
Assert.assertNull(unsyncBufferedWriter.writer);
try {
unsyncBufferedWriter.flush();
Assert.fail();
}
catch (IOException ioe) {
}
try {
unsyncBufferedWriter.write("abc".toCharArray(), 0, 3);
Assert.fail();
}
catch (IOException ioe) {
}
try {
unsyncBufferedWriter.write(1);
Assert.fail();
}
catch (IOException ioe) {
}
try {
unsyncBufferedWriter.write("abc", 0, 3);
Assert.fail();
}
catch (IOException ioe) {
}
}
@Test
public void testConstructor() {
UnsyncBufferedWriter unsyncBufferedWriter = new UnsyncBufferedWriter(
new StringWriter());
Assert.assertEquals(8192, unsyncBufferedWriter.buffer.length);
Assert.assertEquals(0, unsyncBufferedWriter.count);
unsyncBufferedWriter = new UnsyncBufferedWriter(new StringWriter(), 10);
Assert.assertEquals(10, unsyncBufferedWriter.buffer.length);
Assert.assertEquals(0, unsyncBufferedWriter.count);
}
@Test
public void testNewLine() throws IOException {
StringWriter stringWriter = new StringWriter();
UnsyncBufferedWriter unsyncBufferedWriter = new UnsyncBufferedWriter(
stringWriter, 10);
unsyncBufferedWriter.newLine();
String lineSeparator = System.getProperty("line.separator");
Assert.assertEquals(lineSeparator.length(), unsyncBufferedWriter.count);
unsyncBufferedWriter.write('a');
Assert.assertEquals(
lineSeparator.length() + 1, unsyncBufferedWriter.count);
unsyncBufferedWriter.newLine();
Assert.assertEquals(
lineSeparator.length() * 2 + 1, unsyncBufferedWriter.count);
unsyncBufferedWriter.flush();
Assert.assertEquals(
lineSeparator + "a" + lineSeparator, stringWriter.toString());
}
@Test
public void testStringWrite() throws IOException {
StringWriter stringWriter = new StringWriter();
UnsyncBufferedWriter unsyncBufferedWriter = new UnsyncBufferedWriter(
stringWriter, 3);
// Normal
unsyncBufferedWriter.write("ab");
Assert.assertEquals(2, unsyncBufferedWriter.count);
Assert.assertEquals('a', unsyncBufferedWriter.buffer[0]);
Assert.assertEquals('b', unsyncBufferedWriter.buffer[1]);
Assert.assertEquals(0, stringWriter.getBuffer().length());
// Auto flush
unsyncBufferedWriter.write("cd");
Assert.assertEquals(1, unsyncBufferedWriter.count);
Assert.assertEquals('d', unsyncBufferedWriter.buffer[0]);
Assert.assertEquals(3, stringWriter.getBuffer().length());
Assert.assertEquals("abc", stringWriter.getBuffer().toString());
// Cycle
unsyncBufferedWriter.write("efghi".toCharArray());
Assert.assertEquals(0, unsyncBufferedWriter.count);
Assert.assertEquals(9, stringWriter.getBuffer().length());
Assert.assertEquals("abcdefghi", stringWriter.getBuffer().toString());
}
@Test
public void testWrite() throws IOException {
StringWriter stringWriter = new StringWriter();
UnsyncBufferedWriter unsyncBufferedWriter = new UnsyncBufferedWriter(
stringWriter, 3);
// Normal
unsyncBufferedWriter.write('a');
Assert.assertEquals(1, unsyncBufferedWriter.count);
Assert.assertEquals('a', unsyncBufferedWriter.buffer[0]);
Assert.assertEquals(0, stringWriter.getBuffer().length());
unsyncBufferedWriter.write('b');
Assert.assertEquals(2, unsyncBufferedWriter.count);
Assert.assertEquals('b', unsyncBufferedWriter.buffer[1]);
Assert.assertEquals(0, stringWriter.getBuffer().length());
unsyncBufferedWriter.write('c');
Assert.assertEquals(3, unsyncBufferedWriter.count);
Assert.assertEquals('c', unsyncBufferedWriter.buffer[2]);
Assert.assertEquals(0, stringWriter.getBuffer().length());
// Auto flush
unsyncBufferedWriter.write('d');
Assert.assertEquals(1, unsyncBufferedWriter.count);
Assert.assertEquals('d', unsyncBufferedWriter.buffer[0]);
Assert.assertEquals(3, stringWriter.getBuffer().length());
Assert.assertEquals("abc", stringWriter.getBuffer().toString());
}
}