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