package org.marketcetera.util.file;
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.Reader;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.ArrayUtils;
import org.junit.Test;
import org.marketcetera.util.unicode.DecodingStrategy;
import org.marketcetera.util.unicode.Signature;
import static org.junit.Assert.*;
import static org.marketcetera.util.test.UnicodeData.*;
/**
* @author tlerios@marketcetera.com
* @since 0.5.0
* @version $Id: ReaderWrapperTest.java 16154 2012-07-14 16:34:05Z colin $
*/
/* $License$ */
public class ReaderWrapperTest
extends WrapperTestBase
{
private static final class CloseCounterReader
extends Reader
{
private int mClosures=0;
int getClosures()
{
return mClosures;
}
@Override
public int read
(char[] cbuf,
int off,
int len)
{
return 0;
}
@Override
public void close()
{
mClosures++;
}
}
@Test
public void basics()
throws Exception
{
CloseCounterReader counter=new CloseCounterReader();
ReaderWrapper out=new ReaderWrapper(counter);
assertEquals(0,counter.getClosures());
assertFalse(out.getSkipClose());
assertNotNull(out.getReader());
out.close();
assertEquals(1,counter.getClosures());
out.close();
assertEquals(1,counter.getClosures());
counter=new CloseCounterReader();
out=new ReaderWrapper(counter,true);
assertEquals(0,counter.getClosures());
assertTrue(out.getSkipClose());
assertNotNull(out.getReader());
out.close();
assertEquals(0,counter.getClosures());
out.close();
assertEquals(0,counter.getClosures());
}
@Test(expected=FileNotFoundException.class)
public void nonexistentFileReader()
throws Exception
{
new ReaderWrapper(TEST_NONEXISTENT_FILE);
}
@Override
protected void testStandardInputStream
(ByteArrayInputStream in)
throws Exception
{
CloseableRegistry r=new CloseableRegistry();
try {
ReaderWrapper wrapper=
new ReaderWrapper(SpecialNames.STANDARD_INPUT);
r.register(wrapper);
assertTrue(wrapper.getSkipClose());
assertNotNull(wrapper.getReader());
assertEquals(VALUE,IOUtils.toString(wrapper.getReader()));
} finally {
r.close();
}
}
private void testStandardInputStreamUnicode()
throws Exception
{
InputStream stdInSave=System.in;
CloseableRegistry r=new CloseableRegistry();
try {
ByteArrayInputStream stdIn=new ByteArrayInputStream
(ArrayUtils.addAll(Signature.UTF8.getMark(),COMBO_UTF8));
r.register(stdIn);
System.setIn(stdIn);
ReaderWrapper wrapper=
new ReaderWrapper(SpecialNames.STANDARD_INPUT,
DecodingStrategy.SIG_REQ);
r.register(wrapper);
assertTrue(wrapper.getSkipClose());
assertNotNull(wrapper.getReader());
assertEquals(COMBO,IOUtils.toString(wrapper.getReader()));
} finally {
System.setIn(stdInSave);
r.close();
}
}
@Test
public void wrappers()
throws Exception
{
testStandardInputStream();
testStandardInputStreamUnicode();
}
}