mirror of
https://github.com/moparisthebest/k-9
synced 2025-02-25 07:01:50 -05:00
Merge pull request #468
Extract a TextBodyBuilder class Conflicts: src/com/fsck/k9/activity/MessageCompose.java
This commit is contained in:
commit
95f33c38fe
@ -50,3 +50,8 @@ android {
|
|||||||
exclude 'META-INF/NOTICE'
|
exclude 'META-INF/NOTICE'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task testsOnJVM(type :GradleBuild, dependsOn: assemble) {
|
||||||
|
buildFile = 'tests-on-jvm/build.gradle'
|
||||||
|
tasks = ['test']
|
||||||
|
}
|
||||||
|
@ -12,7 +12,7 @@ import java.io.Serializable;
|
|||||||
*
|
*
|
||||||
* TODO: This container should also have a text part, along with its insertion point. Or maybe a generic InsertableContent and maintain one each for Html and Text?
|
* TODO: This container should also have a text part, along with its insertion point. Or maybe a generic InsertableContent and maintain one each for Html and Text?
|
||||||
*/
|
*/
|
||||||
class InsertableHtmlContent implements Serializable {
|
public class InsertableHtmlContent implements Serializable {
|
||||||
private static final long serialVersionUID = 2397327034L;
|
private static final long serialVersionUID = 2397327034L;
|
||||||
// Default to a headerInsertionPoint at the beginning of the message.
|
// Default to a headerInsertionPoint at the beginning of the message.
|
||||||
private int headerInsertionPoint = 0;
|
private int headerInsertionPoint = 0;
|
||||||
|
File diff suppressed because it is too large
Load Diff
242
src/com/fsck/k9/mail/internet/TextBodyBuilder.java
Normal file
242
src/com/fsck/k9/mail/internet/TextBodyBuilder.java
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
package com.fsck.k9.mail.internet;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.fsck.k9.K9;
|
||||||
|
import com.fsck.k9.activity.InsertableHtmlContent;
|
||||||
|
import com.fsck.k9.helper.HtmlConverter;
|
||||||
|
import com.fsck.k9.helper.StringUtils;
|
||||||
|
import com.fsck.k9.mail.Body;
|
||||||
|
|
||||||
|
public class TextBodyBuilder {
|
||||||
|
private boolean mIncludeQuotedText = true;
|
||||||
|
private boolean mReplyAfterQuote = false;
|
||||||
|
private boolean mSignatureBeforeQuotedText = false;
|
||||||
|
private boolean mInsertSeparator = false;
|
||||||
|
private boolean mAppendSignature = true;
|
||||||
|
|
||||||
|
private String mMessageContent;
|
||||||
|
private String mSignature;
|
||||||
|
private String mQuotedText;
|
||||||
|
private InsertableHtmlContent mQuotedTextHtml;
|
||||||
|
|
||||||
|
public TextBodyBuilder(String messageContent) {
|
||||||
|
mMessageContent = messageContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the {@link Body} that will contain the text of the message.
|
||||||
|
*
|
||||||
|
* @return {@link TextBody} instance that contains the entered text and
|
||||||
|
* possibly the quoted original message.
|
||||||
|
*/
|
||||||
|
public TextBody buildTextHtml() {
|
||||||
|
// The length of the formatted version of the user-supplied text/reply
|
||||||
|
int composedMessageLength;
|
||||||
|
|
||||||
|
// The offset of the user-supplied text/reply in the final text body
|
||||||
|
int composedMessageOffset;
|
||||||
|
|
||||||
|
// Get the user-supplied text
|
||||||
|
String text = mMessageContent;
|
||||||
|
|
||||||
|
// Do we have to modify an existing message to include our reply?
|
||||||
|
if (mIncludeQuotedText) {
|
||||||
|
InsertableHtmlContent quotedHtmlContent = getQuotedTextHtml();
|
||||||
|
|
||||||
|
if (K9.DEBUG) {
|
||||||
|
Log.d(K9.LOG_TAG, "insertable: " + quotedHtmlContent.toDebugString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mAppendSignature) {
|
||||||
|
// Append signature to the reply
|
||||||
|
if (mReplyAfterQuote || mSignatureBeforeQuotedText) {
|
||||||
|
text += getSignature();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert the text to HTML
|
||||||
|
text = textToHtmlFragment(text);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the insertion location based upon our reply after quote
|
||||||
|
* setting. Additionally, add some extra separators between the
|
||||||
|
* composed message and quoted message depending on the quote
|
||||||
|
* location. We only add the extra separators when we're
|
||||||
|
* sending, that way when we load a draft, we don't have to know
|
||||||
|
* the length of the separators to remove them before editing.
|
||||||
|
*/
|
||||||
|
if (mReplyAfterQuote) {
|
||||||
|
quotedHtmlContent.setInsertionLocation(
|
||||||
|
InsertableHtmlContent.InsertionLocation.AFTER_QUOTE);
|
||||||
|
if (mInsertSeparator) {
|
||||||
|
text = "<br clear=\"all\">" + text;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
quotedHtmlContent.setInsertionLocation(
|
||||||
|
InsertableHtmlContent.InsertionLocation.BEFORE_QUOTE);
|
||||||
|
if (mInsertSeparator) {
|
||||||
|
text += "<br><br>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mAppendSignature) {
|
||||||
|
// Place signature immediately after the quoted text
|
||||||
|
if (!(mReplyAfterQuote || mSignatureBeforeQuotedText)) {
|
||||||
|
quotedHtmlContent.insertIntoQuotedFooter(getSignatureHtml());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
quotedHtmlContent.setUserContent(text);
|
||||||
|
|
||||||
|
// Save length of the body and its offset. This is used when thawing drafts.
|
||||||
|
composedMessageLength = text.length();
|
||||||
|
composedMessageOffset = quotedHtmlContent.getInsertionPoint();
|
||||||
|
text = quotedHtmlContent.toString();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// There is no text to quote so simply append the signature if available
|
||||||
|
if (mAppendSignature) {
|
||||||
|
text += getSignature();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert the text to HTML
|
||||||
|
text = textToHtmlFragment(text);
|
||||||
|
|
||||||
|
//TODO: Wrap this in proper HTML tags
|
||||||
|
|
||||||
|
composedMessageLength = text.length();
|
||||||
|
composedMessageOffset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TextBody body = new TextBody(text);
|
||||||
|
body.setComposedMessageLength(composedMessageLength);
|
||||||
|
body.setComposedMessageOffset(composedMessageOffset);
|
||||||
|
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the {@link Body} that will contain the text of the message.
|
||||||
|
*
|
||||||
|
* @return {@link TextBody} instance that contains the entered text and
|
||||||
|
* possibly the quoted original message.
|
||||||
|
*/
|
||||||
|
public TextBody buildTextPlain() {
|
||||||
|
// The length of the formatted version of the user-supplied text/reply
|
||||||
|
int composedMessageLength;
|
||||||
|
|
||||||
|
// The offset of the user-supplied text/reply in the final text body
|
||||||
|
int composedMessageOffset;
|
||||||
|
|
||||||
|
// Get the user-supplied text
|
||||||
|
String text = mMessageContent;
|
||||||
|
|
||||||
|
// Capture composed message length before we start attaching quoted parts and signatures.
|
||||||
|
composedMessageLength = text.length();
|
||||||
|
composedMessageOffset = 0;
|
||||||
|
|
||||||
|
// Do we have to modify an existing message to include our reply?
|
||||||
|
if (mIncludeQuotedText) {
|
||||||
|
String quotedText = getQuotedText();
|
||||||
|
|
||||||
|
if (mAppendSignature) {
|
||||||
|
// Append signature to the text/reply
|
||||||
|
if (mReplyAfterQuote || mSignatureBeforeQuotedText) {
|
||||||
|
text += getSignature();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mReplyAfterQuote) {
|
||||||
|
composedMessageOffset = quotedText.length() + "\r\n".length();
|
||||||
|
text = quotedText + "\r\n" + text;
|
||||||
|
} else {
|
||||||
|
text += "\r\n\r\n" + quotedText;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mAppendSignature) {
|
||||||
|
// Place signature immediately after the quoted text
|
||||||
|
if (!(mReplyAfterQuote || mSignatureBeforeQuotedText)) {
|
||||||
|
text += getSignature();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// There is no text to quote so simply append the signature if available
|
||||||
|
if (mAppendSignature) {
|
||||||
|
// Append signature to the text/reply
|
||||||
|
text += getSignature();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TextBody body = new TextBody(text);
|
||||||
|
body.setComposedMessageLength(composedMessageLength);
|
||||||
|
body.setComposedMessageOffset(composedMessageOffset);
|
||||||
|
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getSignature() {
|
||||||
|
String signature = "";
|
||||||
|
if (!StringUtils.isNullOrEmpty(mSignature)) {
|
||||||
|
signature = "\r\n" + mSignature;
|
||||||
|
}
|
||||||
|
|
||||||
|
return signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getSignatureHtml() {
|
||||||
|
String signature = "";
|
||||||
|
if (!StringUtils.isNullOrEmpty(mSignature)) {
|
||||||
|
signature = textToHtmlFragment("\r\n" + mSignature);
|
||||||
|
}
|
||||||
|
return signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getQuotedText() {
|
||||||
|
String quotedText = "";
|
||||||
|
if (!StringUtils.isNullOrEmpty(mQuotedText)) {
|
||||||
|
quotedText = mQuotedText;
|
||||||
|
}
|
||||||
|
return quotedText;
|
||||||
|
}
|
||||||
|
|
||||||
|
private InsertableHtmlContent getQuotedTextHtml() {
|
||||||
|
return mQuotedTextHtml;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String textToHtmlFragment(String text) {
|
||||||
|
return HtmlConverter.textToHtmlFragment(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSignature(String signature) {
|
||||||
|
mSignature = signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIncludeQuotedText(boolean includeQuotedText) {
|
||||||
|
mIncludeQuotedText = includeQuotedText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setQuotedText(String quotedText) {
|
||||||
|
mQuotedText = quotedText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setQuotedTextHtml(InsertableHtmlContent quotedTextHtml) {
|
||||||
|
mQuotedTextHtml = quotedTextHtml;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInsertSeparator(boolean insertSeparator) {
|
||||||
|
mInsertSeparator = insertSeparator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSignatureBeforeQuotedText(boolean signatureBeforeQuotedText) {
|
||||||
|
mSignatureBeforeQuotedText = signatureBeforeQuotedText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReplyAfterQuote(boolean replyAfterQuote) {
|
||||||
|
mReplyAfterQuote = replyAfterQuote;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppendSignature(boolean appendSignature) {
|
||||||
|
mAppendSignature = appendSignature;
|
||||||
|
}
|
||||||
|
}
|
5
tests-on-jvm/src/com/fsck/k9/K9.java
Normal file
5
tests-on-jvm/src/com/fsck/k9/K9.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package com.fsck.k9;
|
||||||
|
|
||||||
|
public class K9 {
|
||||||
|
public static boolean DEBUG = false;
|
||||||
|
}
|
@ -0,0 +1,328 @@
|
|||||||
|
package com.fsck.k9.mail.internet;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.*;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import org.junit.experimental.theories.*;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import com.fsck.k9.Account.QuoteStyle;
|
||||||
|
import com.fsck.k9.activity.InsertableHtmlContent;
|
||||||
|
|
||||||
|
class TestingTextBodyBuilder extends TextBodyBuilder {
|
||||||
|
|
||||||
|
public TestingTextBodyBuilder(boolean includeQuotedText,
|
||||||
|
boolean isDraft,
|
||||||
|
QuoteStyle quoteStyle,
|
||||||
|
boolean replyAfterQuote,
|
||||||
|
boolean signatureBeforeQuotedText,
|
||||||
|
boolean useSignature,
|
||||||
|
String messageText,
|
||||||
|
String signatureText) {
|
||||||
|
super(messageText);
|
||||||
|
|
||||||
|
includeQuotedText = (isDraft || includeQuotedText);
|
||||||
|
if (includeQuotedText) {
|
||||||
|
this.setIncludeQuotedText(true);
|
||||||
|
this.setReplyAfterQuote(quoteStyle == QuoteStyle.PREFIX && replyAfterQuote);
|
||||||
|
} else {
|
||||||
|
this.setIncludeQuotedText(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setInsertSeparator(!isDraft);
|
||||||
|
|
||||||
|
useSignature = (!isDraft && useSignature);
|
||||||
|
if (useSignature) {
|
||||||
|
this.setAppendSignature(true);
|
||||||
|
this.setSignature(signatureText);
|
||||||
|
this.setSignatureBeforeQuotedText(signatureBeforeQuotedText);
|
||||||
|
} else {
|
||||||
|
this.setAppendSignature(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// HtmlConverter depends on Android.
|
||||||
|
// So we use dummy method for tests.
|
||||||
|
@Override
|
||||||
|
public String textToHtmlFragment(String text) {
|
||||||
|
return "<html>" + text + "</html>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RunWith(Theories.class)
|
||||||
|
public class TextBodyBuilderTest {
|
||||||
|
|
||||||
|
@DataPoints
|
||||||
|
public static boolean[] BOOLEANS = { true, false };
|
||||||
|
|
||||||
|
@DataPoints
|
||||||
|
public static QuoteStyle[] QUOTESTYLES = { QuoteStyle.PREFIX, QuoteStyle.HEADER };
|
||||||
|
|
||||||
|
@Theory
|
||||||
|
public void testBuildTextPlain(boolean includeQuotedText,
|
||||||
|
QuoteStyle quoteStyle,
|
||||||
|
boolean isReplyAfterQuote,
|
||||||
|
boolean isSignatureUse,
|
||||||
|
boolean isSignatureBeforeQuotedText,
|
||||||
|
boolean isDraft) {
|
||||||
|
|
||||||
|
String expectedText;
|
||||||
|
int expectedMessageLength;
|
||||||
|
int expectedMessagePosition;
|
||||||
|
|
||||||
|
// 1.quoted text
|
||||||
|
// 2.message content
|
||||||
|
// 3.signature
|
||||||
|
if (quoteStyle == QuoteStyle.PREFIX && isReplyAfterQuote) {
|
||||||
|
String expectedQuotedText = "";
|
||||||
|
|
||||||
|
if (isDraft || includeQuotedText) {
|
||||||
|
expectedQuotedText = "quoted text" + "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedText = expectedQuotedText;
|
||||||
|
|
||||||
|
expectedText += "message content";
|
||||||
|
|
||||||
|
if (!isDraft && isSignatureUse) {
|
||||||
|
expectedText += "\r\n" + "signature";
|
||||||
|
}
|
||||||
|
expectedMessageLength = "message content".length();
|
||||||
|
expectedMessagePosition = expectedQuotedText.length();
|
||||||
|
}
|
||||||
|
// 1.message content
|
||||||
|
// 2.signature
|
||||||
|
// 3.quoted text
|
||||||
|
else if (isSignatureBeforeQuotedText) {
|
||||||
|
expectedText = "message content";
|
||||||
|
|
||||||
|
if (!isDraft && isSignatureUse) {
|
||||||
|
expectedText += "\r\n" + "signature";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDraft || includeQuotedText) {
|
||||||
|
expectedText += "\r\n\r\nquoted text";
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedMessageLength = "message content".length();
|
||||||
|
expectedMessagePosition = 0;
|
||||||
|
}
|
||||||
|
// 1.message content
|
||||||
|
// 2.quoted text
|
||||||
|
// 3.signature
|
||||||
|
else {
|
||||||
|
expectedText = "message content";
|
||||||
|
|
||||||
|
if (isDraft || includeQuotedText) {
|
||||||
|
expectedText += "\r\n\r\nquoted text";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isDraft && isSignatureUse) {
|
||||||
|
expectedText += "\r\n" + "signature";
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedMessageLength = "message content".length();
|
||||||
|
expectedMessagePosition = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
String quotedText = "quoted text";
|
||||||
|
String messageText = "message content";
|
||||||
|
String signatureText = "signature";
|
||||||
|
|
||||||
|
TestingTextBodyBuilder textBodyBuilder = new TestingTextBodyBuilder(
|
||||||
|
includeQuotedText,
|
||||||
|
isDraft,
|
||||||
|
quoteStyle,
|
||||||
|
isReplyAfterQuote,
|
||||||
|
isSignatureBeforeQuotedText,
|
||||||
|
isSignatureUse,
|
||||||
|
messageText,
|
||||||
|
signatureText
|
||||||
|
);
|
||||||
|
textBodyBuilder.setQuotedText(quotedText);
|
||||||
|
TextBody textBody = textBodyBuilder.buildTextPlain();
|
||||||
|
|
||||||
|
assertThat(textBody, instanceOf(TextBody.class));
|
||||||
|
assertThat(textBody.getText(), is(expectedText));
|
||||||
|
assertThat(textBody.getComposedMessageLength(), is(expectedMessageLength));
|
||||||
|
assertThat(textBody.getComposedMessageOffset(), is(expectedMessagePosition));
|
||||||
|
assertThat(textBody.getText().substring(expectedMessagePosition, expectedMessagePosition + expectedMessageLength),
|
||||||
|
is("message content"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generate expected HtmlContent debug string
|
||||||
|
*
|
||||||
|
* @param expectedText
|
||||||
|
* @param quotedContent
|
||||||
|
* @param footerInsertionPoint
|
||||||
|
* @param isBefore
|
||||||
|
* @param userContent
|
||||||
|
* @param compiledResult
|
||||||
|
* @return expected string
|
||||||
|
*
|
||||||
|
* @see InsertableHtmlContent#toDebugString()
|
||||||
|
*/
|
||||||
|
public String makeExpectedHtmlContent(String expectedText, String quotedContent,
|
||||||
|
int footerInsertionPoint, boolean isBefore,
|
||||||
|
String userContent, String compiledResult) {
|
||||||
|
String expectedHtmlContent = "InsertableHtmlContent{"
|
||||||
|
+ "headerInsertionPoint=0,"
|
||||||
|
+ " footerInsertionPoint=" + footerInsertionPoint + ","
|
||||||
|
+ " insertionLocation=" + (isBefore ? "BEFORE_QUOTE" : "AFTER_QUOTE") + ","
|
||||||
|
+ " quotedContent=" + quotedContent + ","
|
||||||
|
+ " userContent=" + userContent + ","
|
||||||
|
+ " compiledResult=" + compiledResult
|
||||||
|
+ "}";
|
||||||
|
return expectedHtmlContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Theory
|
||||||
|
public void testBuildTextHtml(boolean includeQuotedText,
|
||||||
|
QuoteStyle quoteStyle,
|
||||||
|
boolean isReplyAfterQuote,
|
||||||
|
boolean isSignatureUse,
|
||||||
|
boolean isSignatureBeforeQuotedText,
|
||||||
|
boolean isDraft) {
|
||||||
|
String expectedText;
|
||||||
|
int expectedMessageLength;
|
||||||
|
int expectedMessagePosition = 0;
|
||||||
|
String expectedHtmlContent;
|
||||||
|
|
||||||
|
String expectedPrefix = "";
|
||||||
|
|
||||||
|
if (includeQuotedText && quoteStyle == QuoteStyle.PREFIX && isReplyAfterQuote && !isDraft) {
|
||||||
|
expectedPrefix = "<br clear=\"all\">";
|
||||||
|
}
|
||||||
|
String expectedPostfix = "";
|
||||||
|
if (!isDraft && includeQuotedText) {
|
||||||
|
expectedPostfix = "<br><br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1.quoted text
|
||||||
|
// 2.message content
|
||||||
|
// 3.signature
|
||||||
|
if (quoteStyle == QuoteStyle.PREFIX && isReplyAfterQuote) {
|
||||||
|
expectedText = expectedPrefix
|
||||||
|
+ "<html>message content";
|
||||||
|
if (!isDraft && isSignatureUse) {
|
||||||
|
expectedText += "\r\n" + "signature";
|
||||||
|
}
|
||||||
|
expectedText += "</html>";
|
||||||
|
expectedMessageLength = expectedText.length();
|
||||||
|
String quotedContent = "quoted text";
|
||||||
|
|
||||||
|
if (isDraft || includeQuotedText) {
|
||||||
|
expectedHtmlContent = makeExpectedHtmlContent(expectedText, quotedContent,
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
expectedText,
|
||||||
|
expectedText + quotedContent);
|
||||||
|
expectedText += quotedContent;
|
||||||
|
} else {
|
||||||
|
expectedHtmlContent = makeExpectedHtmlContent(expectedText, quotedContent,
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
"",
|
||||||
|
quotedContent);
|
||||||
|
// expectedText += quotedContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 1.message content
|
||||||
|
// 2.signature
|
||||||
|
// 3.quoted text
|
||||||
|
else if (isSignatureBeforeQuotedText) {
|
||||||
|
expectedText = expectedPrefix
|
||||||
|
+ "<html>message content";
|
||||||
|
if (!isDraft && isSignatureUse) {
|
||||||
|
expectedText += "\r\n" + "signature";
|
||||||
|
}
|
||||||
|
expectedText += "</html>";
|
||||||
|
expectedText += expectedPostfix;
|
||||||
|
|
||||||
|
expectedMessageLength = expectedText.length();
|
||||||
|
String quotedContent = "quoted text";
|
||||||
|
|
||||||
|
if (isDraft || includeQuotedText) {
|
||||||
|
expectedHtmlContent = makeExpectedHtmlContent(expectedText, quotedContent,
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
expectedText,
|
||||||
|
expectedText + quotedContent);
|
||||||
|
expectedText += quotedContent;
|
||||||
|
} else {
|
||||||
|
expectedHtmlContent = makeExpectedHtmlContent(expectedText, quotedContent,
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
"",
|
||||||
|
quotedContent);
|
||||||
|
// expectedText += quotedContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 1.message content
|
||||||
|
// 2.quoted text
|
||||||
|
// 3.signature
|
||||||
|
else {
|
||||||
|
String expectedSignature = "";
|
||||||
|
|
||||||
|
expectedText = expectedPrefix
|
||||||
|
+ "<html>message content";
|
||||||
|
|
||||||
|
if (!isDraft && isSignatureUse) {
|
||||||
|
if (!includeQuotedText) {
|
||||||
|
expectedText += "\r\n" + "signature";
|
||||||
|
} else {
|
||||||
|
expectedSignature = "<html>\r\nsignature</html>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expectedText += "</html>";
|
||||||
|
expectedText += expectedPostfix;
|
||||||
|
|
||||||
|
expectedMessageLength = expectedText.length();
|
||||||
|
String quotedContent = "quoted text";
|
||||||
|
|
||||||
|
if (isDraft || includeQuotedText) {
|
||||||
|
expectedHtmlContent = makeExpectedHtmlContent(expectedText, expectedSignature + quotedContent,
|
||||||
|
expectedSignature.length(),
|
||||||
|
true,
|
||||||
|
expectedText,
|
||||||
|
expectedText + expectedSignature + quotedContent);
|
||||||
|
expectedText += expectedSignature + quotedContent;
|
||||||
|
} else {
|
||||||
|
expectedHtmlContent = makeExpectedHtmlContent(expectedText, quotedContent,
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
"",
|
||||||
|
quotedContent);
|
||||||
|
// expectedText += quotedContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
InsertableHtmlContent insertableHtmlContent = new InsertableHtmlContent();
|
||||||
|
|
||||||
|
String quotedText = "quoted text";
|
||||||
|
insertableHtmlContent.setQuotedContent(new StringBuilder(quotedText));
|
||||||
|
String messageText = "message content";
|
||||||
|
String signatureText = "signature";
|
||||||
|
|
||||||
|
TestingTextBodyBuilder textBodyBuilder = new TestingTextBodyBuilder(
|
||||||
|
includeQuotedText,
|
||||||
|
isDraft,
|
||||||
|
quoteStyle,
|
||||||
|
isReplyAfterQuote,
|
||||||
|
isSignatureBeforeQuotedText,
|
||||||
|
isSignatureUse,
|
||||||
|
messageText,
|
||||||
|
signatureText
|
||||||
|
);
|
||||||
|
textBodyBuilder.setQuotedTextHtml(insertableHtmlContent);
|
||||||
|
TextBody textBody = textBodyBuilder.buildTextHtml();
|
||||||
|
|
||||||
|
assertThat(textBody, instanceOf(TextBody.class));
|
||||||
|
assertThat(textBody.getText(), is(expectedText));
|
||||||
|
assertThat(textBody.getComposedMessageLength(), is(expectedMessageLength));
|
||||||
|
assertThat(textBody.getComposedMessageOffset(), is(expectedMessagePosition));
|
||||||
|
assertThat(insertableHtmlContent.toDebugString(), is(expectedHtmlContent));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user