Package freenet.support.io

Source Code of freenet.support.io.LineReadingInputStreamTest

/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.support.io;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import junit.framework.TestCase;

public class LineReadingInputStreamTest extends TestCase {
  public static final String BLOCK = "\ntesting1\ntesting2\r\ntesting3\n\n";
  public static final String[] LINES = new String[] {
    "",
    "testing1",
    "testing2",
    "testing3",
    ""
  };
 
  public static final String STRESSED_LINE = "\n\u0114\n";
  public static final String NULL_LINE = "a\u0000\u0000\u0000\u0000\n";
  public static final String LENGTH_CHECKING_LINE = "a\u0000a\n";
  public static final int LENGTH_CHECKING_LINE_LF = 3;
 
  public static final int MAX_LENGTH = 128;
  public static final int BUFFER_SIZE = 128;
 
  public void testReadLineWithoutMarking() throws Exception {
    // try utf8
    InputStream is = new ByteArrayInputStream(STRESSED_LINE.getBytes("utf-8"));
    LineReadingInputStream instance = new LineReadingInputStream(is);
    assertEquals("", instance.readLineWithoutMarking(MAX_LENGTH, BUFFER_SIZE, true));
    assertEquals("\u0114", instance.readLineWithoutMarking(MAX_LENGTH, BUFFER_SIZE, true));
    assertNull(instance.readLineWithoutMarking(MAX_LENGTH, BUFFER_SIZE, true));
   
    // try ISO-8859-1
    is = new ByteArrayInputStream(BLOCK.getBytes("ISO-8859-1"));
    instance = new LineReadingInputStream(is);
    for(String expectedLine : LINES) {
      assertEquals(expectedLine, instance.readLineWithoutMarking(MAX_LENGTH, BUFFER_SIZE, false));
    }
    assertNull(instance.readLineWithoutMarking(MAX_LENGTH, BUFFER_SIZE, false));
   
    // is it returning null?
    is = new MockInputStream();
    instance = new LineReadingInputStream(is);
    assertNull(instance.readLineWithoutMarking(0, BUFFER_SIZE, false));
    assertNull(instance.readLineWithoutMarking(0, 0, false));
   
    // is it throwing?
    is = new ByteArrayInputStream(LENGTH_CHECKING_LINE.getBytes());
    instance = new LineReadingInputStream(is);
    try {
      instance.readLineWithoutMarking(LENGTH_CHECKING_LINE_LF - 1, BUFFER_SIZE, true);
      fail();
    } catch (TooLongException e) {}
   
    // Same test shouldn't throw
    is = new ByteArrayInputStream(LENGTH_CHECKING_LINE.getBytes());
    instance = new LineReadingInputStream(is);
    assertEquals(LENGTH_CHECKING_LINE.substring(0, LENGTH_CHECKING_LINE_LF), instance.readLineWithoutMarking(LENGTH_CHECKING_LINE_LF, BUFFER_SIZE, true));
   
    // is it handling nulls properly? @see #2501
    is = new ByteArrayInputStream(NULL_LINE.getBytes());
    instance = new LineReadingInputStream(is);
    assertEquals(NULL_LINE.substring(0, 5), instance.readLineWithoutMarking(BUFFER_SIZE, 1, true));
  }
 
  public void testReadLine() throws Exception {
    // try utf8
    InputStream is = new ByteArrayInputStream(STRESSED_LINE.getBytes("utf-8"));
    LineReadingInputStream instance = new LineReadingInputStream(is);
    assertEquals("", instance.readLine(MAX_LENGTH, BUFFER_SIZE, true));
    assertEquals("\u0114", instance.readLine(MAX_LENGTH, BUFFER_SIZE, true));
    assertNull(instance.readLine(MAX_LENGTH, BUFFER_SIZE, true));
   
    // try ISO-8859-1
    is = new ByteArrayInputStream(BLOCK.getBytes("ISO-8859-1"));
    instance = new LineReadingInputStream(is);
    for(String expectedLine : LINES) {
      assertEquals(expectedLine, instance.readLine(MAX_LENGTH, BUFFER_SIZE, false));
    }
    assertNull(instance.readLine(MAX_LENGTH, BUFFER_SIZE, false));
   
    // is it returning null? and blocking when it should be?
    is = new MockInputStream();
    instance = new LineReadingInputStream(is);
    assertNull(instance.readLine(0, BUFFER_SIZE, false));
    assertNull(instance.readLine(0, 0, false));
   
    // is it throwing?
    is = new ByteArrayInputStream(LENGTH_CHECKING_LINE.getBytes());
    instance = new LineReadingInputStream(is);
    try {
      instance.readLine(LENGTH_CHECKING_LINE_LF - 1, BUFFER_SIZE, true);
      fail();
    } catch (TooLongException e) {}
   
    // Same test shouldn't throw
    is = new ByteArrayInputStream(LENGTH_CHECKING_LINE.getBytes());
    instance = new LineReadingInputStream(is);
    assertEquals(LENGTH_CHECKING_LINE.substring(0, LENGTH_CHECKING_LINE_LF), instance.readLine(LENGTH_CHECKING_LINE_LF, BUFFER_SIZE, true));
   
    // is it handling nulls properly? @see #2501
    is = new ByteArrayInputStream(NULL_LINE.getBytes());
    instance = new LineReadingInputStream(is);
    assertEquals(NULL_LINE.substring(0, 5), instance.readLine(BUFFER_SIZE, 1, true));
  }

  public void testBothImplementation() throws Exception {
    ByteArrayInputStream bis1 =  new ByteArrayInputStream(BLOCK.getBytes("ISO-8859-1"));
    ByteArrayInputStream bis2 =  new ByteArrayInputStream(BLOCK.getBytes("ISO-8859-1"));
    LineReadingInputStream lris1 = new LineReadingInputStream(bis1);
    LineReadingInputStream lris2 = new LineReadingInputStream(bis2);
   
    while(bis1.available() > 0 || bis2.available() > 0) {
      String stringWithoutMark =lris2.readLineWithoutMarking(MAX_LENGTH*10, BUFFER_SIZE, true);
      String stringWithMark = lris1.readLine(MAX_LENGTH*10, BUFFER_SIZE, true);
      assertEquals(stringWithMark, stringWithoutMark);
    }
    assertNull(lris1.readLine(MAX_LENGTH, BUFFER_SIZE, true));
    assertNull(lris2.readLineWithoutMarking(MAX_LENGTH, BUFFER_SIZE, true));
  }
}
TOP

Related Classes of freenet.support.io.LineReadingInputStreamTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.