|
Packit |
f0b94e |
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
Packit |
f0b94e |
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
Packit |
f0b94e |
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
Packit |
f0b94e |
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
Packit |
f0b94e |
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#include "gtest/gtest.h"
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#include "nsServiceManagerUtils.h"
|
|
Packit |
f0b94e |
#include "nsString.h"
|
|
Packit |
f0b94e |
#include "nsIDocumentEncoder.h"
|
|
Packit |
f0b94e |
#include "nsCRT.h"
|
|
Packit |
f0b94e |
#include "nsIParserUtils.h"
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
void
|
|
Packit |
f0b94e |
ConvertBufToPlainText(nsString &aConBuf, int aFlag)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
nsCOMPtr<nsIParserUtils> utils = do_GetService(NS_PARSERUTILS_CONTRACTID);
|
|
Packit |
f0b94e |
utils->ConvertToPlainText(aConBuf, aFlag, 72, aConBuf);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Test for ASCII with format=flowed; delsp=yes
|
|
Packit |
f0b94e |
TEST(PlainTextSerializer, ASCIIWithFlowedDelSp)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
nsString test;
|
|
Packit |
f0b94e |
nsString result;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
test.AssignLiteral("<html><body>"
|
|
Packit |
f0b94e |
"Firefox Firefox Firefox Firefox "
|
|
Packit |
f0b94e |
"Firefox Firefox Firefox Firefox "
|
|
Packit |
f0b94e |
"Firefox Firefox Firefox Firefox"
|
|
Packit |
f0b94e |
"</body></html>");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ConvertBufToPlainText(test, nsIDocumentEncoder::OutputFormatted |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputCRLineBreak |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputLFLineBreak |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputFormatFlowed |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputFormatDelSp);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// create result case
|
|
Packit |
f0b94e |
result.AssignLiteral("Firefox Firefox Firefox Firefox "
|
|
Packit |
f0b94e |
"Firefox Firefox Firefox Firefox "
|
|
Packit |
f0b94e |
"Firefox \r\nFirefox Firefox Firefox\r\n");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ASSERT_TRUE(test.Equals(result)) <<
|
|
Packit |
f0b94e |
"Wrong HTML to ASCII text serialization with format=flowed; delsp=yes";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Test for CJK with format=flowed; delsp=yes
|
|
Packit |
f0b94e |
TEST(PlainTextSerializer, CJKWithFlowedDelSp)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
nsString test;
|
|
Packit |
f0b94e |
nsString result;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
test.AssignLiteral("<html><body>");
|
|
Packit |
f0b94e |
for (uint32_t i = 0; i < 40; i++) {
|
|
Packit |
f0b94e |
// Insert Kanji (U+5341)
|
|
Packit |
f0b94e |
test.Append(0x5341);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
test.AppendLiteral("</body></html>");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ConvertBufToPlainText(test, nsIDocumentEncoder::OutputFormatted |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputCRLineBreak |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputLFLineBreak |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputFormatFlowed |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputFormatDelSp);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// create result case
|
|
Packit |
f0b94e |
for (uint32_t i = 0; i < 36; i++) {
|
|
Packit |
f0b94e |
result.Append(0x5341);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
result.AppendLiteral(" \r\n");
|
|
Packit |
f0b94e |
for (uint32_t i = 0; i < 4; i++) {
|
|
Packit |
f0b94e |
result.Append(0x5341);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
result.AppendLiteral("\r\n");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ASSERT_TRUE(test.Equals(result)) <<
|
|
Packit |
f0b94e |
"Wrong HTML to CJK text serialization with format=flowed; delsp=yes";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Test for CJK with DisallowLineBreaking
|
|
Packit |
f0b94e |
TEST(PlainTextSerializer, CJKWithDisallowLineBreaking)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
nsString test;
|
|
Packit |
f0b94e |
nsString result;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
test.AssignLiteral("<html><body>");
|
|
Packit |
f0b94e |
for (uint32_t i = 0; i < 400; i++) {
|
|
Packit |
f0b94e |
// Insert Kanji (U+5341)
|
|
Packit |
f0b94e |
test.Append(0x5341);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
test.AppendLiteral("</body></html>");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ConvertBufToPlainText(test, nsIDocumentEncoder::OutputFormatted |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputCRLineBreak |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputLFLineBreak |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputFormatFlowed |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputDisallowLineBreaking);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// create result case
|
|
Packit |
f0b94e |
for (uint32_t i = 0; i < 400; i++) {
|
|
Packit |
f0b94e |
result.Append(0x5341);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
result.AppendLiteral("\r\n");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ASSERT_TRUE(test.Equals(result)) <<
|
|
Packit |
f0b94e |
"Wrong HTML to CJK text serialization with OutputDisallowLineBreaking";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Test for ASCII with format=flowed; and quoted lines in preformatted span.
|
|
Packit |
f0b94e |
TEST(PlainTextSerializer, PreformatFlowedQuotes)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
nsString test;
|
|
Packit |
f0b94e |
nsString result;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
test.AssignLiteral("<html><body>"
|
|
Packit |
f0b94e |
""
|
|
Packit |
f0b94e |
"> Firefox Firefox Firefox Firefox "
|
|
Packit |
f0b94e |
"> Firefox Firefox Firefox Firefox "
|
|
Packit |
f0b94e |
"> "
|
|
Packit |
f0b94e |
">> Firefox Firefox Firefox Firefox "
|
|
Packit |
f0b94e |
">> Firefox Firefox Firefox Firefox "
|
|
Packit |
f0b94e |
"</body></html>");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ConvertBufToPlainText(test, nsIDocumentEncoder::OutputFormatted |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputCRLineBreak |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputLFLineBreak |
|
|
Packit |
f0b94e |
nsIDocumentEncoder::OutputFormatFlowed);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// create result case
|
|
Packit |
f0b94e |
result.AssignLiteral("> Firefox Firefox Firefox Firefox \r\n"
|
|
Packit |
f0b94e |
"> Firefox Firefox Firefox Firefox\r\n"
|
|
Packit |
f0b94e |
">\r\n"
|
|
Packit |
f0b94e |
">> Firefox Firefox Firefox Firefox \r\n"
|
|
Packit |
f0b94e |
">> Firefox Firefox Firefox Firefox\r\n");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ASSERT_TRUE(test.Equals(result)) <<
|
|
Packit |
f0b94e |
"Wrong HTML to ASCII text serialization with format=flowed; and quoted "
|
|
Packit |
f0b94e |
"lines";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
TEST(PlainTextSerializer, PrettyPrintedHtml)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
nsString test;
|
|
Packit |
f0b94e |
test.AppendLiteral(
|
|
Packit |
f0b94e |
"<html>" NS_LINEBREAK
|
|
Packit |
f0b94e |
"<body>" NS_LINEBREAK
|
|
Packit |
f0b94e |
" first " NS_LINEBREAK
|
|
Packit |
f0b94e |
" second " NS_LINEBREAK
|
|
Packit |
f0b94e |
"</body>" NS_LINEBREAK "</html>");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ConvertBufToPlainText(test, 0);
|
|
Packit |
f0b94e |
ASSERT_TRUE(test.EqualsLiteral("first" NS_LINEBREAK "second" NS_LINEBREAK)) <<
|
|
Packit |
f0b94e |
"Wrong prettyprinted html to text serialization";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
TEST(PlainTextSerializer, PreElement)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
nsString test;
|
|
Packit |
f0b94e |
test.AppendLiteral(
|
|
Packit |
f0b94e |
"<html>" NS_LINEBREAK
|
|
Packit |
f0b94e |
"<body>" NS_LINEBREAK
|
|
Packit |
f0b94e |
"" NS_LINEBREAK
|
|
Packit |
f0b94e |
" first" NS_LINEBREAK
|
|
Packit |
f0b94e |
" second" NS_LINEBREAK
|
|
Packit |
f0b94e |
"" NS_LINEBREAK
|
|
Packit |
f0b94e |
"</body>" NS_LINEBREAK "</html>");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ConvertBufToPlainText(test, 0);
|
|
Packit |
f0b94e |
ASSERT_TRUE(test.EqualsLiteral(" first" NS_LINEBREAK
|
|
Packit |
f0b94e |
" second" NS_LINEBREAK NS_LINEBREAK)) <<
|
|
Packit |
f0b94e |
"Wrong prettyprinted html to text serialization";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
TEST(PlainTextSerializer, BlockElement)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
nsString test;
|
|
Packit |
f0b94e |
test.AppendLiteral(
|
|
Packit |
f0b94e |
"<html>" NS_LINEBREAK
|
|
Packit |
f0b94e |
"<body>" NS_LINEBREAK
|
|
Packit |
f0b94e |
"" NS_LINEBREAK
|
|
Packit |
f0b94e |
" first" NS_LINEBREAK
|
|
Packit |
f0b94e |
"" NS_LINEBREAK
|
|
Packit |
f0b94e |
"" NS_LINEBREAK
|
|
Packit |
f0b94e |
" second" NS_LINEBREAK
|
|
Packit |
f0b94e |
"" NS_LINEBREAK
|
|
Packit |
f0b94e |
"</body>" NS_LINEBREAK "</html>");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ConvertBufToPlainText(test, 0);
|
|
Packit |
f0b94e |
ASSERT_TRUE(test.EqualsLiteral("first" NS_LINEBREAK "second" NS_LINEBREAK)) <<
|
|
Packit |
f0b94e |
"Wrong prettyprinted html to text serialization";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
TEST(PlainTextSerializer, PreWrapElementForThunderbird)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
// This test examines the magic pre-wrap setup that Thunderbird relies on.
|
|
Packit |
f0b94e |
nsString test;
|
|
Packit |
f0b94e |
test.AppendLiteral(
|
|
Packit |
f0b94e |
"<html>" NS_LINEBREAK
|
|
Packit |
f0b94e |
"<body style=\"white-space: pre-wrap; width: 10ch;\">" NS_LINEBREAK
|
|
Packit |
f0b94e |
"" NS_LINEBREAK
|
|
Packit |
f0b94e |
" first line is too long" NS_LINEBREAK
|
|
Packit |
f0b94e |
" second line is even loooonger " NS_LINEBREAK
|
|
Packit |
f0b94e |
"" NS_LINEBREAK
|
|
Packit |
f0b94e |
"</body>" NS_LINEBREAK "</html>");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ConvertBufToPlainText(test, nsIDocumentEncoder::OutputWrap);
|
|
Packit |
f0b94e |
// "\n\n first\nline is\ntoo long\n second\nline is\neven\nloooonger\n\n\n"
|
|
Packit |
f0b94e |
ASSERT_TRUE(test.EqualsLiteral(NS_LINEBREAK NS_LINEBREAK
|
|
Packit |
f0b94e |
" first" NS_LINEBREAK
|
|
Packit |
f0b94e |
"line is" NS_LINEBREAK
|
|
Packit |
f0b94e |
"too long" NS_LINEBREAK
|
|
Packit |
f0b94e |
" second" NS_LINEBREAK
|
|
Packit |
f0b94e |
"line is" NS_LINEBREAK
|
|
Packit |
f0b94e |
"even" NS_LINEBREAK
|
|
Packit |
f0b94e |
"loooonger" NS_LINEBREAK
|
|
Packit |
f0b94e |
NS_LINEBREAK NS_LINEBREAK)) <<
|
|
Packit |
f0b94e |
"Wrong prettyprinted html to text serialization";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
TEST(PlainTextSerializer, Simple)
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
nsString test;
|
|
Packit |
f0b94e |
test.AppendLiteral("<html><base>base</base><head>span</head>"
|
|
Packit |
f0b94e |
"<body>body</body></html>");
|
|
Packit |
f0b94e |
ConvertBufToPlainText(test, 0);
|
|
Packit |
f0b94e |
ASSERT_TRUE(test.EqualsLiteral("basespanbody")) <<
|
|
Packit |
f0b94e |
"Wrong html to text serialization";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|