/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * 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/.
*/
void Test::testEncoding(rtl_TextEncoding eEncoding)
{ //Taking the single byte legacy encodings, fill in all possible values
std::vector<char> aAllChars(255); for (int i = 1; i <= 255; ++i)
aAllChars[i-1] = static_cast<char>(i);
//Some slots are unused, so don't map to private, just set them to 'X'
sal_uInt32 const convertFlags = OSTRING_TO_OUSTRING_CVTFLAGS ^ RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE;
OUString sOrigText(aAllChars.data(), aAllChars.size(), eEncoding, convertFlags);
sOrigText = sOrigText.replace( 0xfffd, 'X' );
//Should clearly be equal
sal_Int32 nLength = aAllChars.size();
CPPUNIT_ASSERT_EQUAL(sOrigText.getLength(), nLength);
OUString sFinalText;
//Split up in chunks of the same encoding returned by //getBestMSEncodingByChar, convert to it, and back
rtl_TextEncoding ePrevEncoding = RTL_TEXTENCODING_DONTKNOW; const sal_Unicode *pStr = sOrigText.getStr();
sal_Int32 nChunkStart=0; for (int i = 0; i < 255; ++i)
{
rtl_TextEncoding eCurrEncoding = getBestMSEncodingByChar(pStr[i]); if (eCurrEncoding != ePrevEncoding)
{
OString aChunk(pStr+nChunkStart, i-nChunkStart, ePrevEncoding);
sFinalText += OStringToOUString(aChunk, ePrevEncoding);
nChunkStart = i;
}
ePrevEncoding = eCurrEncoding;
} if (nChunkStart < 255)
{
OString aChunk(pStr+nChunkStart, 255-nChunkStart, ePrevEncoding);
sFinalText += OStringToOUString(aChunk, ePrevEncoding);
}
//Final text should be the same as original
CPPUNIT_ASSERT_EQUAL(sOrigText, sFinalText);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.