Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(268)

Side by Side Diff: core/src/fxcrt/fx_bidi_unittest.cpp

Issue 1682983002: Make fx_bidi sane. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Address issues in c#5. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fxcrt/fx_bidi.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 PDFium Authors. All rights reserved. 1 // Copyright 2015 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/include/fxcrt/fx_bidi.h" 5 #include "core/include/fxcrt/fx_bidi.h"
6 #include "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
7 7
8 namespace { 8 namespace {
9 9
10 const FX_WCHAR kNeutralChar = 32; 10 const FX_WCHAR kNeutralChar = 32;
11 const FX_WCHAR kLeftChar = 65; 11 const FX_WCHAR kLeftChar = 65;
12 const FX_WCHAR kRightChar = 1424; 12 const FX_WCHAR kRightChar = 1424;
13 13
14 } // namespace 14 } // namespace
15 15
16 TEST(fxcrt, BidiCharEmpty) { 16 TEST(fxcrt, BidiCharEmpty) {
17 int32_t start = -1;
18 int32_t count = -1;
19 CFX_BidiChar bidi; 17 CFX_BidiChar bidi;
20 CFX_BidiChar::Direction dir = bidi.GetBidiInfo(nullptr, nullptr); 18 CFX_BidiChar::Segment info;
21 EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); 19
22 20 info = bidi.GetSegmentInfo();
23 dir = bidi.GetBidiInfo(&start, nullptr); 21 EXPECT_EQ(CFX_BidiChar::NEUTRAL, info.direction);
24 EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); 22 EXPECT_EQ(0, info.start);
25 EXPECT_EQ(0, start); 23 EXPECT_EQ(0, info.count);
26
27 dir = bidi.GetBidiInfo(nullptr, &count);
28 EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir);
29 EXPECT_EQ(0, count);
30
31 start = -1;
32 count = -1;
33 dir = bidi.GetBidiInfo(&start, &count);
34 EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir);
35 EXPECT_EQ(0, start);
36 EXPECT_EQ(0, count);
37
38 EXPECT_FALSE(bidi.EndChar()); 24 EXPECT_FALSE(bidi.EndChar());
39 } 25 }
40 26
41 TEST(fxcrt, BidiCharLeft) { 27 TEST(fxcrt, BidiCharLeft) {
42 int32_t start = -1;
43 int32_t count = -1;
44 CFX_BidiChar bidi; 28 CFX_BidiChar bidi;
29 CFX_BidiChar::Segment info;
45 30
46 EXPECT_TRUE(bidi.AppendChar(kLeftChar)); 31 EXPECT_TRUE(bidi.AppendChar(kLeftChar));
47 CFX_BidiChar::Direction dir = bidi.GetBidiInfo(&start, &count); 32 info = bidi.GetSegmentInfo();
48 EXPECT_EQ(0, start); 33 EXPECT_EQ(0, info.start);
49 EXPECT_EQ(0, count); 34 EXPECT_EQ(0, info.count);
50 35
51 EXPECT_FALSE(bidi.AppendChar(kLeftChar)); 36 EXPECT_FALSE(bidi.AppendChar(kLeftChar));
52 EXPECT_FALSE(bidi.AppendChar(kLeftChar)); 37 EXPECT_FALSE(bidi.AppendChar(kLeftChar));
53 38
54 dir = bidi.GetBidiInfo(&start, &count); 39 info = bidi.GetSegmentInfo();
55 EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); 40 EXPECT_EQ(CFX_BidiChar::NEUTRAL, info.direction);
56 EXPECT_EQ(0, start); 41 EXPECT_EQ(0, info.start);
57 EXPECT_EQ(0, count); 42 EXPECT_EQ(0, info.count);
58 43
59 EXPECT_TRUE(bidi.EndChar()); 44 EXPECT_TRUE(bidi.EndChar());
60 dir = bidi.GetBidiInfo(&start, &count); 45 info = bidi.GetSegmentInfo();
61 EXPECT_EQ(CFX_BidiChar::LEFT, dir); 46 EXPECT_EQ(CFX_BidiChar::LEFT, info.direction);
62 EXPECT_EQ(0, start); 47 EXPECT_EQ(0, info.start);
63 EXPECT_EQ(3, count); 48 EXPECT_EQ(3, info.count);
64 49
65 EXPECT_FALSE(bidi.EndChar()); 50 EXPECT_FALSE(bidi.EndChar());
66 } 51 }
67 52
68 TEST(fxcrt, BidiCharLeftNeutralRight) { 53 TEST(fxcrt, BidiCharLeftNeutralRight) {
69 int32_t start = -1;
70 int32_t count = -1;
71 CFX_BidiChar bidi; 54 CFX_BidiChar bidi;
55 CFX_BidiChar::Segment info;
72 56
73 EXPECT_TRUE(bidi.AppendChar(kLeftChar)); 57 EXPECT_TRUE(bidi.AppendChar(kLeftChar));
74 CFX_BidiChar::Direction dir = bidi.GetBidiInfo(&start, &count); 58 info = bidi.GetSegmentInfo();
75 EXPECT_EQ(0, start); 59 EXPECT_EQ(0, info.start);
76 EXPECT_EQ(0, count); 60 EXPECT_EQ(0, info.count);
77 61
78 EXPECT_FALSE(bidi.AppendChar(kLeftChar)); 62 EXPECT_FALSE(bidi.AppendChar(kLeftChar));
79 EXPECT_FALSE(bidi.AppendChar(kLeftChar)); 63 EXPECT_FALSE(bidi.AppendChar(kLeftChar));
80 EXPECT_TRUE(bidi.AppendChar(kNeutralChar)); 64 EXPECT_TRUE(bidi.AppendChar(kNeutralChar));
81 dir = bidi.GetBidiInfo(&start, &count); 65 info = bidi.GetSegmentInfo();
82 EXPECT_EQ(0, start); 66 EXPECT_EQ(0, info.start);
83 EXPECT_EQ(3, count); 67 EXPECT_EQ(3, info.count);
84 68
85 EXPECT_FALSE(bidi.AppendChar(kNeutralChar)); 69 EXPECT_FALSE(bidi.AppendChar(kNeutralChar));
86 EXPECT_FALSE(bidi.AppendChar(kNeutralChar)); 70 EXPECT_FALSE(bidi.AppendChar(kNeutralChar));
87 EXPECT_FALSE(bidi.AppendChar(kNeutralChar)); 71 EXPECT_FALSE(bidi.AppendChar(kNeutralChar));
88 EXPECT_TRUE(bidi.AppendChar(kRightChar)); 72 EXPECT_TRUE(bidi.AppendChar(kRightChar));
89 dir = bidi.GetBidiInfo(&start, &count); 73 info = bidi.GetSegmentInfo();
90 EXPECT_EQ(CFX_BidiChar::NEUTRAL, dir); 74 EXPECT_EQ(CFX_BidiChar::NEUTRAL, info.direction);
91 EXPECT_EQ(3, start); 75 EXPECT_EQ(3, info.start);
92 EXPECT_EQ(4, count); 76 EXPECT_EQ(4, info.count);
93 77
94 EXPECT_TRUE(bidi.EndChar()); 78 EXPECT_TRUE(bidi.EndChar());
95 dir = bidi.GetBidiInfo(&start, &count); 79 info = bidi.GetSegmentInfo();
96 EXPECT_EQ(CFX_BidiChar::RIGHT, dir); 80 EXPECT_EQ(CFX_BidiChar::RIGHT, info.direction);
97 EXPECT_EQ(7, start); 81 EXPECT_EQ(7, info.start);
98 EXPECT_EQ(1, count); 82 EXPECT_EQ(1, info.count);
99 83
100 EXPECT_FALSE(bidi.EndChar()); 84 EXPECT_FALSE(bidi.EndChar());
101 } 85 }
102 86
103 TEST(fxcrt, BidiCharLeftRightLeft) { 87 TEST(fxcrt, BidiCharLeftRightLeft) {
104 int32_t start = -1;
105 int32_t count = -1;
106 CFX_BidiChar bidi; 88 CFX_BidiChar bidi;
89 CFX_BidiChar::Segment info;
107 90
108 EXPECT_TRUE(bidi.AppendChar(kLeftChar)); 91 EXPECT_TRUE(bidi.AppendChar(kLeftChar));
109 CFX_BidiChar::Direction dir = bidi.GetBidiInfo(&start, &count); 92 info = bidi.GetSegmentInfo();
110 EXPECT_EQ(0, start); 93 EXPECT_EQ(0, info.start);
111 EXPECT_EQ(0, count); 94 EXPECT_EQ(0, info.count);
112 95
113 EXPECT_FALSE(bidi.AppendChar(kLeftChar)); 96 EXPECT_FALSE(bidi.AppendChar(kLeftChar));
114 EXPECT_FALSE(bidi.AppendChar(kLeftChar)); 97 EXPECT_FALSE(bidi.AppendChar(kLeftChar));
115 EXPECT_TRUE(bidi.AppendChar(kRightChar)); 98 EXPECT_TRUE(bidi.AppendChar(kRightChar));
116 dir = bidi.GetBidiInfo(&start, &count); 99 info = bidi.GetSegmentInfo();
117 EXPECT_EQ(0, start); 100 EXPECT_EQ(0, info.start);
118 EXPECT_EQ(3, count); 101 EXPECT_EQ(3, info.count);
119 102
120 EXPECT_FALSE(bidi.AppendChar(kRightChar)); 103 EXPECT_FALSE(bidi.AppendChar(kRightChar));
121 EXPECT_FALSE(bidi.AppendChar(kRightChar)); 104 EXPECT_FALSE(bidi.AppendChar(kRightChar));
122 EXPECT_FALSE(bidi.AppendChar(kRightChar)); 105 EXPECT_FALSE(bidi.AppendChar(kRightChar));
123 EXPECT_TRUE(bidi.AppendChar(kLeftChar)); 106 EXPECT_TRUE(bidi.AppendChar(kLeftChar));
124 dir = bidi.GetBidiInfo(&start, &count); 107 info = bidi.GetSegmentInfo();
125 EXPECT_EQ(CFX_BidiChar::RIGHT, dir); 108 EXPECT_EQ(CFX_BidiChar::RIGHT, info.direction);
126 EXPECT_EQ(3, start); 109 EXPECT_EQ(3, info.start);
127 EXPECT_EQ(4, count); 110 EXPECT_EQ(4, info.count);
128 111
129 EXPECT_TRUE(bidi.EndChar()); 112 EXPECT_TRUE(bidi.EndChar());
130 dir = bidi.GetBidiInfo(&start, &count); 113 info = bidi.GetSegmentInfo();
131 EXPECT_EQ(CFX_BidiChar::LEFT, dir); 114 EXPECT_EQ(CFX_BidiChar::LEFT, info.direction);
132 EXPECT_EQ(7, start); 115 EXPECT_EQ(7, info.start);
133 EXPECT_EQ(1, count); 116 EXPECT_EQ(1, info.count);
134 117
135 EXPECT_FALSE(bidi.EndChar()); 118 EXPECT_FALSE(bidi.EndChar());
136 } 119 }
120
121 TEST(fxcrt, BidiStringEmpty) {
122 CFX_BidiString bidi(L"");
123 EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
124 EXPECT_TRUE(bidi.begin() == bidi.end());
125 }
126
127 TEST(fxcrt, BidiStringAllNeutral) {
128 {
129 const FX_WCHAR str[] = {kNeutralChar, 0};
130 CFX_BidiString bidi(str);
131 EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
132
133 auto it = bidi.begin();
134 ASSERT_FALSE(it == bidi.end());
135 EXPECT_EQ(0, it->start);
136 EXPECT_EQ(1, it->count);
137 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
138 ++it;
139 EXPECT_TRUE(it == bidi.end());
140 }
141 {
142 const FX_WCHAR str[] = {kNeutralChar, kNeutralChar, kNeutralChar, 0};
143 CFX_BidiString bidi(str);
144 EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
145
146 auto it = bidi.begin();
147 ASSERT_FALSE(it == bidi.end());
148 EXPECT_EQ(0, it->start);
149 EXPECT_EQ(3, it->count);
150 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
151 ++it;
152 EXPECT_TRUE(it == bidi.end());
153 }
154 }
155
156 TEST(fxcrt, BidiStringAllLeft) {
157 {
158 const FX_WCHAR str[] = {kLeftChar, 0};
159 CFX_BidiString bidi(str);
160 EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
161
162 auto it = bidi.begin();
163 ASSERT_FALSE(it == bidi.end());
164 EXPECT_EQ(0, it->start);
165 EXPECT_EQ(0, it->count);
166 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
167 ASSERT_FALSE(it == bidi.end());
168
169 ++it;
170 EXPECT_EQ(0, it->start);
171 EXPECT_EQ(1, it->count);
172 EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
173 ASSERT_FALSE(it == bidi.end());
174
175 ++it;
176 EXPECT_TRUE(it == bidi.end());
177 }
178 {
179 const FX_WCHAR str[] = {kLeftChar, kLeftChar, kLeftChar, 0};
180 CFX_BidiString bidi(str);
181 EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
182
183 auto it = bidi.begin();
184 ASSERT_FALSE(it == bidi.end());
185 EXPECT_EQ(0, it->start);
186 EXPECT_EQ(0, it->count);
187 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
188 ASSERT_FALSE(it == bidi.end());
189
190 ++it;
191 EXPECT_EQ(0, it->start);
192 EXPECT_EQ(3, it->count);
193 EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
194 ASSERT_FALSE(it == bidi.end());
195
196 ++it;
197 EXPECT_TRUE(it == bidi.end());
198 }
199 }
200
201 TEST(fxcrt, BidiStringAllRight) {
202 {
203 const FX_WCHAR str[] = {kRightChar, 0};
204 CFX_BidiString bidi(str);
205 EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection());
206
207 auto it = bidi.begin();
208 EXPECT_EQ(0, it->start);
209 EXPECT_EQ(1, it->count);
210 EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
211 ASSERT_FALSE(it == bidi.end());
212
213 ++it;
214 ASSERT_FALSE(it == bidi.end());
215 EXPECT_EQ(0, it->start);
216 EXPECT_EQ(0, it->count);
217 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
218 ASSERT_FALSE(it == bidi.end());
219
220 ++it;
221 EXPECT_TRUE(it == bidi.end());
222 }
223 {
224 const FX_WCHAR str[] = {kRightChar, kRightChar, kRightChar, 0};
225 CFX_BidiString bidi(str);
226 EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection());
227
228 auto it = bidi.begin();
229 EXPECT_EQ(0, it->start);
230 EXPECT_EQ(3, it->count);
231 EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
232 ASSERT_FALSE(it == bidi.end());
233
234 ++it;
235 ASSERT_FALSE(it == bidi.end());
236 EXPECT_EQ(0, it->start);
237 EXPECT_EQ(0, it->count);
238 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
239 ASSERT_FALSE(it == bidi.end());
240
241 ++it;
242 EXPECT_TRUE(it == bidi.end());
243 }
244 }
245
246 TEST(fxcrt, BidiStringLeftNeutralLeftRight) {
247 const FX_WCHAR str[] = {kLeftChar, kNeutralChar, kLeftChar, kRightChar, 0};
248 CFX_BidiString bidi(str);
249 EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
250
251 auto it = bidi.begin();
252 ASSERT_FALSE(it == bidi.end());
253 EXPECT_EQ(0, it->start);
254 EXPECT_EQ(0, it->count);
255 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
256 ASSERT_FALSE(it == bidi.end());
257
258 ++it;
259 EXPECT_EQ(0, it->start);
260 EXPECT_EQ(1, it->count);
261 EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
262 ASSERT_FALSE(it == bidi.end());
263
264 ++it;
265 EXPECT_EQ(1, it->start);
266 EXPECT_EQ(1, it->count);
267 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
268 ASSERT_FALSE(it == bidi.end());
269
270 ++it;
271 EXPECT_EQ(2, it->start);
272 EXPECT_EQ(1, it->count);
273 EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
274 ASSERT_FALSE(it == bidi.end());
275
276 ++it;
277 EXPECT_EQ(3, it->start);
278 EXPECT_EQ(1, it->count);
279 EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
280 ASSERT_FALSE(it == bidi.end());
281
282 ++it;
283 EXPECT_TRUE(it == bidi.end());
284 }
285
286 TEST(fxcrt, BidiStringRightNeutralLeftRight) {
287 const FX_WCHAR str[] = {kRightChar, kNeutralChar, kLeftChar, kRightChar, 0};
288 CFX_BidiString bidi(str);
289 EXPECT_EQ(CFX_BidiChar::RIGHT, bidi.OverallDirection());
290
291 auto it = bidi.begin();
292 EXPECT_EQ(3, it->start);
293 EXPECT_EQ(1, it->count);
294 EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
295 ASSERT_FALSE(it == bidi.end());
296
297 ++it;
298 EXPECT_EQ(2, it->start);
299 EXPECT_EQ(1, it->count);
300 EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
301 ASSERT_FALSE(it == bidi.end());
302
303 ++it;
304 EXPECT_EQ(1, it->start);
305 EXPECT_EQ(1, it->count);
306 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
307 ASSERT_FALSE(it == bidi.end());
308
309 ++it;
310 EXPECT_EQ(0, it->start);
311 EXPECT_EQ(1, it->count);
312 EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
313 ASSERT_FALSE(it == bidi.end());
314
315 ++it;
316 ASSERT_FALSE(it == bidi.end());
317 EXPECT_EQ(0, it->start);
318 EXPECT_EQ(0, it->count);
319 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
320 ASSERT_FALSE(it == bidi.end());
321
322 ++it;
323 EXPECT_TRUE(it == bidi.end());
324 }
325
326 TEST(fxcrt, BidiStringReverse) {
327 const FX_WCHAR str[] = {kLeftChar, kNeutralChar, kRightChar, kLeftChar, 0};
328 CFX_BidiString bidi(str);
329 EXPECT_EQ(CFX_BidiChar::LEFT, bidi.OverallDirection());
330 bidi.SetOverallDirectionRight();
331
332 auto it = bidi.begin();
333 ASSERT_FALSE(it == bidi.end());
334 EXPECT_EQ(3, it->start);
335 EXPECT_EQ(1, it->count);
336 EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
337
338 ++it;
339 ASSERT_FALSE(it == bidi.end());
340 EXPECT_EQ(2, it->start);
341 EXPECT_EQ(1, it->count);
342 EXPECT_EQ(CFX_BidiChar::RIGHT, it->direction);
343 ASSERT_FALSE(it == bidi.end());
344
345 ++it;
346 ASSERT_FALSE(it == bidi.end());
347 EXPECT_EQ(1, it->start);
348 EXPECT_EQ(1, it->count);
349 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
350
351 ++it;
352 ASSERT_FALSE(it == bidi.end());
353 EXPECT_EQ(0, it->start);
354 EXPECT_EQ(1, it->count);
355 EXPECT_EQ(CFX_BidiChar::LEFT, it->direction);
356
357 ++it;
358 ASSERT_FALSE(it == bidi.end());
359 EXPECT_EQ(0, it->start);
360 EXPECT_EQ(0, it->count);
361 EXPECT_EQ(CFX_BidiChar::NEUTRAL, it->direction);
362
363 ++it;
364 EXPECT_TRUE(it == bidi.end());
365 }
OLDNEW
« no previous file with comments | « core/src/fxcrt/fx_bidi.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698