Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/strings/string_util.h" | 5 #include "base/strings/string_util.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 #include <stddef.h> | 9 #include <stddef.h> |
| 10 #include <stdint.h> | 10 #include <stdint.h> |
| (...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 669 EXPECT_EQ(13, HexDigitToInt('d')); | 669 EXPECT_EQ(13, HexDigitToInt('d')); |
| 670 EXPECT_EQ(14, HexDigitToInt('e')); | 670 EXPECT_EQ(14, HexDigitToInt('e')); |
| 671 EXPECT_EQ(15, HexDigitToInt('f')); | 671 EXPECT_EQ(15, HexDigitToInt('f')); |
| 672 } | 672 } |
| 673 | 673 |
| 674 TEST(StringUtilTest, JoinString) { | 674 TEST(StringUtilTest, JoinString) { |
| 675 std::string separator(", "); | 675 std::string separator(", "); |
| 676 std::vector<std::string> parts; | 676 std::vector<std::string> parts; |
| 677 EXPECT_EQ(std::string(), JoinString(parts, separator)); | 677 EXPECT_EQ(std::string(), JoinString(parts, separator)); |
| 678 | 678 |
| 679 parts.push_back(std::string()); | |
| 680 EXPECT_EQ(std::string(), JoinString(parts, separator)); | |
| 681 parts.clear(); | |
| 682 | |
| 679 parts.push_back("a"); | 683 parts.push_back("a"); |
| 680 EXPECT_EQ("a", JoinString(parts, separator)); | 684 EXPECT_EQ("a", JoinString(parts, separator)); |
| 681 | 685 |
| 682 parts.push_back("b"); | 686 parts.push_back("b"); |
| 683 parts.push_back("c"); | 687 parts.push_back("c"); |
| 684 EXPECT_EQ("a, b, c", JoinString(parts, separator)); | 688 EXPECT_EQ("a, b, c", JoinString(parts, separator)); |
| 685 | 689 |
| 686 parts.push_back(std::string()); | 690 parts.push_back(std::string()); |
| 687 EXPECT_EQ("a, b, c, ", JoinString(parts, separator)); | 691 EXPECT_EQ("a, b, c, ", JoinString(parts, separator)); |
| 688 parts.push_back(" "); | 692 parts.push_back(" "); |
| 689 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|")); | 693 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|")); |
| 690 } | 694 } |
| 691 | 695 |
| 692 TEST(StringUtilTest, JoinString16) { | 696 TEST(StringUtilTest, JoinString16) { |
| 693 string16 separator = ASCIIToUTF16(", "); | 697 string16 separator = ASCIIToUTF16(", "); |
| 694 std::vector<string16> parts; | 698 std::vector<string16> parts; |
| 695 EXPECT_EQ(string16(), JoinString(parts, separator)); | 699 EXPECT_EQ(string16(), JoinString(parts, separator)); |
| 696 | 700 |
| 701 parts.push_back(string16()); | |
| 702 EXPECT_EQ(string16(), JoinString(parts, separator)); | |
| 703 parts.clear(); | |
| 704 | |
| 697 parts.push_back(ASCIIToUTF16("a")); | 705 parts.push_back(ASCIIToUTF16("a")); |
| 698 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator)); | 706 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator)); |
| 699 | 707 |
| 700 parts.push_back(ASCIIToUTF16("b")); | 708 parts.push_back(ASCIIToUTF16("b")); |
| 701 parts.push_back(ASCIIToUTF16("c")); | 709 parts.push_back(ASCIIToUTF16("c")); |
| 702 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator)); | 710 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator)); |
| 703 | 711 |
| 704 parts.push_back(ASCIIToUTF16("")); | 712 parts.push_back(ASCIIToUTF16("")); |
| 705 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator)); | 713 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator)); |
| 706 parts.push_back(ASCIIToUTF16(" ")); | 714 parts.push_back(ASCIIToUTF16(" ")); |
| 707 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|"))); | 715 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|"))); |
| 708 } | 716 } |
| 709 | 717 |
| 710 TEST(StringUtilTest, JoinStringPiece) { | 718 TEST(StringUtilTest, JoinStringPiece) { |
| 711 std::string separator(", "); | 719 std::string separator(", "); |
| 712 std::vector<base::StringPiece> parts; | 720 std::vector<StringPiece> parts; |
| 713 EXPECT_EQ(base::StringPiece(), JoinString(parts, separator)); | 721 EXPECT_EQ(std::string(), JoinString(parts, separator)); |
| 722 | |
| 723 // Test empty first part (https://crbug.com/698073). | |
| 724 parts.push_back(StringPiece()); | |
| 725 EXPECT_EQ(std::string(), JoinString(parts, separator)); | |
| 726 parts.clear(); | |
| 714 | 727 |
| 715 parts.push_back("a"); | 728 parts.push_back("a"); |
| 716 EXPECT_EQ("a", JoinString(parts, separator)); | 729 EXPECT_EQ("a", JoinString(parts, separator)); |
| 717 | 730 |
| 718 parts.push_back("b"); | 731 parts.push_back("b"); |
| 719 parts.push_back("c"); | 732 parts.push_back("c"); |
| 720 EXPECT_EQ("a, b, c", JoinString(parts, separator)); | 733 EXPECT_EQ("a, b, c", JoinString(parts, separator)); |
| 721 | 734 |
| 722 parts.push_back(base::StringPiece()); | 735 parts.push_back(StringPiece()); |
| 723 EXPECT_EQ("a, b, c, ", JoinString(parts, separator)); | 736 EXPECT_EQ("a, b, c, ", JoinString(parts, separator)); |
| 724 parts.push_back(" "); | 737 parts.push_back(" "); |
| 725 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|")); | 738 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|")); |
| 726 } | 739 } |
| 727 | 740 |
| 728 TEST(StringUtilTest, JoinStringPiece16) { | 741 TEST(StringUtilTest, JoinStringPiece16) { |
| 729 string16 separator = ASCIIToUTF16(", "); | 742 string16 separator = ASCIIToUTF16(", "); |
| 730 std::vector<base::StringPiece16> parts; | 743 std::vector<StringPiece16> parts; |
| 731 EXPECT_EQ(base::StringPiece16(), JoinString(parts, separator)); | 744 EXPECT_EQ(string16(), JoinString(parts, separator)); |
| 745 | |
| 746 // Test empty first part (https://crbug.com/698073). | |
| 747 parts.push_back(StringPiece16()); | |
| 748 EXPECT_EQ(string16(), JoinString(parts, separator)); | |
| 749 parts.clear(); | |
| 732 | 750 |
| 733 const string16 kA = ASCIIToUTF16("a"); | 751 const string16 kA = ASCIIToUTF16("a"); |
| 734 parts.push_back(kA); | 752 parts.push_back(kA); |
| 735 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator)); | 753 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator)); |
| 736 | 754 |
| 737 const string16 kB = ASCIIToUTF16("b"); | 755 const string16 kB = ASCIIToUTF16("b"); |
| 738 parts.push_back(kB); | 756 parts.push_back(kB); |
| 739 const string16 kC = ASCIIToUTF16("c"); | 757 const string16 kC = ASCIIToUTF16("c"); |
| 740 parts.push_back(kC); | 758 parts.push_back(kC); |
| 741 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator)); | 759 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator)); |
| 742 | 760 |
| 743 parts.push_back(base::StringPiece16()); | 761 parts.push_back(StringPiece16()); |
| 744 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator)); | 762 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator)); |
| 745 const string16 kSpace = ASCIIToUTF16(" "); | 763 const string16 kSpace = ASCIIToUTF16(" "); |
| 746 parts.push_back(kSpace); | 764 parts.push_back(kSpace); |
| 747 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|"))); | 765 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|"))); |
| 748 } | 766 } |
| 749 | 767 |
| 750 TEST(StringUtilTest, JoinStringInitializerList) { | 768 TEST(StringUtilTest, JoinStringInitializerList) { |
| 751 std::string separator(", "); | 769 std::string separator(", "); |
| 752 EXPECT_EQ(base::StringPiece(), JoinString({}, separator)); | 770 EXPECT_EQ(std::string(), JoinString({}, separator)); |
| 771 | |
| 772 // Test empty first part (https://crbug.com/698073). | |
| 773 EXPECT_EQ(std::string(), JoinString({StringPiece()}, separator)); | |
| 753 | 774 |
| 754 // With const char*s. | 775 // With const char*s. |
| 755 EXPECT_EQ("a", JoinString({"a"}, separator)); | 776 EXPECT_EQ("a", JoinString({"a"}, separator)); |
| 756 EXPECT_EQ("a, b, c", JoinString({"a", "b", "c"}, separator)); | 777 EXPECT_EQ("a, b, c", JoinString({"a", "b", "c"}, separator)); |
| 757 EXPECT_EQ("a, b, c, ", JoinString({"a", "b", "c", ""}, separator)); | 778 EXPECT_EQ("a, b, c, ", JoinString({"a", "b", "c", StringPiece()}, separator)); |
| 758 EXPECT_EQ("a|b|c|| ", JoinString({"a", "b", "c", "", " "}, "|")); | 779 EXPECT_EQ("a|b|c|| ", JoinString({"a", "b", "c", StringPiece(), " "}, "|")); |
| 759 | 780 |
| 760 // With std::strings. | 781 // With std::strings. |
| 761 const std::string kA = "a"; | 782 const std::string kA = "a"; |
| 762 const std::string kB = "b"; | 783 const std::string kB = "b"; |
| 763 EXPECT_EQ("a, b", JoinString({kA, kB}, separator)); | 784 EXPECT_EQ("a, b", JoinString({kA, kB}, separator)); |
| 764 | 785 |
| 765 // With StringPieces. | 786 // With StringPieces. |
| 766 const StringPiece kPieceA = kA; | 787 const StringPiece kPieceA = kA; |
| 767 const StringPiece kPieceB = kB; | 788 const StringPiece kPieceB = kB; |
| 768 EXPECT_EQ("a, b", JoinString({kPieceA, kPieceB}, separator)); | 789 EXPECT_EQ("a, b", JoinString({kPieceA, kPieceB}, separator)); |
| 769 } | 790 } |
| 770 | 791 |
| 771 TEST(StringUtilTest, JoinStringInitializerList16) { | 792 TEST(StringUtilTest, JoinStringInitializerList16) { |
| 772 string16 separator = ASCIIToUTF16(", "); | 793 string16 separator = ASCIIToUTF16(", "); |
| 773 EXPECT_EQ(base::StringPiece16(), JoinString({}, separator)); | 794 EXPECT_EQ(string16(), JoinString({}, separator)); |
| 795 | |
| 796 // Test empty first part (https://crbug.com/698073). | |
| 797 EXPECT_EQ(string16(), JoinString({StringPiece16()}, separator)); | |
| 774 | 798 |
| 775 // With string16s. | 799 // With string16s. |
| 776 const string16 kA = ASCIIToUTF16("a"); | 800 const string16 kA = ASCIIToUTF16("a"); |
| 777 EXPECT_EQ(ASCIIToUTF16("a"), JoinString({kA}, separator)); | 801 EXPECT_EQ(ASCIIToUTF16("a"), JoinString({kA}, separator)); |
| 778 | 802 |
| 779 const string16 kB = ASCIIToUTF16("b"); | 803 const string16 kB = ASCIIToUTF16("b"); |
| 780 const string16 kC = ASCIIToUTF16("c"); | 804 const string16 kC = ASCIIToUTF16("c"); |
| 781 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString({kA, kB, kC}, separator)); | 805 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString({kA, kB, kC}, separator)); |
| 782 | 806 |
| 783 const string16 kEmpty = ASCIIToUTF16(""); | |
| 784 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), | 807 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), |
| 785 JoinString({kA, kB, kC, kEmpty}, separator)); | 808 JoinString({kA, kB, kC, StringPiece16()}, separator)); |
|
dcheng
2017/03/03 09:11:08
This doesn't seem quite equivalent, though I'm OK
Matt Giuca
2017/03/06 02:39:57
It's not equivalent; I deliberately changed it to
| |
| 786 const string16 kSpace = ASCIIToUTF16(" "); | 809 const string16 kSpace = ASCIIToUTF16(" "); |
| 787 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), | 810 EXPECT_EQ( |
| 788 JoinString({kA, kB, kC, kEmpty, kSpace}, ASCIIToUTF16("|"))); | 811 ASCIIToUTF16("a|b|c|| "), |
| 812 JoinString({kA, kB, kC, StringPiece16(), kSpace}, ASCIIToUTF16("|"))); | |
| 789 | 813 |
| 790 // With StringPiece16s. | 814 // With StringPiece16s. |
| 791 const StringPiece16 kPieceA = kA; | 815 const StringPiece16 kPieceA = kA; |
| 792 const StringPiece16 kPieceB = kB; | 816 const StringPiece16 kPieceB = kB; |
| 793 EXPECT_EQ(ASCIIToUTF16("a, b"), JoinString({kPieceA, kPieceB}, separator)); | 817 EXPECT_EQ(ASCIIToUTF16("a, b"), JoinString({kPieceA, kPieceB}, separator)); |
| 794 } | 818 } |
| 795 | 819 |
| 796 TEST(StringUtilTest, StartsWith) { | 820 TEST(StringUtilTest, StartsWith) { |
| 797 EXPECT_TRUE(StartsWith("javascript:url", "javascript", | 821 EXPECT_TRUE(StartsWith("javascript:url", "javascript", |
| 798 base::CompareCase::SENSITIVE)); | 822 base::CompareCase::SENSITIVE)); |
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1207 const std::string live = kLive; | 1231 const std::string live = kLive; |
| 1208 std::string dead = live; | 1232 std::string dead = live; |
| 1209 strncpy(WriteInto(&dead, 5), kDead, 4); | 1233 strncpy(WriteInto(&dead, 5), kDead, 4); |
| 1210 EXPECT_EQ(kDead, dead); | 1234 EXPECT_EQ(kDead, dead); |
| 1211 EXPECT_EQ(4u, dead.size()); | 1235 EXPECT_EQ(4u, dead.size()); |
| 1212 EXPECT_EQ(kLive, live); | 1236 EXPECT_EQ(kLive, live); |
| 1213 EXPECT_EQ(4u, live.size()); | 1237 EXPECT_EQ(4u, live.size()); |
| 1214 } | 1238 } |
| 1215 | 1239 |
| 1216 } // namespace base | 1240 } // namespace base |
| OLD | NEW |