| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 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/fxcrt/include/fx_basic.h" | 5 #include "core/fxcrt/include/fx_basic.h" |
| 6 #include "testing/fx_string_testhelpers.h" | 6 #include "testing/fx_string_testhelpers.h" |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 | 8 |
| 9 TEST(fxcrt, WideStringOperatorSubscript) { | 9 TEST(fxcrt, WideStringOperatorSubscript) { |
| 10 // CFX_WideString includes the NUL terminator for non-empty strings. | 10 // CFX_WideString includes the NUL terminator for non-empty strings. |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 | 465 |
| 466 CFX_WideString empty; | 466 CFX_WideString empty; |
| 467 empty.TrimRight(L"ERP"); | 467 empty.TrimRight(L"ERP"); |
| 468 EXPECT_EQ(L"", empty); | 468 EXPECT_EQ(L"", empty); |
| 469 empty.TrimRight(L'E'); | 469 empty.TrimRight(L'E'); |
| 470 EXPECT_EQ(L"", empty); | 470 EXPECT_EQ(L"", empty); |
| 471 empty.TrimRight(); | 471 empty.TrimRight(); |
| 472 EXPECT_EQ(L"", empty); | 472 EXPECT_EQ(L"", empty); |
| 473 } | 473 } |
| 474 | 474 |
| 475 TEST(fxcrt, WideStringTrimRightCopies) { |
| 476 { |
| 477 // With a single reference, no copy takes place. |
| 478 CFX_WideString fred(L" FRED "); |
| 479 const FX_WCHAR* old_buffer = fred.c_str(); |
| 480 fred.TrimRight(); |
| 481 EXPECT_EQ(L" FRED", fred); |
| 482 EXPECT_EQ(old_buffer, fred.c_str()); |
| 483 } |
| 484 { |
| 485 // With multiple references, we must copy. |
| 486 CFX_WideString fred(L" FRED "); |
| 487 CFX_WideString other_fred = fred; |
| 488 const FX_WCHAR* old_buffer = fred.c_str(); |
| 489 fred.TrimRight(); |
| 490 EXPECT_EQ(L" FRED", fred); |
| 491 EXPECT_EQ(L" FRED ", other_fred); |
| 492 EXPECT_NE(old_buffer, fred.c_str()); |
| 493 } |
| 494 { |
| 495 // With multiple references, but no modifications, no copy. |
| 496 CFX_WideString fred(L"FRED"); |
| 497 CFX_WideString other_fred = fred; |
| 498 const FX_WCHAR* old_buffer = fred.c_str(); |
| 499 fred.TrimRight(); |
| 500 EXPECT_EQ(L"FRED", fred); |
| 501 EXPECT_EQ(L"FRED", other_fred); |
| 502 EXPECT_EQ(old_buffer, fred.c_str()); |
| 503 } |
| 504 } |
| 505 |
| 475 TEST(fxcrt, WideStringTrimLeft) { | 506 TEST(fxcrt, WideStringTrimLeft) { |
| 476 CFX_WideString fred(L" FRED "); | 507 CFX_WideString fred(L" FRED "); |
| 477 fred.TrimLeft(); | 508 fred.TrimLeft(); |
| 478 EXPECT_EQ(L"FRED ", fred); | 509 EXPECT_EQ(L"FRED ", fred); |
| 479 fred.TrimLeft(L'E'); | 510 fred.TrimLeft(L'E'); |
| 480 EXPECT_EQ(L"FRED ", fred); | 511 EXPECT_EQ(L"FRED ", fred); |
| 481 fred.TrimLeft(L'F'); | 512 fred.TrimLeft(L'F'); |
| 482 EXPECT_EQ(L"RED ", fred); | 513 EXPECT_EQ(L"RED ", fred); |
| 483 fred.TrimLeft(L"ERP"); | 514 fred.TrimLeft(L"ERP"); |
| 484 EXPECT_EQ(L"D ", fred); | 515 EXPECT_EQ(L"D ", fred); |
| 485 | 516 |
| 486 CFX_WideString blank(L" "); | 517 CFX_WideString blank(L" "); |
| 487 blank.TrimLeft(L"ERP"); | 518 blank.TrimLeft(L"ERP"); |
| 488 EXPECT_EQ(L" ", blank); | 519 EXPECT_EQ(L" ", blank); |
| 489 blank.TrimLeft(L'E'); | 520 blank.TrimLeft(L'E'); |
| 490 EXPECT_EQ(L" ", blank); | 521 EXPECT_EQ(L" ", blank); |
| 491 blank.TrimLeft(); | 522 blank.TrimLeft(); |
| 492 EXPECT_EQ(L"", blank); | 523 EXPECT_EQ(L"", blank); |
| 493 | 524 |
| 494 CFX_WideString empty; | 525 CFX_WideString empty; |
| 495 empty.TrimLeft(L"ERP"); | 526 empty.TrimLeft(L"ERP"); |
| 496 EXPECT_EQ(L"", empty); | 527 EXPECT_EQ(L"", empty); |
| 497 empty.TrimLeft(L'E'); | 528 empty.TrimLeft(L'E'); |
| 498 EXPECT_EQ(L"", empty); | 529 EXPECT_EQ(L"", empty); |
| 499 empty.TrimLeft(); | 530 empty.TrimLeft(); |
| 500 EXPECT_EQ(L"", empty); | 531 EXPECT_EQ(L"", empty); |
| 501 } | 532 } |
| 502 | 533 |
| 534 TEST(fxcrt, WideStringTrimLeftCopies) { |
| 535 { |
| 536 // With a single reference, no copy takes place. |
| 537 CFX_WideString fred(L" FRED "); |
| 538 const FX_WCHAR* old_buffer = fred.c_str(); |
| 539 fred.TrimLeft(); |
| 540 EXPECT_EQ(L"FRED ", fred); |
| 541 EXPECT_EQ(old_buffer, fred.c_str()); |
| 542 } |
| 543 { |
| 544 // With multiple references, we must copy. |
| 545 CFX_WideString fred(L" FRED "); |
| 546 CFX_WideString other_fred = fred; |
| 547 const FX_WCHAR* old_buffer = fred.c_str(); |
| 548 fred.TrimLeft(); |
| 549 EXPECT_EQ(L"FRED ", fred); |
| 550 EXPECT_EQ(L" FRED ", other_fred); |
| 551 EXPECT_NE(old_buffer, fred.c_str()); |
| 552 } |
| 553 { |
| 554 // With multiple references, but no modifications, no copy. |
| 555 CFX_WideString fred(L"FRED"); |
| 556 CFX_WideString other_fred = fred; |
| 557 const FX_WCHAR* old_buffer = fred.c_str(); |
| 558 fred.TrimLeft(); |
| 559 EXPECT_EQ(L"FRED", fred); |
| 560 EXPECT_EQ(L"FRED", other_fred); |
| 561 EXPECT_EQ(old_buffer, fred.c_str()); |
| 562 } |
| 563 } |
| 564 |
| 503 TEST(fxcrt, WideStringUTF16LE_Encode) { | 565 TEST(fxcrt, WideStringUTF16LE_Encode) { |
| 504 struct UTF16LEEncodeCase { | 566 struct UTF16LEEncodeCase { |
| 505 CFX_WideString ws; | 567 CFX_WideString ws; |
| 506 CFX_ByteString bs; | 568 CFX_ByteString bs; |
| 507 } utf16le_encode_cases[] = { | 569 } utf16le_encode_cases[] = { |
| 508 {L"", CFX_ByteString("\0\0", 2)}, | 570 {L"", CFX_ByteString("\0\0", 2)}, |
| 509 {L"abc", CFX_ByteString("a\0b\0c\0\0\0", 8)}, | 571 {L"abc", CFX_ByteString("a\0b\0c\0\0\0", 8)}, |
| 510 {L"abcdef", CFX_ByteString("a\0b\0c\0d\0e\0f\0\0\0", 14)}, | 572 {L"abcdef", CFX_ByteString("a\0b\0c\0d\0e\0f\0\0\0", 14)}, |
| 511 {L"abc\0def", CFX_ByteString("a\0b\0c\0\0\0", 8)}, | 573 {L"abc\0def", CFX_ByteString("a\0b\0c\0\0\0", 8)}, |
| 512 {L"\xaabb\xccdd", CFX_ByteString("\xbb\xaa\xdd\xcc\0\0", 6)}, | 574 {L"\xaabb\xccdd", CFX_ByteString("\xbb\xaa\xdd\xcc\0\0", 6)}, |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 } | 801 } |
| 740 } | 802 } |
| 741 | 803 |
| 742 TEST(fxcrt, EmptyWideString) { | 804 TEST(fxcrt, EmptyWideString) { |
| 743 CFX_WideString empty_str; | 805 CFX_WideString empty_str; |
| 744 EXPECT_TRUE(empty_str.IsEmpty()); | 806 EXPECT_TRUE(empty_str.IsEmpty()); |
| 745 EXPECT_EQ(0, empty_str.GetLength()); | 807 EXPECT_EQ(0, empty_str.GetLength()); |
| 746 const FX_WCHAR* cstr = empty_str.c_str(); | 808 const FX_WCHAR* cstr = empty_str.c_str(); |
| 747 EXPECT_EQ(0, FXSYS_wcslen(cstr)); | 809 EXPECT_EQ(0, FXSYS_wcslen(cstr)); |
| 748 } | 810 } |
| OLD | NEW |