106c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner//===- llvm/unittest/Support/ConvertUTFTest.cpp - ConvertUTF tests --------===// 206c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner// 306c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner// The LLVM Compiler Infrastructure 406c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner// 506c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner// This file is distributed under the University of Illinois Open Source 606c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner// License. See LICENSE.TXT for details. 706c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner// 806c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner//===----------------------------------------------------------------------===// 906c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner 1006c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner#include "llvm/Support/ConvertUTF.h" 1106c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner#include "gtest/gtest.h" 1206c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner#include <string> 13cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include <vector> 14cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include <utility> 1506c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner 1606c847e83e558f0cc6fea742498b2730eb6837c6Reid Klecknerusing namespace llvm; 1706c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner 1806c847e83e558f0cc6fea742498b2730eb6837c6Reid KlecknerTEST(ConvertUTFTest, ConvertUTF16LittleEndianToUTF8String) { 1906c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner // Src is the look of disapproval. 2006c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner static const char Src[] = "\xff\xfe\xa0\x0c_\x00\xa0\x0c"; 2106c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner ArrayRef<char> Ref(Src, sizeof(Src) - 1); 2206c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner std::string Result; 2306c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner bool Success = convertUTF16ToUTF8String(Ref, Result); 2406c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_TRUE(Success); 2506c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner std::string Expected("\xe0\xb2\xa0_\xe0\xb2\xa0"); 2606c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_EQ(Expected, Result); 2706c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner} 2806c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner 2906c847e83e558f0cc6fea742498b2730eb6837c6Reid KlecknerTEST(ConvertUTFTest, ConvertUTF16BigEndianToUTF8String) { 3006c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner // Src is the look of disapproval. 3106c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner static const char Src[] = "\xfe\xff\x0c\xa0\x00_\x0c\xa0"; 3206c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner ArrayRef<char> Ref(Src, sizeof(Src) - 1); 3306c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner std::string Result; 3406c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner bool Success = convertUTF16ToUTF8String(Ref, Result); 3506c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_TRUE(Success); 3606c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner std::string Expected("\xe0\xb2\xa0_\xe0\xb2\xa0"); 3706c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_EQ(Expected, Result); 3806c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner} 3906c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner 4006c847e83e558f0cc6fea742498b2730eb6837c6Reid KlecknerTEST(ConvertUTFTest, OddLengthInput) { 4106c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner std::string Result; 4206c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner bool Success = convertUTF16ToUTF8String(ArrayRef<char>("xxxxx", 5), Result); 4306c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_FALSE(Success); 4406c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner} 4506c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner 4606c847e83e558f0cc6fea742498b2730eb6837c6Reid KlecknerTEST(ConvertUTFTest, Empty) { 4706c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner std::string Result; 4806c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner bool Success = convertUTF16ToUTF8String(ArrayRef<char>(), Result); 4906c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_TRUE(Success); 5006c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_TRUE(Result.empty()); 5106c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner} 5206c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner 5306c847e83e558f0cc6fea742498b2730eb6837c6Reid KlecknerTEST(ConvertUTFTest, HasUTF16BOM) { 5406c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner bool HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xff\xfe", 2)); 5506c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_TRUE(HasBOM); 5606c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xfe\xff", 2)); 5706c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_TRUE(HasBOM); 5806c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xfe\xff ", 3)); 5906c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_TRUE(HasBOM); // Don't care about odd lengths. 6006c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xfe\xff\x00asdf", 6)); 6106c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_TRUE(HasBOM); 6206c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner 6306c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>()); 6406c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_FALSE(HasBOM); 6506c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner HasBOM = hasUTF16ByteOrderMark(ArrayRef<char>("\xfe", 1)); 6606c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner EXPECT_FALSE(HasBOM); 6706c847e83e558f0cc6fea742498b2730eb6837c6Reid Kleckner} 68cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 69cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesstruct ConvertUTFResultContainer { 70cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConversionResult ErrorCode; 71cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::vector<unsigned> UnicodeScalars; 72cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 73cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(ConversionResult ErrorCode) 74cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines : ErrorCode(ErrorCode) {} 75cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 76cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer 77cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines withScalars(unsigned US0 = 0x110000, unsigned US1 = 0x110000, 78cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines unsigned US2 = 0x110000, unsigned US3 = 0x110000, 79cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines unsigned US4 = 0x110000, unsigned US5 = 0x110000, 80cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines unsigned US6 = 0x110000, unsigned US7 = 0x110000) { 81cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer Result(*this); 82cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (US0 != 0x110000) 83cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Result.UnicodeScalars.push_back(US0); 84cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (US1 != 0x110000) 85cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Result.UnicodeScalars.push_back(US1); 86cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (US2 != 0x110000) 87cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Result.UnicodeScalars.push_back(US2); 88cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (US3 != 0x110000) 89cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Result.UnicodeScalars.push_back(US3); 90cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (US4 != 0x110000) 91cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Result.UnicodeScalars.push_back(US4); 92cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (US5 != 0x110000) 93cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Result.UnicodeScalars.push_back(US5); 94cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (US6 != 0x110000) 95cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Result.UnicodeScalars.push_back(US6); 96cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (US7 != 0x110000) 97cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Result.UnicodeScalars.push_back(US7); 98cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines return Result; 99cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines } 100cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines}; 101cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 102cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesstd::pair<ConversionResult, std::vector<unsigned>> 103cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesConvertUTF8ToUnicodeScalarsLenient(StringRef S) { 104cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines const UTF8 *SourceStart = reinterpret_cast<const UTF8 *>(S.data()); 105cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 106cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines const UTF8 *SourceNext = SourceStart; 107cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::vector<UTF32> Decoded(S.size(), 0); 108cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines UTF32 *TargetStart = Decoded.data(); 109cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 110cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines auto ErrorCode = 111cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTF8toUTF32(&SourceNext, SourceStart + S.size(), &TargetStart, 112cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Decoded.data() + Decoded.size(), lenientConversion); 113cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 114cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Decoded.resize(TargetStart - Decoded.data()); 115cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 116cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines return std::make_pair(ErrorCode, Decoded); 117cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 118cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 119cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesstd::pair<ConversionResult, std::vector<unsigned>> 120cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesConvertUTF8ToUnicodeScalarsPartialLenient(StringRef S) { 121cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines const UTF8 *SourceStart = reinterpret_cast<const UTF8 *>(S.data()); 122cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 123cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines const UTF8 *SourceNext = SourceStart; 124cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::vector<UTF32> Decoded(S.size(), 0); 125cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines UTF32 *TargetStart = Decoded.data(); 126cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 127cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines auto ErrorCode = ConvertUTF8toUTF32Partial( 128cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines &SourceNext, SourceStart + S.size(), &TargetStart, 129cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Decoded.data() + Decoded.size(), lenientConversion); 130cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 131cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Decoded.resize(TargetStart - Decoded.data()); 132cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 133cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines return std::make_pair(ErrorCode, Decoded); 134cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 135cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 136cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines::testing::AssertionResult 137cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesCheckConvertUTF8ToUnicodeScalars(ConvertUTFResultContainer Expected, 138cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines StringRef S, bool Partial = false) { 139cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConversionResult ErrorCode; 140cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::vector<unsigned> Decoded; 141cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (!Partial) 142cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::tie(ErrorCode, Decoded) = ConvertUTF8ToUnicodeScalarsLenient(S); 143cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines else 144cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 145cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::tie(ErrorCode, Decoded) = ConvertUTF8ToUnicodeScalarsPartialLenient(S); 146cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (Expected.ErrorCode != ErrorCode) 147cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines return ::testing::AssertionFailure() << "Expected error code " 148cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines << Expected.ErrorCode << ", actual " 149cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines << ErrorCode; 150cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 151cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (Expected.UnicodeScalars != Decoded) 152cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines return ::testing::AssertionFailure() 153cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines << "Expected lenient decoded result:\n" 154cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines << ::testing::PrintToString(Expected.UnicodeScalars) << "\n" 155cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines << "Actual result:\n" << ::testing::PrintToString(Decoded); 156cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 157cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines return ::testing::AssertionSuccess(); 158cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 159cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 160cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesTEST(ConvertUTFTest, UTF8ToUTF32Lenient) { 161cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 162cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 163cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1-byte sequences 164cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 165cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 166cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+0041 LATIN CAPITAL LETTER A 167cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 168cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x0041), "\x41")); 169cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 170cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 171cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 2-byte sequences 172cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 173cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 174cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+0283 LATIN SMALL LETTER ESH 175cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 176cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x0283), 177cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xca\x83")); 178cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 179cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+03BA GREEK SMALL LETTER KAPPA 180cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1F79 GREEK SMALL LETTER OMICRON WITH OXIA 181cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+03C3 GREEK SMALL LETTER SIGMA 182cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+03BC GREEK SMALL LETTER MU 183cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+03B5 GREEK SMALL LETTER EPSILON 184cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 185cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK) 186cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0x03ba, 0x1f79, 0x03c3, 0x03bc, 0x03b5), 187cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xce\xba\xe1\xbd\xb9\xcf\x83\xce\xbc\xce\xb5")); 188cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 189cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 190cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 3-byte sequences 191cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 192cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 193cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+4F8B CJK UNIFIED IDEOGRAPH-4F8B 194cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+6587 CJK UNIFIED IDEOGRAPH-6587 195cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 196cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x4f8b, 0x6587), 197cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe4\xbe\x8b\xe6\x96\x87")); 198cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 199cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+D55C HANGUL SYLLABLE HAN 200cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+AE00 HANGUL SYLLABLE GEUL 201cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 202cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xd55c, 0xae00), 203cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\x95\x9c\xea\xb8\x80")); 204cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 205cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1112 HANGUL CHOSEONG HIEUH 206cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1161 HANGUL JUNGSEONG A 207cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+11AB HANGUL JONGSEONG NIEUN 208cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1100 HANGUL CHOSEONG KIYEOK 209cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1173 HANGUL JUNGSEONG EU 210cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+11AF HANGUL JONGSEONG RIEUL 211cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 212cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK) 213cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0x1112, 0x1161, 0x11ab, 0x1100, 0x1173, 0x11af), 214cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe1\x84\x92\xe1\x85\xa1\xe1\x86\xab\xe1\x84\x80\xe1\x85\xb3" 215cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe1\x86\xaf")); 216cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 217cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 218cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 4-byte sequences 219cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 220cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 221cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+E0100 VARIATION SELECTOR-17 222cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 223cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x000E0100), 224cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\xa0\x84\x80")); 225cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 226cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 227cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // First possible sequence of a certain length 228cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 229cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 230cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+0000 NULL 231cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 232cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x0000), 233cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines StringRef("\x00", 1))); 234cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 235cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+0080 PADDING CHARACTER 236cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 237cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x0080), 238cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc2\x80")); 239cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 240cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+0800 SAMARITAN LETTER ALAF 241cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 242cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x0800), 243cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\xa0\x80")); 244cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 245cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+10000 LINEAR B SYLLABLE B008 A 246cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 247cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x10000), 248cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x90\x80\x80")); 249cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 250cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+200000 (invalid) 251cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 252cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 253cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 254cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x88\x80\x80\x80")); 255cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 256cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+4000000 (invalid) 257cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 258cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 259cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 260cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x84\x80\x80\x80\x80")); 261cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 262cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 263cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Last possible sequence of a certain length 264cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 265cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 266cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+007F DELETE 267cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 268cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x007f), "\x7f")); 269cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 270cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+07FF (unassigned) 271cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 272cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x07ff), 273cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xdf\xbf")); 274cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 275cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FFFF (noncharacter) 276cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 277cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xffff), 278cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xbf\xbf")); 279cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 280cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1FFFFF (invalid) 281cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 282cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 283cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 284cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf7\xbf\xbf\xbf")); 285cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 286cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+3FFFFFF (invalid) 287cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 288cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 289cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 290cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfb\xbf\xbf\xbf\xbf")); 291cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 292cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+7FFFFFFF (invalid) 293cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 294cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 295cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 296cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\xbf\xbf\xbf\xbf\xbf")); 297cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 298cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 299cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Other boundary conditions 300cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 301cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 302cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+D7FF (unassigned) 303cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 304cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xd7ff), 305cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\x9f\xbf")); 306cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 307cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+E000 (private use) 308cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 309cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xe000), 310cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xee\x80\x80")); 311cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 312cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FFFD REPLACEMENT CHARACTER 313cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 314cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfffd), 315cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xbf\xbd")); 316cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 317cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+10FFFF (noncharacter) 318cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 319cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x10ffff), 320cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x8f\xbf\xbf")); 321cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 322cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+110000 (invalid) 323cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 324cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 325cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 326cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x90\x80\x80")); 327cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 328cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 329cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Unexpected continuation bytes 330cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 331cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 332cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // A sequence of unexpected continuation bytes that don't follow a first 333cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // byte, every byte is a maximal subpart. 334cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 335cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 336cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\x80")); 337cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 338cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xbf")); 339cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 340cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 341cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\x80\x80")); 342cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 343cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 344cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\x80\xbf")); 345cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 346cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 347cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xbf\x80")); 348cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 349cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 350cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 351cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\x80\xbf\x80")); 352cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 353cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 354cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 355cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\x80\xbf\x80\xbf")); 356cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 357cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 358cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 359cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\x80\xbf\x82\xbf\xaa")); 360cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 361cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 362cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 363cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xaa\xb0\xbb\xbf\xaa\xa0")); 364cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 365cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 366cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 367cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xaa\xb0\xbb\xbf\xaa\xa0\x8f")); 368cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 369cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // All continuation bytes (0x80--0xbf). 370cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 371cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 372cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 373cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 374cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 375cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 376cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 377cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 378cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 379cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 380cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 381cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 382cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 383cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 384cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 385cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 386cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 387cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd), 388cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" 389cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f" 390cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf" 391cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf")); 392cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 393cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 394cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Lonely start bytes 395cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 396cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 397cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Start bytes of 2-byte sequences (0xc0--0xdf). 398cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 399cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 400cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 401cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 402cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 403cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 404cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 405cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 406cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 407cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd), 408cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf" 409cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf")); 410cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 411cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 412cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 413cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 414cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 415cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 416cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 417cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 418cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 419cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 420cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 421cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 422cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 423cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 424cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 425cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 426cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 427cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 428cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020), 429cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc0\x20\xc1\x20\xc2\x20\xc3\x20\xc4\x20\xc5\x20\xc6\x20\xc7\x20" 430cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc8\x20\xc9\x20\xca\x20\xcb\x20\xcc\x20\xcd\x20\xce\x20\xcf\x20" 431cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xd0\x20\xd1\x20\xd2\x20\xd3\x20\xd4\x20\xd5\x20\xd6\x20\xd7\x20" 432cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xd8\x20\xd9\x20\xda\x20\xdb\x20\xdc\x20\xdd\x20\xde\x20\xdf\x20")); 433cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 434cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Start bytes of 3-byte sequences (0xe0--0xef). 435cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 436cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 437cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 438cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd) 439cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 440cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd), 441cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef")); 442cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 443cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 444cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 445cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 446cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 447cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 448cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 449cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 450cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 451cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 452cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020), 453cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\x20\xe1\x20\xe2\x20\xe3\x20\xe4\x20\xe5\x20\xe6\x20\xe7\x20" 454cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe8\x20\xe9\x20\xea\x20\xeb\x20\xec\x20\xed\x20\xee\x20\xef\x20")); 455cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 456cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Start bytes of 4-byte sequences (0xf0--0xf7). 457cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 458cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 459cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 460cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0xfffd, 0xfffd, 0xfffd), 461cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7")); 462cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 463cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 464cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 465cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 466cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020) 467cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 468cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020), 469cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x20\xf1\x20\xf2\x20\xf3\x20\xf4\x20\xf5\x20\xf6\x20\xf7\x20")); 470cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 471cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Start bytes of 5-byte sequences (0xf8--0xfb). 472cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 473cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 474cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 475cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\xf9\xfa\xfb")); 476cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 477cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 478cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 479cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 480cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020), 481cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x20\xf9\x20\xfa\x20\xfb\x20")); 482cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 483cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Start bytes of 6-byte sequences (0xfc--0xfd). 484cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 485cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 486cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\xfd")); 487cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 488cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 489cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 490cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020), 491cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x20\xfd\x20")); 492cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 493cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 494cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Other bytes (0xc0--0xc1, 0xfe--0xff). 495cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 496cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 497cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 498cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xc0")); 499cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 500cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xc1")); 501cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 502cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfe")); 503cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 504cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xff")); 505cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 506cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 507cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 508cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 509cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc0\xc1\xfe\xff")); 510cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 511cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 512cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 513cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 514cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfe\xfe\xff\xff")); 515cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 516cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 517cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 518cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 519cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfe\x80\x80\x80\x80\x80")); 520cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 521cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 522cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 523cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 524cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xff\x80\x80\x80\x80\x80")); 525cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 526cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 527cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 528cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0x0020, 0xfffd, 0x0020, 529cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 0xfffd, 0x0020, 0xfffd, 0x0020), 530cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc0\x20\xc1\x20\xfe\x20\xff\x20")); 531cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 532cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 533cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Sequences with one continuation byte missing 534cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 535cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 536cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 537cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xc2")); 538cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 539cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xdf")); 540cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 541cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 542cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\xa0")); 543cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 544cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 545cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\xbf")); 546cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 547cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 548cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe1\x80")); 549cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 550cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 551cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xec\xbf")); 552cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 553cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 554cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\x80")); 555cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 556cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 557cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\x9f")); 558cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 559cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 560cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xee\x80")); 561cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 562cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 563cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xbf")); 564cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 565cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 566cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x90\x80")); 567cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 568cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 569cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\xbf\xbf")); 570cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 571cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 572cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\x80\x80")); 573cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 574cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 575cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\xbf\xbf")); 576cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 577cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 578cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x80\x80")); 579cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 580cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 581cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x8f\xbf")); 582cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 583cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Overlong sequences with one trailing byte missing. 584cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 585cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 586cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc0")); 587cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 588cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 589cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc1")); 590cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 591cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 592cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\x80")); 593cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 594cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 595cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\x9f")); 596cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 597cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 598cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 599cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x80\x80")); 600cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 601cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 602cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 603cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x8f\x80")); 604cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 605cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 606cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 607cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x80\x80\x80")); 608cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 609cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 610cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 611cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x80\x80\x80\x80")); 612cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 613cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Sequences that represent surrogates with one trailing byte missing. 614cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // High surrogates 615cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 616cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 617cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xa0")); 618cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 619cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 620cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xac")); 621cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 622cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 623cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xaf")); 624cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Low surrogates 625cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 626cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 627cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xb0")); 628cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 629cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 630cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xb4")); 631cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 632cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 633cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xbf")); 634cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 635cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 4-byte sequences. 636cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 11110zzz 10zzyyyy 10yyyyxx 10xxxxxx 637cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1100xx (invalid) 638cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 639cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 640cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 641cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x90\x80")); 642cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+13FBxx (invalid) 643cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 644cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 645cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 646cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\xbf\xbf")); 647cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 648cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 649cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 650cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf5\x80\x80")); 651cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 652cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 653cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 654cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf6\x80\x80")); 655cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 656cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 657cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 658cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf7\x80\x80")); 659cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1FFBxx (invalid) 660cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 661cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 662cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 663cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf7\xbf\xbf")); 664cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 665cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 5-byte sequences. 666cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 111110uu 10zzzzzz 10zzyyyy 10yyyyxx 10xxxxxx 667cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+2000xx (invalid) 668cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 669cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 670cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 671cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x88\x80\x80")); 672cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 673cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 674cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 675cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\xbf\xbf\xbf")); 676cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 677cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 678cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 679cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf9\x80\x80\x80")); 680cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 681cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 682cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 683cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfa\x80\x80\x80")); 684cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 685cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 686cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 687cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfb\x80\x80\x80")); 688cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+3FFFFxx (invalid) 689cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 690cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 691cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 692cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfb\xbf\xbf\xbf")); 693cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 694cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 6-byte sequences. 695cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1111110u 10uuuuuu 10uzzzzz 10zzzyyyy 10yyyyxx 10xxxxxx 696cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+40000xx (invalid) 697cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 698cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 699cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 700cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x84\x80\x80\x80")); 701cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 702cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 703cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 704cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\xbf\xbf\xbf\xbf")); 705cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 706cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 707cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 708cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\x80\x80\x80\x80")); 709cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+7FFFFFxx (invalid) 710cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 711cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 712cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 713cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\xbf\xbf\xbf\xbf")); 714cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 715cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 716cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Sequences with two continuation bytes missing 717cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 718cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 719cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 720cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 721cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x90")); 722cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 723cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 724cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\xbf")); 725cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 726cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 727cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\x80")); 728cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 729cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 730cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\xbf")); 731cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 732cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 733cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x80")); 734cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 735cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), 736cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x8f")); 737cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 738cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Overlong sequences with two trailing byte missing. 739cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 740cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xe0")); 741cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 742cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 743cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x80")); 744cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 745cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 746cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x8f")); 747cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 748cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 749cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 750cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x80\x80")); 751cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 752cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 753cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 754cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x80\x80\x80")); 755cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 756cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Sequences that represent surrogates with two trailing bytes missing. 757cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 758cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xed")); 759cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 760cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 4-byte sequences. 761cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 11110zzz 10zzyyyy 10yyyyxx 10xxxxxx 762cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+110yxx (invalid) 763cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 764cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 765cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x90")); 766cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+13Fyxx (invalid) 767cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 768cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 769cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\xbf")); 770cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 771cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 772cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf5\x80")); 773cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 774cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 775cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf6\x80")); 776cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 777cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 778cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf7\x80")); 779cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1FFyxx (invalid) 780cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 781cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 782cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf7\xbf")); 783cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 784cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 5-byte sequences. 785cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 111110uu 10zzzzzz 10zzyyyy 10yyyyxx 10xxxxxx 786cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+200yxx (invalid) 787cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 788cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 789cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x88\x80")); 790cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 791cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 792cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\xbf\xbf")); 793cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 794cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 795cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf9\x80\x80")); 796cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 797cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 798cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfa\x80\x80")); 799cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 800cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 801cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfb\x80\x80")); 802cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+3FFFyxx (invalid) 803cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 804cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 805cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfb\xbf\xbf")); 806cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 807cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 6-byte sequences. 808cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1111110u 10uuuuuu 10zzzzzz 10zzyyyy 10yyyyxx 10xxxxxx 809cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+4000yxx (invalid) 810cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 811cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 812cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x84\x80\x80")); 813cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 814cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 815cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\xbf\xbf\xbf")); 816cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 817cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 818cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\x80\x80\x80")); 819cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+7FFFFyxx (invalid) 820cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 821cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 822cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\xbf\xbf\xbf")); 823cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 824cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 825cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Sequences with three continuation bytes missing 826cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 827cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 828cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 829cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf0")); 830cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 831cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf1")); 832cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 833cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf2")); 834cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 835cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf3")); 836cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 837cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf4")); 838cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 839cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Broken overlong sequences. 840cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 841cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf0")); 842cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 843cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 844cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x80")); 845cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 846cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 847cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x80\x80")); 848cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 849cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 4-byte sequences. 850cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 11110zzz 10zzyyyy 10yyyyxx 10xxxxxx 851cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+14yyxx (invalid) 852cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 853cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf5")); 854cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 855cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf6")); 856cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1Cyyxx (invalid) 857cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 858cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf7")); 859cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 860cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 5-byte sequences. 861cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 111110uu 10zzzzzz 10zzyyyy 10yyyyxx 10xxxxxx 862cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+20yyxx (invalid) 863cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 864cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 865cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x88")); 866cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 867cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 868cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\xbf")); 869cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 870cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 871cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf9\x80")); 872cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 873cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 874cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfa\x80")); 875cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 876cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 877cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfb\x80")); 878cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+3FCyyxx (invalid) 879cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 880cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 881cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfb\xbf")); 882cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 883cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 6-byte sequences. 884cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1111110u 10uuuuuu 10zzzzzz 10zzyyyy 10yyyyxx 10xxxxxx 885cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+400yyxx (invalid) 886cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 887cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 888cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x84\x80")); 889cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 890cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 891cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\xbf\xbf")); 892cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 893cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 894cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\x80\x80")); 895cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+7FFCyyxx (invalid) 896cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 897cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd, 0xfffd), 898cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\xbf\xbf")); 899cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 900cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 901cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Sequences with four continuation bytes missing 902cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 903cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 904cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 5-byte sequences. 905cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 111110uu 10zzzzzz 10zzyyyy 10yyyyxx 10xxxxxx 906cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+uzyyxx (invalid) 907cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 908cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf8")); 909cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 910cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf9")); 911cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 912cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfa")); 913cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 914cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfb")); 915cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+3zyyxx (invalid) 916cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 917cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfb")); 918cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 919cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Broken overlong sequences. 920cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 921cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xf8")); 922cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 923cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 924cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x80")); 925cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 926cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 6-byte sequences. 927cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1111110u 10uuuuuu 10zzzzzz 10zzyyyy 10yyyyxx 10xxxxxx 928cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+uzzyyxx (invalid) 929cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 930cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 931cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x84")); 932cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 933cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 934cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\xbf")); 935cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 936cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 937cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\x80")); 938cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+7Fzzyyxx (invalid) 939cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 940cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 941cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\xbf")); 942cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 943cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 944cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Sequences with five continuation bytes missing 945cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 946cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 947cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Ill-formed 6-byte sequences. 948cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1111110u 10uuuuuu 10zzzzzz 10zzyyyy 10yyyyxx 10xxxxxx 949cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+uzzyyxx (invalid) 950cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 951cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfc")); 952cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+uuzzyyxx (invalid) 953cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 954cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd), "\xfd")); 955cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 956cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 957cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Consecutive sequences with trailing bytes missing 958cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 959cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 960cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 961cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 962cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, /**/ 0xfffd, 0xfffd, /**/ 0xfffd, 0xfffd, 0xfffd) 963cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd) 964cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd) 965cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, /**/ 0xfffd, /**/ 0xfffd, 0xfffd, 0xfffd) 966cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd) 967cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 968cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc0" "\xe0\x80" "\xf0\x80\x80" 969cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x80\x80\x80" 970cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x80\x80\x80\x80" 971cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xdf" "\xef\xbf" "\xf7\xbf\xbf" 972cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfb\xbf\xbf\xbf" 973cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfd\xbf\xbf\xbf\xbf")); 974cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 975cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 976cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Overlong UTF-8 sequences 977cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 978cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 979cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+002F SOLIDUS 980cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 981cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x002f), "\x2f")); 982cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 983cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Overlong sequences of the above. 984cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 985cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 986cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc0\xaf")); 987cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 988cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 989cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 990cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\x80\xaf")); 991cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 992cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 993cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 994cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x80\x80\xaf")); 995cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 996cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 997cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 998cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x80\x80\x80\xaf")); 999cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1000cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1001cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1002cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x80\x80\x80\x80\xaf")); 1003cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1004cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+0000 NULL 1005cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1006cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x0000), 1007cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines StringRef("\x00", 1))); 1008cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1009cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Overlong sequences of the above. 1010cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1011cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 1012cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc0\x80")); 1013cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1014cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1015cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1016cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\x80\x80")); 1017cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1018cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1019cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 1020cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x80\x80\x80")); 1021cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1022cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1023cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1024cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x80\x80\x80\x80")); 1025cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1026cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1027cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1028cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x80\x80\x80\x80\x80")); 1029cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1030cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Other overlong sequences. 1031cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1032cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 1033cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc0\xbf")); 1034cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1035cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 1036cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc1\x80")); 1037cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1038cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal).withScalars(0xfffd, 0xfffd), 1039cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc1\xbf")); 1040cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1041cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1042cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1043cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\x9f\xbf")); 1044cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1045cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1046cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1047cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xa0\x80")); 1048cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1049cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1050cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1051cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xbf\xbf")); 1052cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1053cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1054cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 1055cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x8f\x80\x80")); 1056cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1057cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1058cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd), 1059cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x8f\xbf\xbf")); 1060cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1061cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1062cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1063cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf8\x87\xbf\xbf\xbf")); 1064cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1065cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1066cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1067cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xfc\x83\xbf\xbf\xbf\xbf")); 1068cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1069cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1070cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Isolated surrogates 1071cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1072cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1073cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Unicode 6.3.0: 1074cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1075cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // D71. High-surrogate code point: A Unicode code point in the range 1076cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+D800 to U+DBFF. 1077cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1078cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // D73. Low-surrogate code point: A Unicode code point in the range 1079cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DC00 to U+DFFF. 1080cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1081cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Note: U+E0100 is <DB40 DD00> in UTF16. 1082cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1083cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // High surrogates 1084cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1085cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+D800 1086cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1087cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1088cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1089cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xa0\x80")); 1090cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1091cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DB40 1092cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1093cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1094cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1095cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xac\xa0")); 1096cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1097cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DBFF 1098cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1099cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1100cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1101cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xaf\xbf")); 1102cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1103cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Low surrogates 1104cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1105cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DC00 1106cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1107cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1108cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1109cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xb0\x80")); 1110cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1111cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DD00 1112cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1113cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1114cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1115cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xb4\x80")); 1116cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1117cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DFFF 1118cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1119cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1120cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd), 1121cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xbf\xbf")); 1122cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1123cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Surrogate pairs 1124cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1125cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+D800 U+DC00 1126cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1127cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1128cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1129cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xa0\x80\xed\xb0\x80")); 1130cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1131cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+D800 U+DD00 1132cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1133cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1134cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1135cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xa0\x80\xed\xb4\x80")); 1136cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1137cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+D800 U+DFFF 1138cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1139cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1140cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1141cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xa0\x80\xed\xbf\xbf")); 1142cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1143cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DB40 U+DC00 1144cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1145cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1146cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1147cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xac\xa0\xed\xb0\x80")); 1148cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1149cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DB40 U+DD00 1150cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1151cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1152cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1153cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xac\xa0\xed\xb4\x80")); 1154cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1155cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DB40 U+DFFF 1156cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1157cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1158cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1159cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xac\xa0\xed\xbf\xbf")); 1160cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1161cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DBFF U+DC00 1162cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1163cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1164cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1165cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xaf\xbf\xed\xb0\x80")); 1166cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1167cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DBFF U+DD00 1168cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1169cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1170cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1171cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xaf\xbf\xed\xb4\x80")); 1172cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1173cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DBFF U+DFFF 1174cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1175cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceIllegal) 1176cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .withScalars(0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd), 1177cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\xaf\xbf\xed\xbf\xbf")); 1178cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1179cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1180cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Noncharacters 1181cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1182cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1183cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Unicode 6.3.0: 1184cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1185cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // D14. Noncharacter: A code point that is permanently reserved for 1186cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // internal use and that should never be interchanged. Noncharacters 1187cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // consist of the values U+nFFFE and U+nFFFF (where n is from 0 to 1016) 1188cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // and the values U+FDD0..U+FDEF. 1189cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1190cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FFFE 1191cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1192cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfffe), 1193cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xbf\xbe")); 1194cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1195cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FFFF 1196cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1197cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xffff), 1198cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xbf\xbf")); 1199cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1200cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1FFFE 1201cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1202cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x1fffe), 1203cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x9f\xbf\xbe")); 1204cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1205cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+1FFFF 1206cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1207cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x1ffff), 1208cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x9f\xbf\xbf")); 1209cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1210cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+2FFFE 1211cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1212cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x2fffe), 1213cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\xaf\xbf\xbe")); 1214cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1215cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+2FFFF 1216cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1217cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x2ffff), 1218cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\xaf\xbf\xbf")); 1219cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1220cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+3FFFE 1221cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1222cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x3fffe), 1223cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\xbf\xbf\xbe")); 1224cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1225cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+3FFFF 1226cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1227cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x3ffff), 1228cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\xbf\xbf\xbf")); 1229cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1230cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+4FFFE 1231cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1232cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x4fffe), 1233cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\x8f\xbf\xbe")); 1234cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1235cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+4FFFF 1236cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1237cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x4ffff), 1238cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\x8f\xbf\xbf")); 1239cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1240cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+5FFFE 1241cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1242cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x5fffe), 1243cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\x9f\xbf\xbe")); 1244cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1245cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+5FFFF 1246cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1247cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x5ffff), 1248cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\x9f\xbf\xbf")); 1249cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1250cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+6FFFE 1251cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1252cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x6fffe), 1253cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\xaf\xbf\xbe")); 1254cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1255cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+6FFFF 1256cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1257cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x6ffff), 1258cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\xaf\xbf\xbf")); 1259cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1260cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+7FFFE 1261cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1262cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x7fffe), 1263cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\xbf\xbf\xbe")); 1264cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1265cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+7FFFF 1266cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1267cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x7ffff), 1268cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\xbf\xbf\xbf")); 1269cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1270cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+8FFFE 1271cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1272cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x8fffe), 1273cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf2\x8f\xbf\xbe")); 1274cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1275cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+8FFFF 1276cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1277cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x8ffff), 1278cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf2\x8f\xbf\xbf")); 1279cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1280cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+9FFFE 1281cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1282cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x9fffe), 1283cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf2\x9f\xbf\xbe")); 1284cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1285cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+9FFFF 1286cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1287cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x9ffff), 1288cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf2\x9f\xbf\xbf")); 1289cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1290cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+AFFFE 1291cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1292cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xafffe), 1293cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf2\xaf\xbf\xbe")); 1294cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1295cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+AFFFF 1296cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1297cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xaffff), 1298cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf2\xaf\xbf\xbf")); 1299cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1300cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+BFFFE 1301cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1302cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xbfffe), 1303cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf2\xbf\xbf\xbe")); 1304cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1305cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+BFFFF 1306cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1307cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xbffff), 1308cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf2\xbf\xbf\xbf")); 1309cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1310cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+CFFFE 1311cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1312cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xcfffe), 1313cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\x8f\xbf\xbe")); 1314cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1315cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+CFFFF 1316cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1317cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xcfffF), 1318cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\x8f\xbf\xbf")); 1319cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1320cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DFFFE 1321cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1322cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xdfffe), 1323cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\x9f\xbf\xbe")); 1324cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1325cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+DFFFF 1326cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1327cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xdffff), 1328cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\x9f\xbf\xbf")); 1329cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1330cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+EFFFE 1331cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1332cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xefffe), 1333cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\xaf\xbf\xbe")); 1334cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1335cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+EFFFF 1336cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1337cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xeffff), 1338cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\xaf\xbf\xbf")); 1339cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1340cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FFFFE 1341cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1342cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xffffe), 1343cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\xbf\xbf\xbe")); 1344cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1345cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FFFFF 1346cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1347cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfffff), 1348cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\xbf\xbf\xbf")); 1349cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1350cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+10FFFE 1351cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1352cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x10fffe), 1353cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x8f\xbf\xbe")); 1354cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1355cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+10FFFF 1356cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1357cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x10ffff), 1358cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x8f\xbf\xbf")); 1359cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1360cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD0 1361cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1362cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd0), 1363cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x90")); 1364cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1365cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD1 1366cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1367cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd1), 1368cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x91")); 1369cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1370cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD2 1371cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1372cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd2), 1373cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x92")); 1374cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1375cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD3 1376cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1377cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd3), 1378cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x93")); 1379cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1380cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD4 1381cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1382cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd4), 1383cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x94")); 1384cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1385cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD5 1386cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1387cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd5), 1388cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x95")); 1389cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1390cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD6 1391cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1392cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd6), 1393cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x96")); 1394cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1395cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD7 1396cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1397cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd7), 1398cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x97")); 1399cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1400cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD8 1401cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1402cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd8), 1403cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x98")); 1404cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1405cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDD9 1406cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1407cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdd9), 1408cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x99")); 1409cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1410cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDDA 1411cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1412cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdda), 1413cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x9a")); 1414cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1415cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDDB 1416cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1417cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfddb), 1418cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x9b")); 1419cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1420cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDDC 1421cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1422cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfddc), 1423cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x9c")); 1424cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1425cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDDD 1426cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1427cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfddd), 1428cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x9d")); 1429cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1430cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDDE 1431cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1432cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdde), 1433cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x9e")); 1434cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1435cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDDF 1436cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1437cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfddf), 1438cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\x9f")); 1439cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1440cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE0 1441cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1442cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde0), 1443cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa0")); 1444cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1445cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE1 1446cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1447cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde1), 1448cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa1")); 1449cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1450cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE2 1451cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1452cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde2), 1453cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa2")); 1454cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1455cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE3 1456cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1457cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde3), 1458cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa3")); 1459cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1460cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE4 1461cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1462cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde4), 1463cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa4")); 1464cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1465cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE5 1466cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1467cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde5), 1468cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa5")); 1469cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1470cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE6 1471cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1472cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde6), 1473cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa6")); 1474cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1475cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE7 1476cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1477cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde7), 1478cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa7")); 1479cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1480cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE8 1481cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1482cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde8), 1483cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa8")); 1484cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1485cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDE9 1486cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1487cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfde9), 1488cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xa9")); 1489cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1490cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDEA 1491cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1492cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdea), 1493cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xaa")); 1494cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1495cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDEB 1496cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1497cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdeb), 1498cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xab")); 1499cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1500cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDEC 1501cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1502cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdec), 1503cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xac")); 1504cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1505cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDED 1506cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1507cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfded), 1508cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xad")); 1509cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1510cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDEE 1511cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1512cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdee), 1513cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xae")); 1514cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1515cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDEF 1516cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1517cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdef), 1518cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xaf")); 1519cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1520cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF0 1521cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1522cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf0), 1523cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb0")); 1524cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1525cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF1 1526cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1527cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf1), 1528cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb1")); 1529cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1530cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF2 1531cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1532cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf2), 1533cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb2")); 1534cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1535cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF3 1536cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1537cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf3), 1538cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb3")); 1539cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1540cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF4 1541cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1542cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf4), 1543cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb4")); 1544cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1545cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF5 1546cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1547cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf5), 1548cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb5")); 1549cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1550cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF6 1551cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1552cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf6), 1553cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb6")); 1554cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1555cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF7 1556cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1557cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf7), 1558cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb7")); 1559cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1560cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF8 1561cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1562cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf8), 1563cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb8")); 1564cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1565cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDF9 1566cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1567cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdf9), 1568cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xb9")); 1569cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1570cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDFA 1571cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1572cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdfa), 1573cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xba")); 1574cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1575cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDFB 1576cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1577cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdfb), 1578cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xbb")); 1579cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1580cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDFC 1581cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1582cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdfc), 1583cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xbc")); 1584cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1585cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDFD 1586cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1587cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdfd), 1588cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xbd")); 1589cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1590cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDFE 1591cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1592cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdfe), 1593cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xbe")); 1594cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1595cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+FDFF 1596cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1597cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0xfdff), 1598cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xb7\xbf")); 1599cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 1600cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1601cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesTEST(ConvertUTFTest, UTF8ToUTF32PartialLenient) { 1602cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // U+0041 LATIN CAPITAL LETTER A 1603cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1604cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(conversionOK).withScalars(0x0041), 1605cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\x41", true)); 1606cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1607cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1608cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Sequences with one continuation byte missing 1609cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // 1610cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1611cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1612cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1613cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xc2", true)); 1614cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1615cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1616cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xdf", true)); 1617cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1618cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1619cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\xa0", true)); 1620cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1621cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1622cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe0\xbf", true)); 1623cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1624cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1625cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xe1\x80", true)); 1626cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1627cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1628cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xec\xbf", true)); 1629cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1630cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1631cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\x80", true)); 1632cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1633cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1634cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xed\x9f", true)); 1635cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1636cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1637cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xee\x80", true)); 1638cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1639cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1640cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xef\xbf", true)); 1641cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1642cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1643cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\x90\x80", true)); 1644cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1645cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1646cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf0\xbf\xbf", true)); 1647cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1648cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1649cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf1\x80\x80", true)); 1650cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1651cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1652cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf3\xbf\xbf", true)); 1653cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1654cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1655cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x80\x80", true)); 1656cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1657cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted), 1658cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\xf4\x8f\xbf", true)); 1659cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1660cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars( 1661cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ConvertUTFResultContainer(sourceExhausted).withScalars(0x0041), 1662cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\x41\xc2", true)); 1663cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 1664cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 1665