package org.subethamail.smtp;
import static org.junit.Assert.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import org.junit.Test;
import org.subethamail.smtp.io.DotTerminatedInputStream;
public class DotTerminatedInputStreamTest
{
@Test
public void testEmpty() throws IOException
{
InputStream in = new ByteArrayInputStream(".\r\n".getBytes("US-ASCII"));
DotTerminatedInputStream stream = new DotTerminatedInputStream(in);
assertEquals(-1, stream.read());
}
@Test
public void testPreserveLastCrLf() throws IOException
{
InputStream in = new ByteArrayInputStream("a\r\n.\r\n".getBytes("US-ASCII"));
DotTerminatedInputStream stream = new DotTerminatedInputStream(in);
assertEquals("a\r\n", readFull(stream));
}
@Test
public void testDotDot() throws IOException
{
InputStream in = new ByteArrayInputStream("..\r\n.\r\n".getBytes("US-ASCII"));
DotTerminatedInputStream stream = new DotTerminatedInputStream(in);
assertEquals("..\r\n", readFull(stream));
}
@Test(expected = EOFException.class)
public void testMissingDotLine() throws IOException
{
InputStream in = new ByteArrayInputStream("a\r\n".getBytes("US-ASCII"));
DotTerminatedInputStream stream = new DotTerminatedInputStream(in);
readFull(stream);
}
private String readFull(DotTerminatedInputStream in) throws IOException
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
int ch;
while (-1 != (ch = in.read()))
out.write(ch);
return out.toString("US-ASCII");
}
}