package com.fsck.k9.mail.filter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.james.mime4j.codec.QuotedPrintableOutputStream;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class SignSafeOutputStreamTest {
private static final String INPUT_STRING =
"It's generally a good idea to encode lines that begin with\r\n"
+ "From because some mail transport agents will insert a greater-\r\n"
+ "than (>) sign, thus invalidating the signature.\r\n\r\n"
+ "Also, in some cases it might be desirable to encode any \r\n"
+ "trailing whitespace that occurs on lines in order to ensure \r\n"
+ "that the message signature is not invalidated when passing \r\n"
+ "a gateway that modifies such whitespace (like BITNET). \r\n\r\n";
private static final String EXPECTED_QUOTED_PRINTABLE =
"It's generally a good idea to encode lines that begin with\r\n"
+ "From because some mail transport agents will insert a greater-\r\n"
+ "than (>) sign, thus invalidating the signature=2E\r\n\r\n"
+ "Also, in some cases it might be desirable to encode any =20\r\n"
+ "trailing whitespace that occurs on lines in order to ensure =20\r\n"
+ "that the message signature is not invalidated when passing =20\r\n"
+ "a gateway that modifies such whitespace (like BITNET)=2E =20\r\n\r\n";
private static final String EXPECTED_QUOTED_PRINTABLE_SIGNSAFE =
"It's generally a good idea to encode lines that begin with\r\n"
+ "From=20because some mail transport agents will insert a greater-\r\n"
+ "than (>) sign, thus invalidating the signature=2E\r\n\r\n"
+ "Also, in some cases it might be desirable to encode any =20\r\n"
+ "trailing whitespace that occurs on lines in order to ensure =20\r\n"
+ "that the message signature is not invalidated when passing =20\r\n"
+ "a gateway that modifies such whitespace (like BITNET)=2E =20\r\n\r\n";
private static final String EXPECTED_SIGNSAFE =
"It's generally a good idea to encode lines that begin with\r\n"
+ "From=20because some mail transport agents will insert a greater-\r\n"
+ "than (>) sign, thus invalidating the signature.\r\n\r\n"
+ "Also, in some cases it might be desirable to encode any \r\n"
+ "trailing whitespace that occurs on lines in order to ensure \r\n"
+ "that the message signature is not invalidated when passing \r\n"
+ "a gateway that modifies such whitespace (like BITNET). \r\n\r\n";
@Test
public void testSignSafeOutputStream() throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
OutputStream output = new SignSafeOutputStream(byteArrayOutputStream);
output.write(INPUT_STRING.getBytes("US-ASCII"));
output.close();
assertEquals(EXPECTED_SIGNSAFE, new String(byteArrayOutputStream.toByteArray(), "US-ASCII"));
}
@Test
public void testSignSafeQuotedPrintableOutputStream() throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
OutputStream signSafeOutputStream = new SignSafeOutputStream(byteArrayOutputStream);
OutputStream quotedPrintableOutputStream = new QuotedPrintableOutputStream(signSafeOutputStream, false);
quotedPrintableOutputStream.write(INPUT_STRING.getBytes("US-ASCII"));
quotedPrintableOutputStream.close();
signSafeOutputStream.close();
assertEquals(EXPECTED_QUOTED_PRINTABLE_SIGNSAFE,
new String(byteArrayOutputStream.toByteArray(), "US-ASCII"));
}
@Test
public void testQuotedPrintableOutputStream() throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
OutputStream output = new QuotedPrintableOutputStream(byteArrayOutputStream, false);
output.write(INPUT_STRING.getBytes("US-ASCII"));
output.close();
assertEquals(EXPECTED_QUOTED_PRINTABLE,
new String(byteArrayOutputStream.toByteArray(), "US-ASCII"));
}
}