diff -r 000000000000 -r 6474c204b198 content/base/test/TestPlainTextSerializer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/content/base/test/TestPlainTextSerializer.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,156 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "TestHarness.h" + +#include "nsServiceManagerUtils.h" +#include "nsStringGlue.h" +#include "nsIDocumentEncoder.h" +#include "nsCRT.h" +#include "nsIParserUtils.h" + +void +ConvertBufToPlainText(nsString &aConBuf, int aFlag) +{ + nsCOMPtr utils = + do_GetService(NS_PARSERUTILS_CONTRACTID); + utils->ConvertToPlainText(aConBuf, aFlag, 72, aConBuf); +} + +// Test for ASCII with format=flowed; delsp=yes +nsresult +TestASCIIWithFlowedDelSp() +{ + nsString test; + nsString result; + + test.AssignLiteral("" + "Firefox Firefox Firefox Firefox " + "Firefox Firefox Firefox Firefox " + "Firefox Firefox Firefox Firefox" + ""); + + ConvertBufToPlainText(test, nsIDocumentEncoder::OutputFormatted | + nsIDocumentEncoder::OutputCRLineBreak | + nsIDocumentEncoder::OutputLFLineBreak | + nsIDocumentEncoder::OutputFormatFlowed | + nsIDocumentEncoder::OutputFormatDelSp); + + // create result case + result.AssignLiteral("Firefox Firefox Firefox Firefox " + "Firefox Firefox Firefox Firefox " + "Firefox \r\nFirefox Firefox Firefox\r\n"); + + if (!test.Equals(result)) { + fail("Wrong HTML to ASCII text serialization with format=flowed; delsp=yes"); + return NS_ERROR_FAILURE; + } + + passed("HTML to ASCII text serialization with format=flowed; delsp=yes"); + + return NS_OK; +} + +// Test for CJK with format=flowed; delsp=yes +nsresult +TestCJKWithFlowedDelSp() +{ + nsString test; + nsString result; + + test.AssignLiteral(""); + for (uint32_t i = 0; i < 40; i++) { + // Insert Kanji (U+5341) + test.Append(0x5341); + } + test.AppendLiteral(""); + + ConvertBufToPlainText(test, nsIDocumentEncoder::OutputFormatted | + nsIDocumentEncoder::OutputCRLineBreak | + nsIDocumentEncoder::OutputLFLineBreak | + nsIDocumentEncoder::OutputFormatFlowed | + nsIDocumentEncoder::OutputFormatDelSp); + + // create result case + for (uint32_t i = 0; i < 36; i++) { + result.Append(0x5341); + } + result.Append(NS_LITERAL_STRING(" \r\n")); + for (uint32_t i = 0; i < 4; i++) { + result.Append(0x5341); + } + result.Append(NS_LITERAL_STRING("\r\n")); + + if (!test.Equals(result)) { + fail("Wrong HTML to CJK text serialization with format=flowed; delsp=yes"); + return NS_ERROR_FAILURE; + } + + passed("HTML to CJK text serialization with format=flowed; delsp=yes"); + + return NS_OK; +} + +nsresult +TestPrettyPrintedHtml() +{ + nsString test; + test.AppendLiteral( + "" NS_LINEBREAK + "" NS_LINEBREAK + " first
" NS_LINEBREAK + " second
" NS_LINEBREAK + "" NS_LINEBREAK ""); + + ConvertBufToPlainText(test, 0); + if (!test.EqualsLiteral("first" NS_LINEBREAK "second" NS_LINEBREAK)) { + fail("Wrong prettyprinted html to text serialization"); + return NS_ERROR_FAILURE; + } + + passed("prettyprinted HTML to text serialization test"); + return NS_OK; +} + +nsresult +TestPlainTextSerializer() +{ + nsString test; + test.AppendLiteral("basespan" + "body"); + ConvertBufToPlainText(test, 0); + if (!test.EqualsLiteral("basespanbody")) { + fail("Wrong html to text serialization"); + return NS_ERROR_FAILURE; + } + + passed("HTML to text serialization test"); + + nsresult rv = TestASCIIWithFlowedDelSp(); + NS_ENSURE_SUCCESS(rv, rv); + + rv = TestCJKWithFlowedDelSp(); + NS_ENSURE_SUCCESS(rv, rv); + + rv = TestPrettyPrintedHtml(); + NS_ENSURE_SUCCESS(rv, rv); + + // Add new tests here... + return NS_OK; +} + +int main(int argc, char** argv) +{ + ScopedXPCOM xpcom("PlainTextSerializer"); + if (xpcom.failed()) + return 1; + + int retval = 0; + if (NS_FAILED(TestPlainTextSerializer())) { + retval = 1; + } + + return retval; +}