xref: /aosp_15_r20/frameworks/minikin/tests/unittest/BidiUtilsTest.cpp (revision 834a2baab5fdfc28e9a428ee87c7ea8f6a06a53d)
1*834a2baaSAndroid Build Coastguard Worker /*
2*834a2baaSAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*834a2baaSAndroid Build Coastguard Worker  *
4*834a2baaSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*834a2baaSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*834a2baaSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*834a2baaSAndroid Build Coastguard Worker  *
8*834a2baaSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*834a2baaSAndroid Build Coastguard Worker  *
10*834a2baaSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*834a2baaSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*834a2baaSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*834a2baaSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*834a2baaSAndroid Build Coastguard Worker  * limitations under the License.
15*834a2baaSAndroid Build Coastguard Worker  */
16*834a2baaSAndroid Build Coastguard Worker 
17*834a2baaSAndroid Build Coastguard Worker #include "BidiUtils.h"
18*834a2baaSAndroid Build Coastguard Worker 
19*834a2baaSAndroid Build Coastguard Worker #include <gtest/gtest.h>
20*834a2baaSAndroid Build Coastguard Worker 
21*834a2baaSAndroid Build Coastguard Worker #include "minikin/Range.h"
22*834a2baaSAndroid Build Coastguard Worker 
23*834a2baaSAndroid Build Coastguard Worker #include "UnicodeUtils.h"
24*834a2baaSAndroid Build Coastguard Worker 
25*834a2baaSAndroid Build Coastguard Worker namespace minikin {
26*834a2baaSAndroid Build Coastguard Worker 
27*834a2baaSAndroid Build Coastguard Worker const char LTR_1[] = "Hello, World";
28*834a2baaSAndroid Build Coastguard Worker const char RTL_1[] = "\u0627\u0644\u0633\u0644\u0627\u0645\u0020\u0639\u0644\u064A\u0643\u0645";
29*834a2baaSAndroid Build Coastguard Worker const char LTR_2[] = "Hello, Android";
30*834a2baaSAndroid Build Coastguard Worker const char RTL_2[] = "\u0639\u0644\u064A\u0643\u0645\u0020\u0627\u0644\u0633\u0644\u0627\u0645";
31*834a2baaSAndroid Build Coastguard Worker 
TEST(BidiUtilsTest,AllLTRCharText)32*834a2baaSAndroid Build Coastguard Worker TEST(BidiUtilsTest, AllLTRCharText) {
33*834a2baaSAndroid Build Coastguard Worker     auto text = utf8ToUtf16(LTR_1);
34*834a2baaSAndroid Build Coastguard Worker     uint32_t ltrLength = text.size();
35*834a2baaSAndroid Build Coastguard Worker     {
36*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, ltrLength), Bidi::LTR);
37*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
38*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
39*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
40*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
41*834a2baaSAndroid Build Coastguard Worker         ++it;
42*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
43*834a2baaSAndroid Build Coastguard Worker     }
44*834a2baaSAndroid Build Coastguard Worker     {
45*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, ltrLength), Bidi::RTL);
46*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
47*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
48*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
49*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
50*834a2baaSAndroid Build Coastguard Worker         ++it;
51*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
52*834a2baaSAndroid Build Coastguard Worker     }
53*834a2baaSAndroid Build Coastguard Worker     {
54*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, ltrLength), Bidi::DEFAULT_LTR);
55*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
56*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
57*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
58*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
59*834a2baaSAndroid Build Coastguard Worker         ++it;
60*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
61*834a2baaSAndroid Build Coastguard Worker     }
62*834a2baaSAndroid Build Coastguard Worker     {
63*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, ltrLength), Bidi::DEFAULT_RTL);
64*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
65*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
66*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
67*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
68*834a2baaSAndroid Build Coastguard Worker         ++it;
69*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
70*834a2baaSAndroid Build Coastguard Worker     }
71*834a2baaSAndroid Build Coastguard Worker     {
72*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, ltrLength), Bidi::FORCE_LTR);
73*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
74*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
75*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
76*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
77*834a2baaSAndroid Build Coastguard Worker         ++it;
78*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
79*834a2baaSAndroid Build Coastguard Worker     }
80*834a2baaSAndroid Build Coastguard Worker     {
81*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, ltrLength), Bidi::FORCE_RTL);
82*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
83*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
84*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
85*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
86*834a2baaSAndroid Build Coastguard Worker         ++it;
87*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
88*834a2baaSAndroid Build Coastguard Worker     }
89*834a2baaSAndroid Build Coastguard Worker }
90*834a2baaSAndroid Build Coastguard Worker 
TEST(BidiUtilsTest,AllRTLCharText)91*834a2baaSAndroid Build Coastguard Worker TEST(BidiUtilsTest, AllRTLCharText) {
92*834a2baaSAndroid Build Coastguard Worker     auto text = utf8ToUtf16(RTL_1);
93*834a2baaSAndroid Build Coastguard Worker     uint32_t rtlLength = text.size();
94*834a2baaSAndroid Build Coastguard Worker     {
95*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, rtlLength), Bidi::LTR);
96*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
97*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
98*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
99*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
100*834a2baaSAndroid Build Coastguard Worker         ++it;
101*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
102*834a2baaSAndroid Build Coastguard Worker     }
103*834a2baaSAndroid Build Coastguard Worker     {
104*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, rtlLength), Bidi::RTL);
105*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
106*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
107*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
108*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
109*834a2baaSAndroid Build Coastguard Worker         ++it;
110*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
111*834a2baaSAndroid Build Coastguard Worker     }
112*834a2baaSAndroid Build Coastguard Worker     {
113*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, rtlLength), Bidi::DEFAULT_LTR);
114*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
115*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
116*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
117*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
118*834a2baaSAndroid Build Coastguard Worker         ++it;
119*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
120*834a2baaSAndroid Build Coastguard Worker     }
121*834a2baaSAndroid Build Coastguard Worker     {
122*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, rtlLength), Bidi::DEFAULT_RTL);
123*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
124*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
125*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
126*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
127*834a2baaSAndroid Build Coastguard Worker         ++it;
128*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
129*834a2baaSAndroid Build Coastguard Worker     }
130*834a2baaSAndroid Build Coastguard Worker     {
131*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, rtlLength), Bidi::FORCE_LTR);
132*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
133*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
134*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
135*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
136*834a2baaSAndroid Build Coastguard Worker         ++it;
137*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
138*834a2baaSAndroid Build Coastguard Worker     }
139*834a2baaSAndroid Build Coastguard Worker     {
140*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, rtlLength), Bidi::FORCE_RTL);
141*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
142*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
143*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
144*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
145*834a2baaSAndroid Build Coastguard Worker         ++it;
146*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
147*834a2baaSAndroid Build Coastguard Worker     }
148*834a2baaSAndroid Build Coastguard Worker }
149*834a2baaSAndroid Build Coastguard Worker 
TEST(BidiUtilsTest,LTR_RTL_CharText)150*834a2baaSAndroid Build Coastguard Worker TEST(BidiUtilsTest, LTR_RTL_CharText) {
151*834a2baaSAndroid Build Coastguard Worker     auto text = utf8ToUtf16(std::string(LTR_1) + RTL_1);
152*834a2baaSAndroid Build Coastguard Worker     uint32_t ltrLength = utf8ToUtf16(LTR_1).size();
153*834a2baaSAndroid Build Coastguard Worker     uint32_t rtlLength = utf8ToUtf16(RTL_1).size();
154*834a2baaSAndroid Build Coastguard Worker     {
155*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2
156*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1
157*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::LTR);
158*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
159*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
160*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
161*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
162*834a2baaSAndroid Build Coastguard Worker         ++it;
163*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
164*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltrLength, ltrLength + rtlLength), (*it).range);
165*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
166*834a2baaSAndroid Build Coastguard Worker         ++it;
167*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
168*834a2baaSAndroid Build Coastguard Worker     }
169*834a2baaSAndroid Build Coastguard Worker     {
170*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2
171*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R2 R1 L1 L2
172*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::RTL);
173*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
174*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
175*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltrLength, ltrLength + rtlLength), (*it).range);
176*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
177*834a2baaSAndroid Build Coastguard Worker         ++it;
178*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
179*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
180*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
181*834a2baaSAndroid Build Coastguard Worker         ++it;
182*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
183*834a2baaSAndroid Build Coastguard Worker     }
184*834a2baaSAndroid Build Coastguard Worker     {
185*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2
186*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1
187*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::DEFAULT_LTR);
188*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
189*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
190*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
191*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
192*834a2baaSAndroid Build Coastguard Worker         ++it;
193*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
194*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltrLength, ltrLength + rtlLength), (*it).range);
195*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
196*834a2baaSAndroid Build Coastguard Worker         ++it;
197*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
198*834a2baaSAndroid Build Coastguard Worker     }
199*834a2baaSAndroid Build Coastguard Worker     {
200*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2
201*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1
202*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::DEFAULT_RTL);
203*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
204*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
205*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength), (*it).range);
206*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
207*834a2baaSAndroid Build Coastguard Worker         ++it;
208*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
209*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltrLength, ltrLength + rtlLength), (*it).range);
210*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
211*834a2baaSAndroid Build Coastguard Worker         ++it;
212*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
213*834a2baaSAndroid Build Coastguard Worker     }
214*834a2baaSAndroid Build Coastguard Worker     {
215*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2
216*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R1 R2
217*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::FORCE_LTR);
218*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
219*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
220*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength + rtlLength), (*it).range);
221*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
222*834a2baaSAndroid Build Coastguard Worker         ++it;
223*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
224*834a2baaSAndroid Build Coastguard Worker     }
225*834a2baaSAndroid Build Coastguard Worker     {
226*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2
227*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R2 R1 L2 L1
228*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::FORCE_RTL);
229*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
230*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
231*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength + rtlLength), (*it).range);
232*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
233*834a2baaSAndroid Build Coastguard Worker         ++it;
234*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
235*834a2baaSAndroid Build Coastguard Worker     }
236*834a2baaSAndroid Build Coastguard Worker }
237*834a2baaSAndroid Build Coastguard Worker 
TEST(BidiUtilsTest,RTL_LTR_CharText)238*834a2baaSAndroid Build Coastguard Worker TEST(BidiUtilsTest, RTL_LTR_CharText) {
239*834a2baaSAndroid Build Coastguard Worker     auto text = utf8ToUtf16(std::string(RTL_1) + LTR_1);
240*834a2baaSAndroid Build Coastguard Worker     uint32_t ltrLength = utf8ToUtf16(LTR_1).size();
241*834a2baaSAndroid Build Coastguard Worker     uint32_t rtlLength = utf8ToUtf16(RTL_1).size();
242*834a2baaSAndroid Build Coastguard Worker     {
243*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2
244*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R2 R1 L1 L2
245*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::LTR);
246*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
247*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
248*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
249*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
250*834a2baaSAndroid Build Coastguard Worker         ++it;
251*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
252*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtlLength, ltrLength + rtlLength), (*it).range);
253*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
254*834a2baaSAndroid Build Coastguard Worker         ++it;
255*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
256*834a2baaSAndroid Build Coastguard Worker     }
257*834a2baaSAndroid Build Coastguard Worker     {
258*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2
259*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1
260*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::RTL);
261*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
262*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
263*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtlLength, ltrLength + rtlLength), (*it).range);
264*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
265*834a2baaSAndroid Build Coastguard Worker         ++it;
266*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
267*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
268*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
269*834a2baaSAndroid Build Coastguard Worker         ++it;
270*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
271*834a2baaSAndroid Build Coastguard Worker     }
272*834a2baaSAndroid Build Coastguard Worker     {
273*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2
274*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1
275*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::DEFAULT_LTR);
276*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
277*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
278*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtlLength, ltrLength + rtlLength), (*it).range);
279*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
280*834a2baaSAndroid Build Coastguard Worker         ++it;
281*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
282*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
283*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
284*834a2baaSAndroid Build Coastguard Worker         ++it;
285*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
286*834a2baaSAndroid Build Coastguard Worker     }
287*834a2baaSAndroid Build Coastguard Worker     {
288*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2
289*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1
290*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::DEFAULT_RTL);
291*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
292*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
293*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtlLength, ltrLength + rtlLength), (*it).range);
294*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
295*834a2baaSAndroid Build Coastguard Worker         ++it;
296*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
297*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtlLength), (*it).range);
298*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
299*834a2baaSAndroid Build Coastguard Worker         ++it;
300*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
301*834a2baaSAndroid Build Coastguard Worker     }
302*834a2baaSAndroid Build Coastguard Worker     {
303*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2
304*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R1 R2 L1 L2
305*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::FORCE_LTR);
306*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
307*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
308*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength + rtlLength), (*it).range);
309*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
310*834a2baaSAndroid Build Coastguard Worker         ++it;
311*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
312*834a2baaSAndroid Build Coastguard Worker     }
313*834a2baaSAndroid Build Coastguard Worker     {
314*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2
315*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L2 L1 R2 R1
316*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::FORCE_RTL);
317*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
318*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
319*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltrLength + rtlLength), (*it).range);
320*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
321*834a2baaSAndroid Build Coastguard Worker         ++it;
322*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
323*834a2baaSAndroid Build Coastguard Worker     }
324*834a2baaSAndroid Build Coastguard Worker }
325*834a2baaSAndroid Build Coastguard Worker 
TEST(BidiUtilsTest,LTR_RTL_LTR_CharText)326*834a2baaSAndroid Build Coastguard Worker TEST(BidiUtilsTest, LTR_RTL_LTR_CharText) {
327*834a2baaSAndroid Build Coastguard Worker     auto text = utf8ToUtf16(std::string(LTR_1) + RTL_1 + LTR_2);
328*834a2baaSAndroid Build Coastguard Worker     uint32_t ltr1Length = utf8ToUtf16(LTR_1).size();
329*834a2baaSAndroid Build Coastguard Worker     uint32_t ltr2Length = utf8ToUtf16(LTR_2).size();
330*834a2baaSAndroid Build Coastguard Worker     uint32_t rtlLength = utf8ToUtf16(RTL_1).size();
331*834a2baaSAndroid Build Coastguard Worker     {
332*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2 L3 L4
333*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1 L3 L4
334*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::LTR);
335*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
336*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
337*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltr1Length), (*it).range);
338*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
339*834a2baaSAndroid Build Coastguard Worker         ++it;
340*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
341*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltr1Length, ltr1Length + rtlLength), (*it).range);
342*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
343*834a2baaSAndroid Build Coastguard Worker         ++it;
344*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
345*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltr1Length + rtlLength, ltr1Length + rtlLength + ltr2Length), (*it).range);
346*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
347*834a2baaSAndroid Build Coastguard Worker         ++it;
348*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
349*834a2baaSAndroid Build Coastguard Worker     }
350*834a2baaSAndroid Build Coastguard Worker     {
351*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2 L3 L4
352*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L3 L4 R2 R1 L1 2L
353*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::RTL);
354*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
355*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
356*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltr1Length + rtlLength, text.size()), (*it).range);
357*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
358*834a2baaSAndroid Build Coastguard Worker         ++it;
359*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
360*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltr1Length, ltr1Length + rtlLength), (*it).range);
361*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
362*834a2baaSAndroid Build Coastguard Worker         ++it;
363*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
364*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltr1Length), (*it).range);
365*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
366*834a2baaSAndroid Build Coastguard Worker         ++it;
367*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
368*834a2baaSAndroid Build Coastguard Worker     }
369*834a2baaSAndroid Build Coastguard Worker     {
370*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2 L3 L4
371*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1 L3 L4
372*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::DEFAULT_LTR);
373*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
374*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
375*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltr1Length), (*it).range);
376*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
377*834a2baaSAndroid Build Coastguard Worker         ++it;
378*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
379*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltr1Length, ltr1Length + rtlLength), (*it).range);
380*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
381*834a2baaSAndroid Build Coastguard Worker         ++it;
382*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
383*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltr1Length + rtlLength, ltr1Length + rtlLength + ltr2Length), (*it).range);
384*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
385*834a2baaSAndroid Build Coastguard Worker         ++it;
386*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
387*834a2baaSAndroid Build Coastguard Worker     }
388*834a2baaSAndroid Build Coastguard Worker     {
389*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2 L3 L4
390*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1 L3 L4
391*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::DEFAULT_RTL);
392*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
393*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
394*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltr1Length), (*it).range);
395*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
396*834a2baaSAndroid Build Coastguard Worker         ++it;
397*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
398*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltr1Length, ltr1Length + rtlLength), (*it).range);
399*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
400*834a2baaSAndroid Build Coastguard Worker         ++it;
401*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
402*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(ltr1Length + rtlLength, ltr1Length + rtlLength + ltr2Length), (*it).range);
403*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
404*834a2baaSAndroid Build Coastguard Worker         ++it;
405*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
406*834a2baaSAndroid Build Coastguard Worker     }
407*834a2baaSAndroid Build Coastguard Worker     {
408*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2 L3 L4
409*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1 L3 L4
410*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::FORCE_LTR);
411*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
412*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
413*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltr1Length + rtlLength + ltr2Length), (*it).range);
414*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
415*834a2baaSAndroid Build Coastguard Worker         ++it;
416*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
417*834a2baaSAndroid Build Coastguard Worker     }
418*834a2baaSAndroid Build Coastguard Worker     {
419*834a2baaSAndroid Build Coastguard Worker         // Logical Run: L1 L2 R1 R2 L3 L4
420*834a2baaSAndroid Build Coastguard Worker         // Visual Run : L1 L2 R2 R1 L3 L4
421*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::FORCE_RTL);
422*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
423*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
424*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, ltr1Length + rtlLength + ltr2Length), (*it).range);
425*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
426*834a2baaSAndroid Build Coastguard Worker         ++it;
427*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
428*834a2baaSAndroid Build Coastguard Worker     }
429*834a2baaSAndroid Build Coastguard Worker }
430*834a2baaSAndroid Build Coastguard Worker 
TEST(BidiUtilsTest,RTL_LTR_RTL_CharText)431*834a2baaSAndroid Build Coastguard Worker TEST(BidiUtilsTest, RTL_LTR_RTL_CharText) {
432*834a2baaSAndroid Build Coastguard Worker     auto text = utf8ToUtf16(std::string(RTL_1) + LTR_1 + RTL_2);
433*834a2baaSAndroid Build Coastguard Worker     uint32_t ltrLength = utf8ToUtf16(LTR_1).size();
434*834a2baaSAndroid Build Coastguard Worker     uint32_t rtl1Length = utf8ToUtf16(RTL_1).size();
435*834a2baaSAndroid Build Coastguard Worker     uint32_t rtl2Length = utf8ToUtf16(RTL_2).size();
436*834a2baaSAndroid Build Coastguard Worker     {
437*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2 R3 R4
438*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R2 R1 L1 L2 R4 R3
439*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::LTR);
440*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
441*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
442*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtl1Length), (*it).range);
443*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
444*834a2baaSAndroid Build Coastguard Worker         ++it;
445*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
446*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtl1Length, ltrLength + rtl1Length), (*it).range);
447*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
448*834a2baaSAndroid Build Coastguard Worker         ++it;
449*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
450*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtl1Length + ltrLength, text.size()), (*it).range);
451*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
452*834a2baaSAndroid Build Coastguard Worker         ++it;
453*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
454*834a2baaSAndroid Build Coastguard Worker     }
455*834a2baaSAndroid Build Coastguard Worker     {
456*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2 R3 R4
457*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R4 R3 L1 L2 R2 R1
458*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::RTL);
459*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
460*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
461*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtl1Length + ltrLength, text.size()), (*it).range);
462*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
463*834a2baaSAndroid Build Coastguard Worker         ++it;
464*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
465*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtl1Length, ltrLength + rtl1Length), (*it).range);
466*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
467*834a2baaSAndroid Build Coastguard Worker         ++it;
468*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
469*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtl1Length), (*it).range);
470*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
471*834a2baaSAndroid Build Coastguard Worker         ++it;
472*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
473*834a2baaSAndroid Build Coastguard Worker     }
474*834a2baaSAndroid Build Coastguard Worker     {
475*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2 R3 R4
476*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R4 R3 L1 L2 R2 R1
477*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::DEFAULT_LTR);
478*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
479*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
480*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtl1Length + ltrLength, text.size()), (*it).range);
481*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
482*834a2baaSAndroid Build Coastguard Worker         ++it;
483*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
484*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtl1Length, ltrLength + rtl1Length), (*it).range);
485*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
486*834a2baaSAndroid Build Coastguard Worker         ++it;
487*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
488*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtl1Length), (*it).range);
489*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
490*834a2baaSAndroid Build Coastguard Worker         ++it;
491*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
492*834a2baaSAndroid Build Coastguard Worker     }
493*834a2baaSAndroid Build Coastguard Worker     {
494*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2 R3 R4
495*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R4 R3 L1 L2 R2 R1
496*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::DEFAULT_RTL);
497*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
498*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
499*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtl1Length + ltrLength, text.size()), (*it).range);
500*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
501*834a2baaSAndroid Build Coastguard Worker         ++it;
502*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
503*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(rtl1Length, ltrLength + rtl1Length), (*it).range);
504*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
505*834a2baaSAndroid Build Coastguard Worker         ++it;
506*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
507*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtl1Length), (*it).range);
508*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
509*834a2baaSAndroid Build Coastguard Worker         ++it;
510*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
511*834a2baaSAndroid Build Coastguard Worker     }
512*834a2baaSAndroid Build Coastguard Worker     {
513*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2 R3 R4
514*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R1 R2 L1 L2 R3 R4
515*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::FORCE_LTR);
516*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
517*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
518*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtl1Length + ltrLength + rtl2Length), (*it).range);
519*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE((*it).isRtl);
520*834a2baaSAndroid Build Coastguard Worker         ++it;
521*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
522*834a2baaSAndroid Build Coastguard Worker     }
523*834a2baaSAndroid Build Coastguard Worker     {
524*834a2baaSAndroid Build Coastguard Worker         // Logical Run: R1 R2 L1 L2 R3 R4
525*834a2baaSAndroid Build Coastguard Worker         // Visual Run : R4 R3 L2 L1 R2 R1
526*834a2baaSAndroid Build Coastguard Worker         BidiText bidiText(text, Range(0, text.size()), Bidi::FORCE_RTL);
527*834a2baaSAndroid Build Coastguard Worker         auto it = bidiText.begin();
528*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(bidiText.end(), it);
529*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(Range(0, rtl1Length + ltrLength + rtl2Length), (*it).range);
530*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE((*it).isRtl);
531*834a2baaSAndroid Build Coastguard Worker         ++it;
532*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(bidiText.end(), it);
533*834a2baaSAndroid Build Coastguard Worker     }
534*834a2baaSAndroid Build Coastguard Worker }
535*834a2baaSAndroid Build Coastguard Worker 
536*834a2baaSAndroid Build Coastguard Worker }  // namespace minikin
537