#include "llvm/Support/ConvertUTF.h"
#include "llvm/ADT/ArrayRef.h"
#include "gtest/gtest.h"
#include <string>
#include <vector>
using namespace llvm;
TEST(ConvertUTFTest, ConvertUTF16LittleEndianToUTF8String) {
alignas(UTF16) static const char Src[] = "\xff\xfe\xa0\x0c_\x00\xa0\x0c";
ArrayRef<char> Ref(Src, sizeof(Src) - 1);
std::string Result;
bool Success = convertUTF16ToUTF8String(Ref, Result);
EXPECT_TRUE(Success);
std::string Expected("\xe0\xb2\xa0_\xe0\xb2\xa0");
EXPECT_EQ(Expected, Result);
}
TEST(ConvertUTFTest, ConvertUTF32LittleEndianToUTF8String) {
alignas(UTF32) static const char Src[] =
"\xFF\xFE\x00\x00\xA0\x0C\x00\x00\x5F\x00\x00\x00\xA0\x0C\x00\x00";
ArrayRef<char> Ref(Src, sizeof(Src) - 1);
std::string Result;
bool Success = convertUTF32ToUTF8String(Ref, Result);
EXPECT_TRUE(Success);
std::string Expected("\xE0\xB2\xA0_\xE0\xB2\xA0");
EXPECT_EQ(Expected, Result);
}
TEST(ConvertUTFTest, ConvertUTF16BigEndianToUTF8String) {
alignas(UTF16) static const char Src[] = "\xfe\xff\x0c\xa0\x00_\x0c\xa0";
ArrayRef<char> Ref(Src, sizeof(Src) - 1);
std::string Result;
bool Success = convertUTF16ToUTF8String(Ref, Result);
EXPECT_TRUE(Success);
std::string Expected("\xe0\xb2\xa0_\xe0\xb2\xa0");
EXPECT_EQ(Expected, Result);
}
TEST(ConvertUTFTest, ConvertUTF32BigEndianToUTF8String) {
alignas(UTF32) static const char Src[] =
"\x00\x00\xFE\xFF\x00\x00\x0C\xA0\x00\x00\x00\x5F\x00\x00\x0C\xA0";
ArrayRef<char> Ref(Src, sizeof(Src) - 1);
std::string Result;
bool Success = convertUTF32ToUTF8String(Ref, Result);
EXPECT_TRUE(Success);
std::string Expected("\xE0\xB2\xA0_\xE0\xB2\xA0");
EXPECT_EQ(Expected, Result);
}
TEST(ConvertUTFTest, ConvertUTF8ToUTF16String) {
static const char Src[] = "\xe0\xb2\xa0_\xe0\xb2\xa0";
StringRef Ref(Src, sizeof(Src) - 1);
SmallVector<UTF16, 5> Result;
bool Success = convertUTF8ToUTF16String(Ref, Result);
EXPECT_TRUE(Success);
static const UTF16 Expected[] = {0x0CA0, 0x005f, 0x0CA0, 0};
ASSERT_EQ(3u, Result.size());
for (int I = 0, E = 3; I != E; ++I)
EXPECT_EQ(Expected[I], Result[I]);
}
TEST(ConvertUTFTest, OddLengthInput) {
std::string Result;
bool Success = convertUTF16ToUTF8String(makeArrayRef("xxxxx", 5), Result);
EXPECT_FALSE(Success);
}
TEST(ConvertUTFTest, Empty) {
std::string Result;
bool Success = convertUTF16ToUTF8String(llvm::ArrayRef<char>(None), Result);
EXPECT_TRUE(Success);
EXPECT_TRUE(Result.empty());
}
TEST(ConvertUTFTest, HasUTF16BOM) {
bool HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xff\xfe", 2));
EXPECT_TRUE(HasBOM);
HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xfe\xff", 2));
EXPECT_TRUE(HasBOM);
HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xfe\xff ", 3));
EXPECT_TRUE(HasBOM); HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xfe\xff\x00asdf", 6));
EXPECT_TRUE(HasBOM);
HasBOM = hasUTF16ByteOrderMark(None);
EXPECT_FALSE(HasBOM);
HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xfe", 1));
EXPECT_FALSE(HasBOM);
}
TEST(ConvertUTFTest, UTF16WrappersForConvertUTF16ToUTF8String) {
alignas(UTF16) static const char Src[] = "\xff\xfe\xa0\x0c_\x00\xa0\x0c";
ArrayRef<UTF16> SrcRef = makeArrayRef((const UTF16 *)Src, 4);
std::string Result;
bool Success = convertUTF16ToUTF8String(SrcRef, Result);
EXPECT_TRUE(Success);
std::string Expected("\xe0\xb2\xa0_\xe0\xb2\xa0");
EXPECT_EQ(Expected, Result);
}
TEST(ConvertUTFTest, ConvertUTF8toWide) {
static const char Src[] = "\xe0\xb2\xa0_\xe0\xb2\xa0";
std::wstring Result;
bool Success = ConvertUTF8toWide((const char*)Src, Result);
EXPECT_TRUE(Success);
std::wstring Expected(L"\x0ca0_\x0ca0");
EXPECT_EQ(Expected, Result);
Result.clear();
Success = ConvertUTF8toWide(StringRef(Src, 7), Result);
EXPECT_TRUE(Success);
EXPECT_EQ(Expected, Result);
}
TEST(ConvertUTFTest, convertWideToUTF8) {
static const wchar_t Src[] = L"\x0ca0_\x0ca0";
std::string Result;
bool Success = convertWideToUTF8(Src, Result);
EXPECT_TRUE(Success);
std::string Expected("\xe0\xb2\xa0_\xe0\xb2\xa0");
EXPECT_EQ(Expected, Result);
}
struct ConvertUTFResultContainer {
ConversionResult ErrorCode;
std::vector<unsigned> UnicodeScalars;
ConvertUTFResultContainer(ConversionResult ErrorCode)
: ErrorCode(ErrorCode) {}
ConvertUTFResultContainer
withScalars(unsigned US0 = 0x110000, unsigned US1 = 0x110000,
unsigned US2 = 0x110000, unsigned US3 = 0x110000,
unsigned US4 = 0x110000, unsigned US5 = 0x110000,
unsigned US6 = 0x110000, unsigned US7 = 0x110000) {
ConvertUTFResultContainer Result(*this);
if (US0 != 0x110000)
Result.UnicodeScalars.push_back(US0);
if (US1 != 0x110000)
Result.UnicodeScalars.push_back(US1);
if (US2 != 0x110000)
Result.UnicodeScalars.push_back(US2);
if (US3 != 0x110000)
Result.UnicodeScalars.push_back(US3);
if (US4 != 0x110000)
Result.UnicodeScalars.push_back(US4);
if (US5 != 0x110000)
Result.UnicodeScalars.push_back(US5);
if (US6 != 0x110000)
Result.UnicodeScalars.push_back(US6);
if (US7 != 0x110000)
Result.UnicodeScalars.push_back(US7);
return Result;
}
};
std::pair<ConversionResult, std::vector<unsigned>>
ConvertUTF8ToUnicodeScalarsLenient(StringRef S) {
const UTF8 *SourceStart = reinterpret_cast<const UTF8 *>(S.data());
const UTF8 *SourceNext = SourceStart;
std::vector<UTF32> Decoded(S.size(), 0);
UTF32 *TargetStart = Decoded.data();
auto ErrorCode =
ConvertUTF8toUTF32(&SourceNext, SourceStart + S.size(), &TargetStart,
Decoded.data() + Decoded.size(), lenientConversion);
Decoded.resize(TargetStart - Decoded.data());
return std::make_pair(ErrorCode, Decoded);
}
std::pair<ConversionResult, std::vector<unsigned>>
ConvertUTF8ToUnicodeScalarsPartialLenient(StringRef S) {
const UTF8 *SourceStart = reinterpret_cast<const UTF8 *>(S.data());
const UTF8 *SourceNext = SourceStart;
std::vector<UTF32> Decoded(S.size(), 0);
UTF32 *TargetStart = Decoded.data();
auto ErrorCode = ConvertUTF8toUTF32Partial(
&SourceNext, SourceStart + S.size(), &TargetStart,
Decoded.data() + Decoded.size(), lenientConversion);
Decoded.resize(TargetStart - Decoded.data());
return std::make_pair(ErrorCode, Decoded);
}
::testing::AssertionResult
CheckConvertUTF8ToUnicodeScalars(ConvertUTFResultContainer Expected,
StringRef S, bool Partial = false) {
ConversionResult ErrorCode;
std::vector<unsigned> Decoded;
if (!Partial)
std::tie(ErrorCode, Decoded) = ConvertUTF8ToUnicodeScalarsLenient(S);
else
std::tie(ErrorCode, Decoded) = ConvertUTF8ToUnicodeScalarsPartialLenient(S);
if (Expected.ErrorCode != ErrorCode)
return ::testing::AssertionFailure() << "Expected error code "
<< Expected.ErrorCode << ", actual "
<< ErrorCode;
if (Expected.UnicodeScalars != Decoded)
return ::testing::AssertionFailure()
<< "Expected lenient decoded result:\n"
<< ::testing::PrintToString(Expected.UnicodeScalars) << "\n"
<< "Actual result:\n" << ::testing::PrintToString(Decoded);
return ::testing::AssertionSuccess();
}
TEST(ConvertUTFTest, UTF8ToUTF32Lenient) {
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x0041), "\x41"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x0283),
"\xca\x83"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK)
.withScalars(0x03ba, 0x1f79, 0x03c3, 0x03bc, 0x03b5),
"\xce\xba\xe1\xbd\xb9\xcf\x83\xce\xbc\xce\xb5"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x4f8b, 0x6587),
"\xe4\xbe\x8b\xe6\x96\x87"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xd55c, 0xae00),
"\xed\x95\x9c\xea\xb8\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK)
.withScalars(0x1112, 0x1161, 0x11ab, 0x1100, 0x1173, 0x11af),
"\xe1\x84\x92\xe1\x85\xa1\xe1\x86\xab\xe1\x84\x80\xe1\x85\xb3"
"\xe1\x86\xaf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x000E0100),
"\xf3\xa0\x84\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x0000),
StringRef("\x00", 1)));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x0080),
"\xc2\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x0800),
"\xe0\xa0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x10000),
"\xf0\x90\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf8\x88\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\x84\x80\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x007f), "\x7f"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x07ff),
"\xdf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xffff),
"\xef\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf7\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfb\xbf\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfd\xbf\xbf\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xd7ff),
"\xed\x9f\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xe000),
"\xee\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfffd),
"\xef\xbf\xbd"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x10ffff),
"\xf4\x8f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf4\x90\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\x80\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xbf\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\x80\xbf\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\x80\xbf\x80\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\x80\xbf\x82\xbf\xaa"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xaa\xb0\xbb\xbf\xaa\xa0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xaa\xb0\xbb\xbf\xaa\xa0\x8f"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
"\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
"\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
"\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020),
"\xc0\x20\xc1\x20\xc2\x20\xc3\x20\xc4\x20\xc5\x20\xc6\x20\xc7\x20"
"\xc8\x20\xc9\x20\xca\x20\xcb\x20\xcc\x20\xcd\x20\xce\x20\xcf\x20"
"\xd0\x20\xd1\x20\xd2\x20\xd3\x20\xd4\x20\xd5\x20\xd6\x20\xd7\x20"
"\xd8\x20\xd9\x20\xda\x20\xdb\x20\xdc\x20\xdd\x20\xde\x20\xdf\x20"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020),
"\xe0\x20\xe1\x20\xe2\x20\xe3\x20\xe4\x20\xe5\x20\xe6\x20\xe7\x20"
"\xe8\x20\xe9\x20\xea\x20\xeb\x20\xec\x20\xed\x20\xee\x20\xef\x20"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020),
"\xf0\x20\xf1\x20\xf2\x20\xf3\x20\xf4\x20\xf5\x20\xf6\x20\xf7\x20"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf8\xf9\xfa\xfb"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020),
"\xf8\x20\xf9\x20\xfa\x20\xfb\x20"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xfc\xfd"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020),
"\xfc\x20\xfd\x20"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xc0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xc1"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xff"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xc0\xc1\xfe\xff"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfe\xfe\xff\xff"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfe\x80\x80\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xff\x80\x80\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0x0020, 0xfffd, 0x0020,
0xfffd, 0x0020, 0xfffd, 0x0020),
"\xc0\x20\xc1\x20\xfe\x20\xff\x20"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xc2"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xdf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xe0\xa0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xe0\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xe1\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xec\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xed\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xed\x9f"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xee\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xef\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf0\x90\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf0\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf1\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf3\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf4\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf4\x8f\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xc0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xc1"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xe0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xe0\x9f"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf0\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf0\x8f\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf8\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\x80\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xed\xa0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xed\xac"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xed\xaf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xed\xb0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xed\xb4"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xed\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf4\x90\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf4\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf5\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf6\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf7\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf7\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf8\x88\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf8\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf9\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfa\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfb\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfb\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\x84\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\xbf\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfd\x80\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfd\xbf\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf0\x90"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf0\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf1\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf3\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf4\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd),
"\xf4\x8f"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xe0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf0\x8f"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf8\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xed"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf4\x90"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf4\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf5\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf6\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf7\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf7\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf8\x88\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf8\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xf9\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xfa\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xfb\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xfb\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\x84\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfd\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfd\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf1"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf2"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf3"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf4"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf8\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xfc\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf5"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf6"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf7"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf8\x88"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf8\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xf9\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xfa\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xfb\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xfb\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xfc\x84\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xfc\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xfd\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd),
"\xfd\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf8"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf9"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfa"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfb"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfb"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf8"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xfc\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xfc\x84"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xfc\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xfd\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xfd\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfc"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfd"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xc0" "\xe0\x80" "\xf0\x80\x80"
"\xf8\x80\x80\x80"
"\xfc\x80\x80\x80\x80"
"\xdf" "\xef\xbf" "\xf7\xbf\xbf"
"\xfb\xbf\xbf\xbf"
"\xfd\xbf\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x002f), "\x2f"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xc0\xaf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xe0\x80\xaf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf0\x80\x80\xaf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf8\x80\x80\x80\xaf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\x80\x80\x80\x80\xaf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x0000),
StringRef("\x00", 1)));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xc0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xe0\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf0\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf8\x80\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\x80\x80\x80\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xc0\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xc1\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd),
"\xc1\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xe0\x9f\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xed\xa0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xed\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf0\x8f\x80\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf0\x8f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xf8\x87\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xfc\x83\xbf\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xed\xa0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xed\xac\xa0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xed\xaf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xed\xb0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xed\xb4\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd),
"\xed\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xed\xa0\x80\xed\xb0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xed\xa0\x80\xed\xb4\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xed\xa0\x80\xed\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xed\xac\xa0\xed\xb0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xed\xac\xa0\xed\xb4\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xed\xac\xa0\xed\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xed\xaf\xbf\xed\xb0\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xed\xaf\xbf\xed\xb4\x80"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceIllegal)
.withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd),
"\xed\xaf\xbf\xed\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfffe),
"\xef\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xffff),
"\xef\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x1fffe),
"\xf0\x9f\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x1ffff),
"\xf0\x9f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x2fffe),
"\xf0\xaf\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x2ffff),
"\xf0\xaf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x3fffe),
"\xf0\xbf\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x3ffff),
"\xf0\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x4fffe),
"\xf1\x8f\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x4ffff),
"\xf1\x8f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x5fffe),
"\xf1\x9f\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x5ffff),
"\xf1\x9f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x6fffe),
"\xf1\xaf\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x6ffff),
"\xf1\xaf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x7fffe),
"\xf1\xbf\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x7ffff),
"\xf1\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x8fffe),
"\xf2\x8f\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x8ffff),
"\xf2\x8f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x9fffe),
"\xf2\x9f\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x9ffff),
"\xf2\x9f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xafffe),
"\xf2\xaf\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xaffff),
"\xf2\xaf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xbfffe),
"\xf2\xbf\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xbffff),
"\xf2\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xcfffe),
"\xf3\x8f\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xcfffF),
"\xf3\x8f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xdfffe),
"\xf3\x9f\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xdffff),
"\xf3\x9f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xefffe),
"\xf3\xaf\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xeffff),
"\xf3\xaf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xffffe),
"\xf3\xbf\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfffff),
"\xf3\xbf\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x10fffe),
"\xf4\x8f\xbf\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x10ffff),
"\xf4\x8f\xbf\xbf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd0),
"\xef\xb7\x90"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd1),
"\xef\xb7\x91"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd2),
"\xef\xb7\x92"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd3),
"\xef\xb7\x93"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd4),
"\xef\xb7\x94"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd5),
"\xef\xb7\x95"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd6),
"\xef\xb7\x96"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd7),
"\xef\xb7\x97"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd8),
"\xef\xb7\x98"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdd9),
"\xef\xb7\x99"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdda),
"\xef\xb7\x9a"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfddb),
"\xef\xb7\x9b"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfddc),
"\xef\xb7\x9c"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfddd),
"\xef\xb7\x9d"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdde),
"\xef\xb7\x9e"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfddf),
"\xef\xb7\x9f"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde0),
"\xef\xb7\xa0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde1),
"\xef\xb7\xa1"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde2),
"\xef\xb7\xa2"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde3),
"\xef\xb7\xa3"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde4),
"\xef\xb7\xa4"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde5),
"\xef\xb7\xa5"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde6),
"\xef\xb7\xa6"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde7),
"\xef\xb7\xa7"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde8),
"\xef\xb7\xa8"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfde9),
"\xef\xb7\xa9"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdea),
"\xef\xb7\xaa"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdeb),
"\xef\xb7\xab"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdec),
"\xef\xb7\xac"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfded),
"\xef\xb7\xad"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdee),
"\xef\xb7\xae"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdef),
"\xef\xb7\xaf"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf0),
"\xef\xb7\xb0"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf1),
"\xef\xb7\xb1"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf2),
"\xef\xb7\xb2"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf3),
"\xef\xb7\xb3"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf4),
"\xef\xb7\xb4"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf5),
"\xef\xb7\xb5"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf6),
"\xef\xb7\xb6"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf7),
"\xef\xb7\xb7"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf8),
"\xef\xb7\xb8"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdf9),
"\xef\xb7\xb9"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdfa),
"\xef\xb7\xba"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdfb),
"\xef\xb7\xbb"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdfc),
"\xef\xb7\xbc"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdfd),
"\xef\xb7\xbd"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdfe),
"\xef\xb7\xbe"));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0xfdff),
"\xef\xb7\xbf"));
}
TEST(ConvertUTFTest, UTF8ToUTF32PartialLenient) {
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(conversionOK).withScalars(0x0041),
"\x41", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xc2", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xdf", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xe0\xa0", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xe0\xbf", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xe1\x80", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xec\xbf", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xed\x80", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xed\x9f", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xee\x80", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xef\xbf", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xf0\x90\x80", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xf0\xbf\xbf", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xf1\x80\x80", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xf3\xbf\xbf", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xf4\x80\x80", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted),
"\xf4\x8f\xbf", true));
EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
ConvertUTFResultContainer(sourceExhausted).withScalars(0x0041),
"\x41\xc2", true));
}