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

Side by Side Diff: third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaperTest.cpp

Issue 2924463002: Fix ShapeResult::OffsetForPosition edge behavior (Closed)
Patch Set: eae review suggestion Created 3 years, 6 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
OLDNEW
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2014 The Chromium 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 "platform/fonts/shaping/HarfBuzzShaper.h" 5 #include "platform/fonts/shaping/HarfBuzzShaper.h"
6 6
7 #include <unicode/uscript.h> 7 #include <unicode/uscript.h>
8 #include "platform/fonts/Font.h" 8 #include "platform/fonts/Font.h"
9 #include "platform/fonts/FontCache.h" 9 #include "platform/fonts/FontCache.h"
10 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h" 10 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h"
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 UChar arabic_string[] = {0x628, 0x64A, 0x629}; 301 UChar arabic_string[] = {0x628, 0x64A, 0x629};
302 TextDirection direction = TextDirection::kRtl; 302 TextDirection direction = TextDirection::kRtl;
303 303
304 HarfBuzzShaper shaper(arabic_string, 3); 304 HarfBuzzShaper shaper(arabic_string, 3);
305 RefPtr<ShapeResult> result = shaper.Shape(&font, direction); 305 RefPtr<ShapeResult> result = shaper.Shape(&font, direction);
306 306
307 EXPECT_EQ(0.0f, result->PositionForOffset(3)); 307 EXPECT_EQ(0.0f, result->PositionForOffset(3));
308 ASSERT_NEAR(result->Width(), result->PositionForOffset(0), 0.1); 308 ASSERT_NEAR(result->Width(), result->PositionForOffset(0), 0.1);
309 } 309 }
310 310
311 TEST_F(HarfBuzzShaperTest, OffsetForPositionMatchesPositionForOffsetLatin) { 311 // A Value-Parameterized Test class to test OffsetForPosition() with
312 // |include_partial_glyphs| parameter.
313 class IncludePartialGlyphs : public HarfBuzzShaperTest,
314 public ::testing::WithParamInterface<bool> {};
315
316 INSTANTIATE_TEST_CASE_P(OffsetForPositionTest,
317 IncludePartialGlyphs,
318 ::testing::Bool());
319
320 TEST_P(IncludePartialGlyphs, OffsetForPositionMatchesPositionForOffsetLatin) {
312 String string = To16Bit("Hello World!", 12); 321 String string = To16Bit("Hello World!", 12);
313 TextDirection direction = TextDirection::kLtr; 322 TextDirection direction = TextDirection::kLtr;
314 323
315 HarfBuzzShaper shaper(string.Characters16(), 12); 324 HarfBuzzShaper shaper(string.Characters16(), 12);
316 RefPtr<ShapeResult> result = shaper.Shape(&font, direction); 325 RefPtr<ShapeResult> result = shaper.Shape(&font, direction);
317 326
318 // Last argument is includePartialGlyphs 327 bool include_partial_glyphs = GetParam();
319 EXPECT_EQ(0u, result->OffsetForPosition(result->PositionForOffset(0), true)); 328 EXPECT_EQ(0u, result->OffsetForPosition(result->PositionForOffset(0),
320 EXPECT_EQ(1u, result->OffsetForPosition(result->PositionForOffset(1), true)); 329 include_partial_glyphs));
321 EXPECT_EQ(2u, result->OffsetForPosition(result->PositionForOffset(2), true)); 330 EXPECT_EQ(1u, result->OffsetForPosition(result->PositionForOffset(1),
322 EXPECT_EQ(3u, result->OffsetForPosition(result->PositionForOffset(3), true)); 331 include_partial_glyphs));
323 EXPECT_EQ(4u, result->OffsetForPosition(result->PositionForOffset(4), true)); 332 EXPECT_EQ(2u, result->OffsetForPosition(result->PositionForOffset(2),
324 EXPECT_EQ(5u, result->OffsetForPosition(result->PositionForOffset(5), true)); 333 include_partial_glyphs));
325 EXPECT_EQ(6u, result->OffsetForPosition(result->PositionForOffset(6), true)); 334 EXPECT_EQ(3u, result->OffsetForPosition(result->PositionForOffset(3),
326 EXPECT_EQ(7u, result->OffsetForPosition(result->PositionForOffset(7), true)); 335 include_partial_glyphs));
327 EXPECT_EQ(8u, result->OffsetForPosition(result->PositionForOffset(8), true)); 336 EXPECT_EQ(4u, result->OffsetForPosition(result->PositionForOffset(4),
328 EXPECT_EQ(9u, result->OffsetForPosition(result->PositionForOffset(9), true)); 337 include_partial_glyphs));
329 EXPECT_EQ(10u, 338 EXPECT_EQ(5u, result->OffsetForPosition(result->PositionForOffset(5),
330 result->OffsetForPosition(result->PositionForOffset(10), true)); 339 include_partial_glyphs));
331 EXPECT_EQ(11u, 340 EXPECT_EQ(6u, result->OffsetForPosition(result->PositionForOffset(6),
332 result->OffsetForPosition(result->PositionForOffset(11), true)); 341 include_partial_glyphs));
333 EXPECT_EQ(12u, 342 EXPECT_EQ(7u, result->OffsetForPosition(result->PositionForOffset(7),
334 result->OffsetForPosition(result->PositionForOffset(12), true)); 343 include_partial_glyphs));
344 EXPECT_EQ(8u, result->OffsetForPosition(result->PositionForOffset(8),
345 include_partial_glyphs));
346 EXPECT_EQ(9u, result->OffsetForPosition(result->PositionForOffset(9),
347 include_partial_glyphs));
348 EXPECT_EQ(10u, result->OffsetForPosition(result->PositionForOffset(10),
349 include_partial_glyphs));
350 EXPECT_EQ(11u, result->OffsetForPosition(result->PositionForOffset(11),
351 include_partial_glyphs));
352 EXPECT_EQ(12u, result->OffsetForPosition(result->PositionForOffset(12),
353 include_partial_glyphs));
335 } 354 }
336 355
337 TEST_F(HarfBuzzShaperTest, OffsetForPositionMatchesPositionForOffsetArabic) { 356 TEST_P(IncludePartialGlyphs, OffsetForPositionMatchesPositionForOffsetArabic) {
338 UChar arabic_string[] = {0x628, 0x64A, 0x629}; 357 UChar arabic_string[] = {0x628, 0x64A, 0x629};
339 TextDirection direction = TextDirection::kRtl; 358 TextDirection direction = TextDirection::kRtl;
340 359
341 HarfBuzzShaper shaper(arabic_string, 3); 360 HarfBuzzShaper shaper(arabic_string, 3);
342 RefPtr<ShapeResult> result = shaper.Shape(&font, direction); 361 RefPtr<ShapeResult> result = shaper.Shape(&font, direction);
343 362
344 // Last argument is includePartialGlyphs 363 bool include_partial_glyphs = GetParam();
345 EXPECT_EQ(0u, result->OffsetForPosition(result->PositionForOffset(0), true)); 364 EXPECT_EQ(0u, result->OffsetForPosition(result->PositionForOffset(0),
346 EXPECT_EQ(1u, result->OffsetForPosition(result->PositionForOffset(1), true)); 365 include_partial_glyphs));
347 EXPECT_EQ(2u, result->OffsetForPosition(result->PositionForOffset(2), true)); 366 EXPECT_EQ(1u, result->OffsetForPosition(result->PositionForOffset(1),
348 EXPECT_EQ(3u, result->OffsetForPosition(result->PositionForOffset(3), true)); 367 include_partial_glyphs));
368 EXPECT_EQ(2u, result->OffsetForPosition(result->PositionForOffset(2),
369 include_partial_glyphs));
370 EXPECT_EQ(3u, result->OffsetForPosition(result->PositionForOffset(3),
371 include_partial_glyphs));
349 } 372 }
350 373
351 TEST_F(HarfBuzzShaperTest, OffsetForPositionMatchesPositionForOffsetMixed) { 374 TEST_P(IncludePartialGlyphs, OffsetForPositionMatchesPositionForOffsetMixed) {
352 UChar mixed_string[] = {0x628, 0x64A, 0x629, 0xE20, 0x65E5, 0x62}; 375 UChar mixed_string[] = {0x628, 0x64A, 0x629, 0xE20, 0x65E5, 0x62};
353 HarfBuzzShaper shaper(mixed_string, 6); 376 HarfBuzzShaper shaper(mixed_string, 6);
354 RefPtr<ShapeResult> result = shaper.Shape(&font, TextDirection::kLtr); 377 RefPtr<ShapeResult> result = shaper.Shape(&font, TextDirection::kLtr);
355 378
356 // Last argument is includePartialGlyphs 379 bool include_partial_glyphs = GetParam();
357 EXPECT_EQ(0u, result->OffsetForPosition(result->PositionForOffset(0), true)); 380 EXPECT_EQ(0u, result->OffsetForPosition(result->PositionForOffset(0),
358 EXPECT_EQ(1u, result->OffsetForPosition(result->PositionForOffset(1), true)); 381 include_partial_glyphs));
359 EXPECT_EQ(2u, result->OffsetForPosition(result->PositionForOffset(2), true)); 382 EXPECT_EQ(1u, result->OffsetForPosition(result->PositionForOffset(1),
360 EXPECT_EQ(3u, result->OffsetForPosition(result->PositionForOffset(3), true)); 383 include_partial_glyphs));
361 EXPECT_EQ(4u, result->OffsetForPosition(result->PositionForOffset(4), true)); 384 EXPECT_EQ(2u, result->OffsetForPosition(result->PositionForOffset(2),
362 EXPECT_EQ(5u, result->OffsetForPosition(result->PositionForOffset(5), true)); 385 include_partial_glyphs));
363 EXPECT_EQ(6u, result->OffsetForPosition(result->PositionForOffset(6), true)); 386 EXPECT_EQ(3u, result->OffsetForPosition(result->PositionForOffset(3),
387 include_partial_glyphs));
388 EXPECT_EQ(4u, result->OffsetForPosition(result->PositionForOffset(4),
389 include_partial_glyphs));
390 EXPECT_EQ(5u, result->OffsetForPosition(result->PositionForOffset(5),
391 include_partial_glyphs));
392 EXPECT_EQ(6u, result->OffsetForPosition(result->PositionForOffset(6),
393 include_partial_glyphs));
364 } 394 }
365 395
366 TEST_F(HarfBuzzShaperTest, ShapeResultCopyRangeIntoLatin) { 396 TEST_F(HarfBuzzShaperTest, ShapeResultCopyRangeIntoLatin) {
367 String string = To16Bit("Testing ShapeResult::createSubRun", 33); 397 String string = To16Bit("Testing ShapeResult::createSubRun", 33);
368 TextDirection direction = TextDirection::kLtr; 398 TextDirection direction = TextDirection::kLtr;
369 399
370 HarfBuzzShaper shaper(string.Characters16(), 33); 400 HarfBuzzShaper shaper(string.Characters16(), 33);
371 RefPtr<ShapeResult> result = shaper.Shape(&font, direction); 401 RefPtr<ShapeResult> result = shaper.Shape(&font, direction);
372 402
373 RefPtr<ShapeResult> composite_result = 403 RefPtr<ShapeResult> composite_result =
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 composite_result->SnappedStartPositionForOffset(5)); 448 composite_result->SnappedStartPositionForOffset(5));
419 EXPECT_EQ(result->SnappedStartPositionForOffset(6), 449 EXPECT_EQ(result->SnappedStartPositionForOffset(6),
420 composite_result->SnappedStartPositionForOffset(6)); 450 composite_result->SnappedStartPositionForOffset(6));
421 EXPECT_EQ(result->SnappedStartPositionForOffset(7), 451 EXPECT_EQ(result->SnappedStartPositionForOffset(7),
422 composite_result->SnappedStartPositionForOffset(7)); 452 composite_result->SnappedStartPositionForOffset(7));
423 EXPECT_EQ(result->SnappedStartPositionForOffset(8), 453 EXPECT_EQ(result->SnappedStartPositionForOffset(8),
424 composite_result->SnappedStartPositionForOffset(8)); 454 composite_result->SnappedStartPositionForOffset(8));
425 } 455 }
426 456
427 } // namespace blink 457 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/TestExpectations ('k') | third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698