package org.marketcetera.util.unicode; import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.CharBuffer; import org.apache.commons.lang.ArrayUtils; import org.junit.Test; import org.marketcetera.util.file.CloseableRegistry; import org.marketcetera.util.file.InputStreamWrapper; import org.marketcetera.util.file.ReaderWrapper; import org.marketcetera.util.test.TestCaseBase; import static org.junit.Assert.*; import static org.marketcetera.util.test.UnicodeData.*; /** * @author tlerios@marketcetera.com * @since 0.6.0 * @version $Id: ReaderTest.java 16154 2012-07-14 16:34:05Z colin $ */ /* $License$ */ public class ReaderTest extends TestCaseBase { @Test public void regularReader() throws Exception { CloseableRegistry r=new CloseableRegistry(); try { ByteArrayInputStream is=new ByteArrayInputStream(HELLO_EN_NAT); r.register(new InputStreamWrapper(is)); UnicodeInputStreamReader reader= new UnicodeInputStreamReader(is); r.register(new ReaderWrapper(reader)); assertNull(reader.getDecodingStrategy()); assertNull(reader.getRequestedSignatureCharset()); assertNull(reader.getSignatureCharset()); assertTrue(reader.ready()); assertFalse(reader.markSupported()); try { reader.mark(0); fail(); } catch (IOException ex) { // Desired. } try { reader.reset(); fail(); } catch (IOException ex) { // Desired. } assertEquals(HELLO_EN.charAt(0),reader.read()); assertEquals(1,reader.skip(1)); char[] charArray=new char[1]; assertEquals(1,reader.read(charArray)); assertEquals(HELLO_EN.charAt(2),charArray[0]); charArray=new char[3]; assertEquals(1,reader.read(charArray,1,1)); assertEquals(HELLO_EN.charAt(3),charArray[1]); CharBuffer charBuffer=CharBuffer.allocate(10); assertEquals(1,reader.read(charBuffer)); assertEquals(HELLO_EN.charAt(4),charBuffer.get(0)); assertEquals(-1,reader.read()); assertEquals(-1,reader.read(charArray)); assertEquals(-1,reader.read(charArray,1,1)); assertEquals(-1,reader.read(charBuffer)); assertFalse(reader.ready()); reader.close(); reader.close(); // Ensure that close() has closed the stream, by trying to // read from the reader: this is not testing whether // read() fails; it tests whether close() worked. try { reader.read(); fail(); } catch (IOException ex) { // Desired. } try { reader.ready(); fail(); } catch (IOException ex) { // Desired. } } finally { r.close(); } } @Test public void emptyReader() throws Exception { CloseableRegistry r=new CloseableRegistry(); r=new CloseableRegistry(); try { ByteArrayInputStream is=new ByteArrayInputStream (ArrayUtils.EMPTY_BYTE_ARRAY); r.register(new InputStreamWrapper(is)); UnicodeInputStreamReader reader= new UnicodeInputStreamReader(is); r.register(new ReaderWrapper(reader)); assertNull(reader.getDecodingStrategy()); assertNull(reader.getRequestedSignatureCharset()); assertNull(reader.getSignatureCharset()); assertFalse(reader.ready()); assertFalse(reader.markSupported()); try { reader.mark(0); fail(); } catch (IOException ex) { // Desired. } try { reader.reset(); fail(); } catch (IOException ex) { // Desired. } assertEquals(-1,reader.read()); char[] charArray=new char[1]; assertEquals(-1,reader.read(charArray)); charArray=new char[3]; assertEquals(-1,reader.read(charArray,1,1)); CharBuffer charBuffer=CharBuffer.allocate(10); assertEquals(-1,reader.read(charBuffer)); reader.close(); reader.close(); // Ensure that close() has closed the stream, by trying to // read from the reader: this is not testing whether // read() fails; it tests whether close() worked. try { reader.read(); fail(); } catch (IOException ex) { // Desired. } try { reader.ready(); fail(); } catch (IOException ex) { // Desired. } } finally { r.close(); } } }