Blame dom/base/test/gtest/TestPlainTextSerializer.cpp

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